Вот чего я хочу достичь. У меня есть флаг под названием switch_2D_3D в коде ниже, и когда это правда, я переключаюсь в 2D-режим, иначе в 3D.OpenGL при переключении с 2D на 3D
void reshape(GLsizei width, GLsizei height)
{
if (switch_2D_3D)
{
// GLsizei for non-negative integer
// Compute aspect ratio of the new window
if (height == 0)
height = 1; // To prevent divide by 0
GLfloat aspect = (GLfloat)width/(GLfloat)height;
// Reset transformations
glLoadIdentity();
// Set the aspect ratio of the clipping area to match the viewport
glMatrixMode(GL_PROJECTION); // To operate on the Projection matrix
// Set the viewport to cover the new window
glViewport(0, 0, width, height);
if (width >= height)
{
// aspect >= 1, set the height from -1 to 1, with larger width
gluOrtho2D(-1.0 * aspect, 1.0 * aspect, -1.0, 1.0);
}
else
{
// aspect < 1, set the width to -1 to 1, with larger height
gluOrtho2D(-1.0, 1.0, -1.0/aspect, 1.0/aspect);
}
winWidth = width;
winHeight = height;
} // 2D mode
else
{
// Prevent a divide by zero, when window is too short
// (you cant make a window of zero width).
if (height == 0)
height = 1;
float ratio = width * 1.0/height;
// Use the Projection Matrix
glMatrixMode(GL_PROJECTION);
// Reset Matrix
glLoadIdentity();
// Set the viewport to be the entire window
glViewport(0, 0, width, height);
// Set the correct perspective.
gluPerspective(45.0f, ratio, 0.1f, 100.0f);
// Get Back to the Modelview
glMatrixMode(GL_MODELVIEW);
winWidth = width;
winHeight = height;
}// 3D mode
}
Все отлично работает при рисовании только в 2D-режиме, но когда я изменить флаг, чтобы переключиться в 3D-режиме, здесь возникает проблема
Каждый раз, когда я изменить размер окна, то, что я рисую в 3d-сцена (например, куб) будет меньше и меньше, в конце концов исчезнет, почему это происходит
И если я вернусь в 2D-режим, все в режиме 2d все еще работает нормально, проблема в 3d-режиме
Кроме того, если я ста rt программа с флагом, установленным на false, я увижу куб, и я все равно буду уменьшаться при изменении размера окна каждый раз
Почему это происходит?
Я думаю, вы должны перестать думать в терминах «2D против 3D». Это различие не имеет смысла, истина должна быть рассказана. То, что вы переключаете туда, - это проекция, и, конечно же, вы можете использовать орфографическую проекцию для 3D-сцен. – datenwolf