如何使glOrtho平行六面体旋转?

时间:2012-07-30 13:09:29

标签: opengl rotation plane frustum orthogonal

我渲染了我的世界。根据一些具体要求,它包括(一段时间)地板上的一些灯。我正在使用三角形基元渲染这些灯光。现在我有以下代码来缩放和限制渲染区域:

            if(aspect>1)    
                gl.glOrtho(-scale*aspect, scale*aspect, -scale, scale, 0, 2);
            else
                gl.glOrtho(-scale, scale, -scale/aspect, scale/aspect, 0, 2);

正如您在此图像中看到的那样,远平面正在通过一条线(与B和D之间的圆上的线平行)切割光线。

enter image description here

当我旋转场景时出现问题...... glOrtho“盒子”保持不动。您可以通过始终注视灯光的切割线来注意它。它与B和D之间的界限不再平行......

enter image description here

我的一位朋友建议我this document。基本上它解释了如何提取平截头体飞机......

但这意味着我应该手动检查每个基元是否在内部。

是否有使用glOrtho调用的方法?

我想获得这样的东西:

enter image description here

1 个答案:

答案 0 :(得分:1)

好的,在评论中由当选者解释之后,答案是:你对观看体积剪裁平面的含义存在误解。

它们不是某种与场景对齐的边界框。

近和远剪裁平面是屏幕投影到世界的一种投影,根据定义,它们总是与视图对齐。你无能为力,因为这是OpenGL使用数学的基础。

在OpenGL中也不可能让基元向无穷大扩展,因此无论如何几何都必须以某种方式受到限制。