C++ opengl透视视图剪辑太早了

C++ opengl透视视图剪辑太早了,c++,opengl,qt4,C++,Opengl,Qt4,我得到了以下代码: glMatrixMode(GL_PROJECTION); glLoadIdentity(); glViewport(0, 0, (GLint)w, (GLint)h); //got w and h from QT4.7.1's QGLWidget gluPerspective(90,1,0.1,1000); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); //me.position is 0;0;0 gluLookAt(me.pos

我得到了以下代码:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glViewport(0, 0, (GLint)w, (GLint)h); //got w and h from QT4.7.1's QGLWidget
gluPerspective(90,1,0.1,1000);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//me.position is 0;0;0
gluLookAt(me.position.x(), me.position.y(),      me.position.z(),
          me.position.x(), me.position.y(),      me.position.z()+1.0f,
          me.position.x(), me.position.y()+1.0f, me.position.z());
glTranslatef(-0.2,0.5,2);
glRotated(180,0,1,0);
glRotated(45,1,0,0);
glRotated(45,0,0,1);
glFrontFace(GL_CW);
glutSolidTeapot(0.5f);
glFrontFace(GL_CCW);
现在,问题是,opengl几乎要裁剪整个茶壶,我不明白为什么

我认为zNear/zFar飞机出了问题,但我不明白为什么

如果有人能告诉我我做错了什么/如何修复它,请告诉我


提前感谢

您应该在glMatrixMode(GL_MODELVIEW)之后添加一个glLoadIdentity();否则,每次重画都会累积翻译。旁注:glViewport未绑定到投影矩阵模式;它可以在渲染过程中随时更改–大多数人在实际投影设置之前进行一次“理智选择”设置,但也可以在进行图形调用之前进行设置。当前位置没有错,但可能会产生误导。还有,为什么要切换背面剔除方向?哎呀,我做了loadIdentity,忘记复制了,对不起,会改变的。对于背面剔除:因为SolidTeapot手册页说我应该这样做,似乎他们使用了错误的面方向…您是否尝试降低近/远剪裁比率,即将近剪裁设置为尽可能远,将远剪裁设置为尽可能近?你可能会遇到深度缓冲区精度的问题。我可以试试,但它会将我的背景星场剪辑到约1k的距离。。。尝试zNear=1,zFar=10仍在同一平面上剪裁茶壶(z=2尺寸=0.5f)。。。顺便问一下,“大小”值是多少?茶壶“主体”的直径?只需渲染靠近摄影机的背景,或使用适合背景的近/远剪辑,然后清除深度缓冲区(仅深度缓冲区),切换到场景本身的投影并绘制。OpenGL不是一个场景图——它更像是某种复杂的画布和绘图工具。因此,使用OpenGL API,您必须学会像某人一样思考,使用在3D数据中操作的工具绘制图片。