2010-12-16 16 views
0

私はこれを理解しようとしていましたが、それを行う方法を見つけることができず、実際にそれを説明するものは何もありません。モデリングのやり方、どのように顔を使って作業するのですか。しかし、彼らはメモリに保存して作業することはできません。私は主にobjを見ていましたが、残りは簡単ですが、主に配列を格納するだけですが、面では、オブジェクトで頂点の詳細を格納することしかできませんでした。そのたびにファイルから読み込むことができますが、それは間違いなく正しいでしょうか?すべての顔にオブジェクトを使用するのは夢中ですが、他の方法は考えられません! ちょうど見ている本や、正しい方向に私を指し示すものでさえ、すべてがこのようなものを飛ばしているようだからです。ありがとう。メモリに顔を保存する方法

答えて

2

顔は通常3つ以上の頂点が接続されています。つまり、各面を、頂点(または頂点へのインデックス)のリストとして格納することができます。

f0: [v0 v1 v2] 
f1: [v3 v4 v5] 
... 

または、各顔のための頂点の量が予め定められている場合(私は賭けと思われる一般的です)、あなたは、単一のリスト/ベクトル/配列にそれを折りたたむことができ:

[/* face 1 */ v0 v1 v2 /* face 2 */ v3 v4 v5] 

Wikipedia may convey it better than I do.

+0

私はこれを得ました、それは余分なものでした、彼らはすべてテクスチャとそれらに関連付けられているものも持っています。私が何かを見逃していない限り、これは各顔に保存する必要がありますか? – AaronM

+0

私はそれがあなたの必要性にかかっていると思っていますが、そのような情報は通常、少なくとも頂点レベルで保存されます。顔に属する頂点をすばやく検索することができれば、顔をテクスチャリングするために必要なデータをすばやく見つけることができます。 – Skurmedel

+0

@AaronM:私が言っていることは、すべての情報が頂点や他の場所に保存されているということですが、各頂点にはなく、各頂点には個別であるということです。 – Skurmedel

1

あなたが探しているのは、頂点の配列です。どのように動作するかは、各オブジェクトに頂点の配列と色が含まれていることです。頂点の法線は、この同じ配列(vertexX、vertexY、vertexZ、normalX、normalY、normalZ)に格納されます。オブジェクトをレンダリングする場合は、オブジェクトの配列をループし、各オブジェクトを次のようにレンダリングします。

float plane[] = { 
    10, 10, 0, 0, 0, 1, 
    -10, 10, 0, 0, 0, 1, 
    -10, -10, 0, 0, 0, 1, 
    10, 10, 0, 0, 0, 1, 
    -10, 10, 0, 0, 0, 1, 
    10, -10, 0, 0, 0, 1, 
}; 

glEnableClientState(GL_VERTEX_ARRAY); 
glEnableClientState(GL_NORMAL_ARRAY); 

glVertexPointer(3, GL_FLOAT, sizeof(plane[0])*6, &plane[0]); 
glNormalPointer(3, GL_FLOAT, sizeof(plane[0])*6, &plane[3]); 

glColor4f(1.0f, 0.0f, 0.0f, 1.0f); 
glDrawArrays(GL_TRIANGLES, 0, (sizeof(plane)/sizeof(plane[0]))/6); 

glDisableClientState(GL_VERTEX_ARRAY); 
glDisableClientState(GL_NORMAL_ARRAY); 

これは赤い平面を描くはずです。違いは、あなたのオブジェクト定義から配列を供給したいということだけです。頂点ごとに色情報を含めることもでき、上記のコードとglEnableClientState(GL_COLOR_ARRAY)にglColorPointerをインクルードするだけです。

+0

ファイルから何かをレンダリングするよりも問題が少なくなっていました。私は、必要としなかった顔に情報を保持しようとしていました。ありがとう、結構です :) – AaronM

関連する問題