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