2010-11-30 18 views
0

私は過去数週間、私のキーボードで頭を叩いていました。私がやろうとしているのは、浮動小数点数の配列(GLfloat)と文字列ファイルのunsigned shorts(GLushort)の配列をオブジェクト-cの等価配列にロードして、オブジェクトをレンダリングできるようにすることです。私はファイルから頂点配列を読み込むための正しい形式

vector<float> vertices; 

vector<GLushort> indices; 

としてしかし、私は、私はこれらをレンダリングするために得ることができない理由を把握することはできません何らかの理由でベクトルオブジェクトにロードされた私の配列を持っています。

glVertexPointer(3, GL_FLOAT, sizeof(vertices[0])*6, &vertices[0]); 
glNormalPoitner(GL_FLOAT, sizeof(vertices[0])*6, &vertices[3]); 
glDrawElements(GL_TRIANGLES, sizeof(indices)/sizeof(indices[0]), GL_UNSIGNED_SHORT, indices); 

サンプル配列は以下の通りです:

vertices: (Vx, Vy, Vz, Nx, Ny, Nz) 

{10, 10, 0, 0, 0, 1, 
-10, 10, 0, 0, 0, 1, 
-10, -10, 0, 0, 0, 1, 
10, -10, 0, 0, 0, 1}; 

indices: (v1, v2, v3) 
{0, 1, 2, 
0, 2, 3}; 

テキストファイルは、私はこのようなルックスをレンダリングするから、これらの配列をロードしたい:ここでは上記のレンダリングのための私のコードがある

4 //Number of Vertices 
###Vertices### 
v 10 10 0 0 0 1 
v -10 10 0 0 0 1 
v -10 -10 0 0 0 1 
v 10 -10 0 0 0 1 
###Object1### 
2 //Number of faces 
f 0 1 2 
f 3 4 5 

ベクターオブジェクトは取るのに最適なアプローチですか?そうでない場合は、何ですか?そして、私はこれらがレンダリングされないことを間違って何をしていますか?ありがとう。

+0

"私はこれらをレンダリングすることができません"。代わりにあなたは何を...?クラッシュ?黒いスクリーン? – genpfault

+0

申し訳ありませんが私は明確にしていない、それはちょうど私のクリアカラーの背景をレンダリングしていない。 glDrawElements行をコメントアウトした場合と同じです。私がやっていることをglDrawElementsよりも効率的にレンダリングする方法はありますか? – Davido

答えて

2

GL_TRIANGLESを使用して頂点の書式を指定します。

alt text

あなたのフォーマットが間違っている、GL_TRIANGLESについてのグラフを参照してください。 そして、GL_TRIANGLE_STRIP形式を使用することをお勧めします。頂点はほとんど必要ありません。

+0

私は最終的にglDrawElementsの最後のパラメータがインデックスのベクトルにアドレスを必要とするように見えました。 OBJファイルからジオメトリを読み込んでいますので、ジオメトリがすでに作成されている場合、三角形ストリップを使用してジオメトリをレンダリングするにはどうすればよいですか?私は、三角形ストリップを利用するためにインデックスを並べ替えることができるデスクトップ上にプリプロセッサを書くことに反対するつもりはありません。 – Davido

+0

あなたのポストの頂点を使って、(x 、y)。頂点の流れは(10,10)→(-10,10)→(10、-10)→(-10、-10)となります。 – AechoLiu

+0

ジオメトリプリプロセッサに最適化ルーチンを書くことで、重複した頂点を見つけ、重複をなくし、インデックスポインタを調整することで、同じことを達成できました。唯一の違いのように、頂点は三角形のストリップで再利用されますが、三角形では再利用されません。これがなぜ三角形ストリップと同じくらい速く、またはほぼ同じ速さにならないのか? – Davido

関連する問題