试图至少使Lighthouse3D 雷达视锥剔除教程的第 1 部分非常简单 ……而且我什至无法在我的渲染器中使该部分工作,这让我感到非常困惑。所以第一步是:你测试一个点是在近平面前面还是在远平面后面,如果是这种情况,则进行早期剔除。(如果没有,那么您将执行进一步的测试,但我只停留在第一部分。)我使用 2x2 立方体的世界空间中心 (x1y2z3) 并有一个可以自由移动和旋转的相机。我所有的向量和矩阵的东西都必须相当可靠,因为渲染器否则工作得很好。所以这是我对第一部分的看法(在 Go 中),简单的“Z vs 近或远”测试:func (cam *Camera) frustumHasPoint(point *Vec3) bool { var pc Vec3 v := point.Sub(&cam.Controller.Pos) // point minus camPos ref := cam.Controller.dir // take a copy of camDir ref.Z = -ref.Z ref.Normalize() // camDir was already normalized but anyway... pc.Z = v.Dot(&ref) if pc.Z > cam.Perspective.ZFar || pc.Z < cam.Perspective.ZNear { return false } return true}现在为什么我要反转 ref 的 Z?因为在教程中他们写道:“请注意图中的参照不是右手系统(如在 OpenGL 中),因为 Z 的方向已反转以使教程更直观”——好吧,在 GL 教程中当然这会产生相反的效果......好吧,如果像上面那样反转 Z,它会在大约 50% 的时间内剔除超过它应该的数量;如果我不这样做,那么大约 98% 的时间它都会“过度剔除”。我错过了什么?
- 1 回答
- 0 关注
- 198 浏览
添加回答
举报
0/150
提交
取消