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

问题描述 投票:0回答:1

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

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

我的一位朋友推荐了我的这份文档。基本上,它解释了如何提取截锥体平面,但这意味着我应该手动检查每个图元是否在内部。

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

我想获得这样的东西:

enter image description here

opengl rotation plane frustum orthogonal
1个回答
1
投票

好吧,经过 elect 在评论中的解释后,答案是:您对观看体积剪辑平面是什么有误解。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.