Я пытаюсь создать простую программу, которая будет отображать чайник Юты в начале координат и просматривать его с помощью камеры, однако чайник вообще не отображает, пока камера не находится очень близко (так что они почти совпадают). Сначала я подумал, что у меня могут отображаться неправильные грани многоугольника, но когда я изменил его с CCW на CW, эта проблема не была исправлена. Я добавил функцию, которая перемещает камеру по оси z в направлении -z при каждом нажатии z. Ничего не отображается, пока камера не окажется очень близко к исходной точке. Затем камера проходит, и сцена больше не визуализируется. Я пробовал с различными осветительными приборами и положениями камеры, но ничего не помогает. Я уже не знаю, что менять. Любая помощь приветствуется. Проблемный код ниже.
#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#include <GLUT/glut.h>
void display(void);
void reshape(int x, int y);
void init(void);
void keyboard(unsigned char, int, int);
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(800, 600);
glutInitWindowPosition(0, 0);
glutCreateWindow("Test");
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
void init(void)
{
glShadeModel(GL_SMOOTH);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
}
float camx = 0.0, camy = 0.0, camz = 5.0;
void display(void)
{
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
gluPerspective(30.0, 1.3, 0.1, 200.0);
glLoadIdentity();
gluLookAt(camx, camy, camz, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glFrontFace(GL_CCW);
glClearColor(0.0, 0.0, 0.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glColor3f(1.0, 0.0, 0.0);
glutSolidTeapot(1.0);
glFlush();
}
void reshape (int w, int h)
{
glViewport(0, 0, (GLsizei) w, (GLsizei) h);
}
void keyboard(unsigned char key, int x, int y)
{
if (key == 'z') {
camz -= .3;
glutPostRedisplay();
}
}