2016-06-20 11 views
1

私はOpenGLでレンダリングされる私自身の頂点、色、およびインデックスを作成しました。 頂点、色、およびインデックスをレンダリングするためのソースコードです。OpenGLの頂点と波面objへのインデックス

//CODES TO SET VBO.... 
void displayCallback() {  
    glVertexPointer(...); 
    glColorPointer(...); 
    glDrawElemnts(GL_TRIANGLE_STRIP,...); 
} 

ご覧のとおり、インデックスはGL_TRIANGLE_STRIPとして作成され、レンダリングされます。 レンダリングした後、波面オブジェクトファイルを頂点、インデックス、および色のデータで保存します。

私はこの.objファイルを作成しようとしました。

for(int i = 0; i < vertexSize; ++i) { 
    fprintf(fp, "v %f %f %f\n", vertices[i*3], vertices[i*3+1], vertices[i*3+2]); 
} 

fprintf("fp, "s 1\n"); 

for(int i = 0; i < indexSize; ++i) { 
    fprintf(fp, "f %d %d %d\n", indices[i*3], indices[i*3+1], indices[i*3+2]); 
} 

私はそれがロードに失敗したことがassimpビューア、(http://www.assimp.org/)を使用して再オープンしようとしました。 何か不足していますか?

ありがとうございました。

答えて

2

単純なサンプルobjファイル(キューブのようなコード)を追加して、ファイル内の内容を確認してください。見てみましょうということで、私が何を意味するかを確認するには:

私の賭けは、あなたが間違ったインデックスを得たことです。

  1. GL_TRIANGLE_STRIPn長の頂点ストリームはGL_TRIANGLE_STRIPn-2三角形を生成するOpenGL docによれば、三角形当たり1頂点ない3

    を有しています。

  2. 波面OBJファイルインデックスは1

    から0からだから、最も可能性の高いインデックスを始めているので、それをチェックし...、それに応じ+1かを使用します。

私はあなたのデータ構造のアーキテクチャ/トポロジーを知らないが、パット#1、#2(私はあなたの配列/テーブルとモデルを持っていないとしてテストされていません)私の意見では、あなたの顔は、次のように保存する必要があります一緒に:この波面OBJの場合

fprintf(fp, "f %d %d %d\n", indices[0]+1, indices[1]+1, indices[2]+1); 
for(int i = 3; i < indexSize; i++) 
fprintf(fp, "f %d %d %d\n", indices[i-2]+1, indices[i-1]+1, indices[i]+1); 

カラーデータ

は、私は申し訳ありませんが、それらに精通していないです(、別のファイルのMTLにSTLを材料拡張子を使用しています...)しかし、最近の3Dスキャナは、それは次のように行われ、直接いくつかの視聴者でサポートされているOBJファイル()内の文書化されていない色のエンコーディングを使用している:頂点がある場合

v -5.231932 438.659877 -432.038039 0.000000 1.000000 0.000000 

ので6は最初3x,y,zであり、最後の3はとてもr,g,bある座標赤に着色されたリンクの答えからキューブはあなたがそのようなエンコーディングをサポートしているかどうかを確認するためにあなたのビューアでそれを試すことができます

v -1.0 -1.0 -1.0 1 0 0 
v +1.0 -1.0 -1.0 1 0 0 
v +1.0 +1.0 -1.0 1 0 0 
v -1.0 +1.0 -1.0 1 0 0 
v -1.0 -1.0 +1.0 1 0 0 
v +1.0 -1.0 +1.0 1 0 0 
v +1.0 +1.0 +1.0 1 0 0 
v -1.0 +1.0 +1.0 1 0 0 

f 1 2 3 4 
f 5 6 7 8 
f 1 2 6 5 
f 2 3 7 6 
f 3 4 8 7 
f 4 1 5 8 

になります...私は、彼らがそのように保存することがどこにいくつかの低コストの3Dスキャナーのアプリで見ましたファイルを再読み込みした後i色をレンダリングすることができません...

+0

問題は、間違ったインデックス付けが0で始まるために発生しました。 これで解決しました。ありがとうございました! –

関連する問題