Сначала забудьте о glutSolidCube. GLUT не является частью OpenGL, это всего лишь небольшая удобная библиотека для него.
Вы должны понимать, что OpenGL имеет дело только с точками, линиями и треугольниками. И он не поддерживает сцену, а просто рисует точки, линии и треугольники. Каждый сам по себе без какой-либо коннотации топологии. Также OpenGL не следует путать с некоторыми математическими библиотеками. Функции glTranslate, glRotate, glScale и т. Д. Являются чистым наследием и были удалены из современных версий OpenGL.
Как говорится ...
Скажем, у меня была камера на 5,5,20, смотрящая в сторону 0,0,0 (под углом), и я хотел разместить куб на 5,2,10, а затем еще на -5, -2 , 20. Как бы я использовал эти абсолютные позиции? Кроме того, как бы я использовал абсолютные размеры, скажем, я хотел, чтобы при -5, -2,20 был размер 20,5,10. Как бы я сделал это в OpenGL?
Я подойду к тому, что вы уже знаете (который использует старые OpenGL-1.1 и GLUT):
void draw()
{
/* Viewport and projection really should be set in the
drawing handler. They don't belong into the reshape. */
glViewport(...);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
your_projection();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(5, 5, 20, 0, 0, 0, 0, 1, 0);
glPushMatrix();
glTranslatef(5, 2, 10);
draw_cube();
glPopMatrix();
glPushMatrix();
glTranslatef(-5, -2, 20);
draw_cube();
glPopMatrix();
glPushMatrix();
glTranslatef(-5, -2, 20);
glScalef(20, 5, 10);
draw_cube();
glPopMatrix();
}