射线方法--测试点

前面提出的方法是基于由六个平面限制的视景体。在这些方法中就是使用扩展的平面方程来设置参数,其中的测试都是跟平面做测试。在这一节中将提出不一样的方法,这个方法是基于名字来源于Game Programming Gems 5 的技术。

假设相机是基于三个单元向量组成:在下图中显示的XYZ。注意下面参考的不是一个右手坐标系(在OpenGL中),因为在本课程中使用这样的Z方向看起来更直观。

给一个要在视景体中要测试的点p,我们的目标是找到它引用的坐标和然后使用这些信息判断点是在视景体之内还是之外。

首先先测试z坐标,如果z坐标没有位于近平面距离和远平面距离之间那么就可以确定点是在视景体之外。否则坐标x,y必须被测试。

在上图中,p是要测试的点。假设pc是点在相机坐标的参考点,为了找到pc的z坐标,首先必须找到从点cc(相机中心)到p的坐标pc.z,然后计算出在向量z上(投影就是蓝色的点)的投影长度。就像在数学库中讲解的lines章节,这可以用点积来计算(这个是有效的,因为我们假设z坐标是单位向量),因此:

v = p - cc

    pc.z = v . Z

如果pc.z不在nearDist和farDist之间那么就在视景体之外:

if (pc.z > farDist || pc.z < nearDist)

            return (OUTSIDE);

既然pc.z我们都可以知道,其中pc是点p在相机坐标的坐标。为了找到pc.x和pc.y我们可以使用相似的方法:找到在X和Y坐标轴上的投影长度。

v = p - cc

    pc.z = v . Z

    pc.y = v . Y

    pc.x = v . X

英文地址

来源转载于:http://www.arcosu.com/post/index/107

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值