вам нужно либо указать матрицу объектов напрямую (как при загрузке объектов из файла 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, yaw, pitch and roll]). Если вы просто хотите отобразить некоторые объекты, попробуйте это:
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
}
Надеюсь, это поможет ...