你好,我的理解是
point = point + kn * n * h(uv)
这个代码中,h(uv)是一个标量,表示的表面沿法线位移的距离。
point = point + kn * n.cwiseProduct(payload.texture->getColor(u,v));
这里面,贴图采样的是一个Vector3f,当然如果贴图的rgb通道都是表示高度的灰度且一样的话,是没问题的等同于标量。但是作业框架里给的那张hmap.jpg,看上去像是个法线图,它三个分量不一样。
其实这里我对作业框架有点存疑的,我觉得hmap应该是一张灰度高度图才对,我试了一下把hmap当法线图转出来一张高度图(附件hmap_normal2height.png),然后光栅化出来是附件disp_n2h_question.
当然如果直接把hmap当成法线贴图,shader里也直接用法线图的方法,见附件disp_n_question,我觉得好像效果更好。
Attachments:
You must be
logged in to view attached files.