为了账号安全,请及时绑定邮箱和手机立即绑定

视锥体剔除的“雷达方法”:第一次简单测试失败?

视锥体剔除的“雷达方法”:第一次简单测试失败?

Go
慕后森 2021-06-03 18:46:41
试图至少使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 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

解决。原因是大脑出现故障……教程清楚地写了关于首先获取 x/y/z 轴来描述截锥体的内容,不知何故我错过了。


查看完整回答
反对 回复 2021-06-07
  • 1 回答
  • 0 关注
  • 198 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信