Я пытаюсь восстановить основы программирования OpenGL, которые я потерял некоторое время назад. Итак, я пытаюсь получить стандартное четверное вращение. Он появляется, но каждый раз, когда я его запускаю, соотношение сторон СИЛЬНО меняется: от сжатия или растягивания до крошечного или огромного четырехугольника. Я ничего не делаю, кроме как запускаю его, выключаю, запускаю снова, снова и снова, каждый раз с совершенно разными результатами.
Это код, с которым я балуюсь для усеченного конуса. Я знаю, что усеченная пирамида совершенно не работает, но мне интересно, почему она так сильно меняется, а я ничего не меняю?
RECT rect;
GetWindowRect(hWnd, &rect);
........
double width = rect->right - rect->left;
double height = rect->bottom - rect->top;
double aspect = width/height;
glViewport(0, 0, width, height); // Reset The Current Viewport
glMatrixMode(GL_PROJECTION); // Select The Projection Matrix
glLoadIdentity(); // Reset The Projection Matrix
GLdouble fW, fH;
double t = 0.1 * tan(aspect*45/2);
double b = -t;
double r = aspect*t;
double l = -r;
glFrustum( l, r, b, t,0.1,100.0);
Это раздел рисования. По сути, это просто копирование:
glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
glClear (GL_COLOR_BUFFER_BIT);
glPushMatrix ();
glRotatef (theta, 0.0f, 0.0f, 1.0f);
glBegin (GL_QUADS);
glColor3f (1.0f, 0.0f, 0.0f); glVertex3f (-1.0f, -1.0f, -5.15f);
glColor3f (1.0f, 1.0f, 0.0f); glVertex3f (1.0f, -1.0f, -5.15f);
glColor3f (1.0f, 0.0f, 1.0f); glVertex3f (1.0f, 1.0f, -5.15f);
glColor3f (0.0f, 1.0f, 0.0f); glVertex3f (-1.0f, 1.0f, -5.15f);
glEnd ();
glPopMatrix ();
SwapBuffers (hDC);
theta += 1.0f;
Sleep (1);
Подробнее здесь: https://stackoverflow.com/questions/786 ... o-the-code