我渲染了我的世界。根据一些具体要求,它包括(一段时间)地板上的一些灯。我正在使用三角形基元渲染这些灯光。现在我有以下代码来缩放和限制渲染区域:
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之间的界限不再平行......
我的一位朋友建议我this document。基本上它解释了如何提取平截头体飞机......
但这意味着我应该手动检查每个基元是否在内部。
是否有使用glOrtho调用的方法?
我想获得这样的东西:
答案 0 :(得分:1)
好的,在评论中由当选者解释之后,答案是:你对观看体积剪裁平面的含义存在误解。
它们不是某种与场景对齐的边界框。
近和远剪裁平面是屏幕投影到世界的一种投影,根据定义,它们总是与视图对齐。你无能为力,因为这是OpenGL使用数学的基础。
在OpenGL中也不可能让基元向无穷大扩展,因此无论如何几何都必须以某种方式受到限制。