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

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

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

Re[3]: C++のvector配列をGLfloat*に変換


(過去ログ 154 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■89809 / inTopicNo.1)  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*)でキャストしてみようと試みましたが駄目でした。
どなたか方法を教えてください。
引用返信 編集キー/
■89810 / inTopicNo.2)  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;
};
のほうがわかりやすいような気のせいがする。

引用返信 編集キー/
■89812 / inTopicNo.3)  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 スタイル キャストまたは関数スタイルのキャストが必要です。

と怒られてしまいます。
引用返信 編集キー/
■89813 / inTopicNo.4)  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が解けたりすることもあるかもしれませんが。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -