【发布时间】:2014-10-14 12:48:44
【问题描述】:
我正在尝试创建一个简单的程序,该程序将在原点显示犹他茶壶并用相机查看它,但是茶壶在相机非常靠近之前根本不会渲染(因此它们几乎重合)。起初,我以为我可能渲染了错误的多边形面,但是当我将它从 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();
}
}
【问题讨论】: