0

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

            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 之间的圆上的线)

在此处输入图像描述

当我旋转我的场景时出现问题...... glOrtho“盒子”保持固定。您可以通过始终查看灯上的切割线来注意到它。它不再平行于B和D之间的线......

在此处输入图像描述

我的一位朋友向我推荐了这份文件。基本上它解释了如何提取平截头体平面......

但这意味着我应该手动检查每个原语是否在里面。

有没有使用 glOrtho 调用的方法?

我想获得这样的东西:

在此处输入图像描述

4

1 回答 1

1

好的,在评论中选择解释后,答案是:您对查看体积剪辑平面的概念有误解。

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

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

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

于 2012-07-30T23:09:12.847 回答