通过高度图求法线

参考:https://catlikecoding.com/unity/tutorials/rendering/part-6/

只对参考https://catlikecoding.com/unity/tutorials/rendering/part-6/求法线部分说明。

对于高度图,它存储的是高度数据。我们的目的是求顶点的法线,也就是空间曲面上任意点的法线。

对于一般的平面如果已知平面方程可以分别对x,y,z求偏导直接求出法线:

但如果不知道曲面方程,只知道曲面上的某条曲线方程,能不能求曲面上某点法线呢?

这个不知道,从上面的参考文章来看,似乎就是分别求出曲线沿两个轴的切线,然后通过切线向量积求出的。

具体的说明参考中的做法:假设坐标系三个轴分别为u, h, v.   以u,v,h为轴的空间下有一个曲面,我们不知道空间的曲面方程,但是知道曲面上某条曲线的方程,假设曲线方程为u = u, v=v, h=f(u,v)。我们分别求曲线方程对u, 对v的偏导,求出曲线沿着u,v方向的切线Tu,Tv,然后求Tu,Tv的叉积,所得就是曲线的法线,也就是曲面的法线。

这里的问题是,曲面上某条曲线的法线是否能代表曲面的法线是个问题,可能的说法是:https://wenku.baidu.com/view/0152ad4af56527d3240c844769eae009581ba2af.html?from=search

先不管这些,看看怎么求曲线切线方程吧。

曲线方程分为参数方程形式,也就是:

 

 

注意情形2,其实就是x=x , y = y(x), z=z(x)。 

 

 

还有另外一种,看成两个平面相交的情况。

求解曲线上某点法线方式: 

 

 求曲线的切线方程看完了,看下通过高度图求法线吧。

已知高度图的u,v,假设高度h=f(u,v),那么我们就构建了一个曲线的参数方程u=u, h=f(u,v), v=v,我们就通过这条曲线的两条切线求法线。但是问题是,这里的高度h与u,v的映射关系其实是不知道的。像下面这张图,能知道那条波浪形的曲线方程吗,并且我们通过高度图采样拿到的高度数据是离散的,那么直接使用导数的定义来做就好,这个就不需要说明了,国内的谁不知道导数定义啊(文章中为了避免太陡,把除以delta去了)。这里再强调一下那个曲线方程,记住这个曲线方程是参数方程,不是一般的看成两个平面相交的那个。

参数方程为u=u, h = f(u,v), v=v,那么对u求偏导就是(1,f'u, 0)——切线Tu,对v求偏导就是(0,f'v, 1)——切线Tv。这里最后是Tv叉乘Tu,不知道为什么不是Tu叉乘Tv,用的是左手坐标系——》左手定则吗??(最后一张图AXB是向上的?)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值