Я только начал играть с OpenGl, чтобы визуализировать несколько структур, каждая из которых состоит из многоугольника.
По сути, я хочу выполнить эквивалент установки камеры в точке (0,0, z) в мировых (структурных) координатах и повернуть ее вокруг осей x, y и z мировых осей (в этом порядке!) Для рендеринга. вид каждой структуры (насколько я понимаю, обычно используется обратная матрица камеры). Таким образом, насколько я понимаю, мне нужно перевести (в мировое происхождение, т.е. (0,0, -z)) * rotateZ rotateY rotateX * translate (переопределить мировое происхождение см. Ниже)
Так что я думаю, что мне нужно что-то вроде:
//Called when the window is resized
void handleResize(int w, int h) {
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(9.148, (double)w / (double)h, 800.0, 1500.0);
}
float _Zangle = 10.0f;
float _cameraAngle = 90.0f;
//Draws the 3D scene
void drawScene() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW); //Switch to the drawing perspective
glLoadIdentity(); //Reset the drawing perspective
glTranslatef(0.0f, 0.0f, -z); //Move forward Z (mm) units
glRotatef(-_Zangle, 0.0f, 0.0f, 1.0f); //Rotate "camera" about the z-axis
glRotatef(-_cameraAngle, 0.0f, 1.0f, 0.0f); //Rotate the "camera" by camera_angle about y-axis
glRotatef (90.0f,1.0f,0.0f,0.0f); // rotate "camera" by 90 degrees about x-axis
glTranslatef(-11.0f,189.0f,51.0f); //re-define origin of world coordinates to be (11,-189,-51) - applied to all polygon vertices
glPushMatrix(); //Save the transformations performed thus far
glBegin(GL_POLYGON);
glVertex3f(4.91892,-225.978,-50.0009);
glVertex3f(5.73534,-225.978,-50.0009);
glVertex3f(6.55174,-225.978,-50.0009);
glVertex3f(7.36816,-225.978,-50.0009);
.......// etc
glEnd();
glPopMatrix();
Однако, когда я компилирую и запускаю это, _angle и _cameraAngle, кажется, перевернуты, т.е. _angle, кажется, вращается вокруг оси y (по вертикали) Viewport и _cameraAngle вокруг оси z (в плоскость Viewport)? Что я делаю не так?
Спасибо, что нашли время, чтобы прочитать это