У меня есть следующие блоки кода.
Инициализация OpenGL:
glClearDepth(1.0);
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);
glShadeModel(GL_SMOOTH);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-WIDTH / (float) HEIGHT, WIDTH / HEIGHT, -1.0f, 1.0f, -1.0f, 1.0f);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_TEXTURE_2D);
Цикл OpenGL:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0f,0.0f,-1.0f);
glRotatef(xrot,1.0f,0.0f,0.0f);
glRotatef(yrot,0.0f,1.0f,0.0f);
glRotatef(zrot,0.0f,0.0f,1.0f);
glBindTexture(GL_TEXTURE_2D, texture.getTextureID());
glBegin(GL_QUADS);
{
// The first of six sides
glTexCoord2f(0.0f, 0.0f);
glVertex3f(-0.75f, -0.75f, 0.75f);
glTexCoord2f(0.75f, 0.0f);
glVertex3f(0.75f, -0.75f, 0.75f);
glTexCoord2f(0.75f, 0.75f);
glVertex3f(0.75f, 0.75f, 0.75f);
glTexCoord2f(0.0f, 0.75f);
glVertex3f(-0.75f, 0.75f, 0.75f);
....
Ширина = 800, высота = 600. Я ожидаю, что у меня будет идеально вращающийся куб; однако, под некоторыми углами это не выглядит правильным.
Я думаю, что у меня есть проблема в glOrtho, поскольку я не знаю, как создать правильное выражение.
Ваш куб обрезан передней и ближней плоскостями. Ваш куб имеет экстент 1,5, а его центр находится на расстоянии 1 единицы от вашей «камеры», но ваш диапазон отсечения составляет всего [-1,1] (относительно камеры), так что дальние края будут вне просмотр усеченный.
glPerspective () лучше подходит для 3D-рендеринга, а не glOrtho (). Используйте glPerspective () для создания объема просмотра.
Когда я заменил выражение glOrtho () на
gluPerspective(45f, (float) WIDTH / (float) HEIGHT, 0.1f, 100f);
Я получил идеальный куб.