Graphics 平截头体位置、原点和剔除

Graphics 平截头体位置、原点和剔除,graphics,opengl-es,opengl-es-2.0,Graphics,Opengl Es,Opengl Es 2.0,我正在编写一个使用透视投影的简单程序,我在场景中绘制了一组对象。对于透视投影,我使用以下代码: glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluLookAt(eyePosX, eyePosY, eyePosZ, centerPosX, centerPosY, centerPosZ, 0.0, 1.0, 0.0); glFrustum(frustumLeft,frustumRight,frustumBottom,frustumTop,frustu

我正在编写一个使用透视投影的简单程序,我在场景中绘制了一组对象。对于透视投影,我使用以下代码:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluLookAt(eyePosX, eyePosY, eyePosZ, centerPosX, centerPosY, centerPosZ, 0.0, 1.0, 0.0);
glFrustum(frustumLeft,frustumRight,frustumBottom,frustumTop,frustumNear,frustumFar); 
当我在X轴上以一定偏移量绘制对象时,该对象不在平截头体内部,该对象仍然被绘制,但被拉长,而不是被平截头体剔除。 XYZ空间中8个点相对于eyePosX/Y/Z和截头台FT/Right/Bottom/Top/Near/Far的坐标是多少? 我如何告诉OpenGL执行剔除不在平截头体内部的对象

对于透视投影,我使用以下代码:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluLookAt(eyePosX, eyePosY, eyePosZ, centerPosX, centerPosY, centerPosZ, 0.0, 1.0, 0.0);
glFrustum(frustumLeft,frustumRight,frustumBottom,frustumTop,frustumNear,frustumFar); 
有两种可能性。首先,你真的不想做这段代码所做的事情。第二,你是认真的,但并不完全理解你所做的

现在我们来讨论第一个问题。注视矩阵不应进入GL_投影矩阵内。此外,注视矩阵总是在投影矩阵之后。除非你做了什么特别的事,否则这些都应该是真的

这就引出了第二个问题。如果确实要旋转和偏移后投影空间,则不能期望根据平截头体剔除几何体。为什么?


因为OpenGL不做截锥剔除。它根据您提供的任何T&L后顶点位置进行剔除。如果在平截头体外部旋转视图,则会绘制该视图。OpenGL不会绘制不可见的内容;如果在投影后更改视图,使原本不可见的内容现在可见,那么您就更改了可见和不可见的内容。

我对OpenGL有点陌生,这种透视方法非常混乱:glFrustum需要6个参数来定义frustum的6个平面,但哪一个是原点的坐标,金字塔的顶点,我如何指定那些我认为glLook函数定义原点的坐标呢?为什么它不进入GL_投影矩阵?