C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

C++のvector配列をGLfloat*に変換 /OpenGL (18/12/31(Mon) 19:07) #89809
Re[1]: C++のvector配列をGLfloat*に変換 /774RR (18/12/31(Mon) 20:43) #89810
  └ Re[2]: C++のvector配列をGLfloat*に変換 /OpenGL (19/01/02(Wed) 19:01) #89812
    └ Re[3]: C++のvector配列をGLfloat*に変換 /とっちゃん (19/01/02(Wed) 22:21) #89813


親記事 / ▼[ 89810 ]
■89809 / 親階層)  C++のvector配列をGLfloat*に変換
□投稿者/ OpenGL (1回)-(2018/12/31(Mon) 19:07:44)

分類:[C/C++] 

OpenGLでvector配列(float型)を引数として、glVertex3fv();に入れたいと考えています。
しかし、以下のようなコンパイルエラーが生じました。


error C2664: 'void glVertex3fv(const GLfloat *)': 引数 1 を '_Ty' から 'const GLfloat *' へ変換できません。
1> with
1> [
1> _Ty=std::vector<float,std::allocator<float>>
1> ]

そこで、(GLfloat*)でキャストしてみようと試みましたが駄目でした。
どなたか方法を教えてください。
[ □ Tree ] 返信 編集キー/

▲[ 89809 ] / ▼[ 89812 ]
■89810 / 1階層)  Re[1]: C++のvector配列をGLfloat*に変換
□投稿者/ 774RR (653回)-(2018/12/31(Mon) 20:43:09)
何をどう書いたのかそれだけではわからないけど

std::vector<GLfloat> v;
v.push_back(x);
v.push_back(y);
v.push_back(z);
glVertex3fv(&v[0]);

ではだめかいな?

三次元座標 [x, y, z] を与えるのであれば vector を使うよりは

struct GLcoord3 {
    GLfloat x;
    GLfloat y;
    GLfloat z;
};
のほうがわかりやすいような気のせいがする。

[ 親 89809 / □ Tree ] 返信 編集キー/

▲[ 89810 ] / ▼[ 89813 ]
■89812 / 2階層)  Re[2]: C++のvector配列をGLfloat*に変換
□投稿者/ OpenGL (2回)-(2019/01/02(Wed) 19:01:30)
回答ありがとうございます。大変失礼しました。
今回は次々と自由自在に大きさを変えていくものを作りたくvector配列を使いたいと考えております。

このように記述しました。


====================
vector <vector<float>> v1(100, vector<float>(3)); //頂点座標xyz
vector <vector<int>> v2(100, vector<int>(2)); //v1座標間で結ぶ線


~~~~~~
glVertex3fv((GLfloat*)&v1[(GLfloat)v2[i][1]]); //線の始点
glVertex3fv((GLfloat*)&v1[(GLfloat)v2[i][1]]); //線の終点
cout << (GLfloat*)&v1[(GLfloat)[i][0]] << endl;//数値は何かチェック
~~~~~~

結果:
00A649E0

====================


なお、glVertex3fv(&v1[v2[i][1]]);では

error C2664: 'void glVertex3fv(const GLfloat *)': 引数 1 を '_Ty *' から 'const GLfloat *' へ変換できません。
1> with
1> [
1> _Ty=std::vector<float,std::allocator<float>>
1> ]
note: 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。

と怒られてしまいます。
[ 親 89809 / □ Tree ] 返信 編集キー/

▲[ 89812 ] / 返信無し
■89813 / 3階層)  Re[3]: C++のvector配列をGLfloat*に変換
□投稿者/ とっちゃん (567回)-(2019/01/02(Wed) 22:21:26)
No89812 (OpenGL さん) に返信
> 回答ありがとうございます。大変失礼しました。
> 今回は次々と自由自在に大きさを変えていくものを作りたくvector配列を使いたいと考えております。
>
> と怒られてしまいます。

そりゃ、キャストできないですからねぇ。。。

glVertex3fv( v1[v2[i][1]].data() );

でいいんじゃないですか?

個人的には、固定長なら

vector<array<GLfloat,3>> v1( 100 );
vecxtor<array<int,2>> v2( 100 );

とするかな?
こうすると、初期状態で100個の要素(中身は不定)を用意してくれます。

もちろん、そのまま使えば明後日な値が入ってるので、電源が火を噴いたり、GPUが解けたりすることもあるかもしれませんが。

[ 親 89809 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -