2012-01-15 22 views
-1

複数のオブジェクトを挿入する際に問題があります。あなたが直接オブジェクト行列を指定することも必要OpenGL複数オブジェクトを読み込む

for(int i = 0; i <= 5; i++) 
{   
    glCallList(OBJECT_LIST[ i ]); 
} 

glFlush(); 
glutSwapBuffers(); 

} // unopened paren 

void Reshape(int width, int height) { 
    glViewport(0, 0, width, height); 
    glMatrixMode(GL_PROJECTION); 

    glLoadIdentity(); 
    for(int i = 0; i <= 5; i++) {  
    if(!load_obj(argv[ i ], OBJECT_LIST[ i ])) 
    { 
     printf("error load file %s", argv[ i ]); 
    } 
    } 
} 
+3

あなたはコードをフォーマットしてくださいことはできますか?読むのは難しいです。もう一つは、load_objは何ですか?同じ基本座標(例えば、人物のモデル)を持つ5つのオブジェクトがある場合、それらは1つの場所になければなりません。 'glCallList'sの間に' glTranslatef'と 'glRotatef'を使ってみてください。 – Vyktor

答えて

2

、私は、オブジェクトをロードするが、それらはすべて一つの場所にある、このような(3DSファイルからロードするオブジェクト場合など):

glMatrixMode(GL_MODELVIEW); // we are going to manipulate object matrix 
for(int i = 0; i <= 5; i++) { 
    glPushMatrix(); // save the current modelview (assume camera matrix is there) 
    glMultMatrixf(pointer_to_object_matrix(i)); // apply object matrix 
    glCallList(OBJECT_LIST[i]); 
    glPopMatrix(); // restore modelview 
} 

は、このを見てみると、また、表示リストに行列演算を格納できないことに注意してください(つまり、load_obj()関数が行列を設定していると、これらの演算が「記録」されていないため動作しません)。

他のオプションは、このようないくつかの単純なオブジェクト測位方式、使用することである。

glMatrixMode(GL_MODELVIEW); // we are going to manipulate object matrix 
for(int i = 0; i <= 5; i++) { 
    glPushMatrix(); // save the current modelview (assume camera matrix is there) 

    glTranslatef(object_x(i), object_y(i), object_z(i)); // change object position 

    glRotatef(object_yaw(i), 0, 1, 0); 
    glRotatef(object_pitch(i), 1, 0, 0); 
    glRotatef(object_roll(i), 0, 0, 1); // change object rotations 

    glCallList(OBJECT_LIST[i]); 
    glPopMatrix(); // restore modelview 
} 

にどちらの方法を、いくつかの余分な機能(pointer_to_object_matrix又はOBJECT_ [X、Y、Z、ヨーを記述する必要があり、ピッチとロール])。あなただけのいくつかのオブジェクトを表示するために探しているなら、これを試してみてください。

glMatrixMode(GL_MODELVIEW); // we are going to manipulate object matrix 
for(int i = 0; i <= 5; i++) { 
    glPushMatrix(); // save the current modelview (assume camera matrix is there) 

    const float obj_step = 50; // spacing between the objects 
    glTranslatef((i - 2.5f) * obj_step, 0, 0); // change object position 

    glCallList(OBJECT_LIST[i]); 
    glPopMatrix(); // restore modelview 
} 

はそれが役に立てば幸い...

関連する問題