在透视投影时:
glMatrixMode(GL_PROJECTION);//通知OPENGL要进行透视投影了.
glLoadIdentity();
glFrustum(-1.0,1.0,-1.0,1.0,-1.0,7.0);//建立视景区
............画三维图形......
上面的做法导致投影失败.
诡异的是:把glFrustum()的第五个参数,即远剪切面置为3.0,再用glTranslatef(0.0,0.0,-4.0);竟然投影成功.为啥啊老大? 3.0+(-4.0)不是正好-1.0吗?
glMatrixMode(GL_PROJECTION);//通知OPENGL要进行透视投影了.
glLoadIdentity();
glFrustum(-1.0,1.0,-1.0,1.0,-1.0,7.0);//建立视景区
............画三维图形......
上面的做法导致投影失败.
诡异的是:把glFrustum()的第五个参数,即远剪切面置为3.0,再用glTranslatef(0.0,0.0,-4.0);竟然投影成功.为啥啊老大? 3.0+(-4.0)不是正好-1.0吗?
glTranslatef()是坐标变换;
glTranslatef()决定物体的位置,glFrustum()功能类似与摄像机的镜头,不管物体的位置在哪里,他总是以相同的规律将物体投影到胶片上(也就是显示屏),只不过不在他的图像拾取范围内的物体不可见而已。
能否看见,还要跟你模型的坐标值有关,即你的模型只有在视锥体里才可见。
以视点为顶点的四棱锥?
glMatrixMode(GL_PROJECTION);
glLoadIdentity(); glFrustum(-1.0,1.0,-1.0,1.0,1.0,7.0);//近--远 切面为1--7.
gluLookAt(0,0,-2.0,0,0,2.0,0,0,2.0); //视点在Z=-2,物体在Z=2.0.
你说这样能看得到吗,如果我没做其他坐标变换,而且所绘物体体积又很小的话. 脑子搞混乱了.