我的世界被渲染了。根据一些具体要求,它(有时)包括地板上的一些灯。我使用三角形基元渲染这些灯光。现在我有以下代码来缩放和限制渲染区域:
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 调用的方法?
我想获得这样的东西:
好吧,经过 elect 在评论中的解释后,答案是:您对观看体积剪辑平面是什么有误解。
它们不是某种与场景对齐的边界框。
近剪裁平面和远剪裁平面是屏幕到世界的投影,根据定义,它们始终与视图对齐。您对此无能为力,因为这是 OpenGL 使用的数学的基础。
在 OpenGL 中也不可能让基元向无穷大扩展,因此无论如何都必须以某种方式限制几何体。