Parallax Mapping with Offset Limiting: A PerPixel Approximation of Uneven Surfaces
http://www.infiscape.com/doc/parallax_mapping.pdf
这里还有9大的讲解.言简意赅. :)
offset mapping只是通过改变纹理坐标的方法来达到欺骗眼睛的目的,并不是真正的移动了顶点位置:
比如原来像素在几何体上的位置是A,相应的有一个纹理值Ta,蓝色虚线表示像素点到视点的eye vector,现在我把纹理坐标改一下:
texcoord new = texcoord old + (height * 2 - 1) * eye vector * scale
这样虽然像素的位置并没有变,但是纹理坐标指示的点却到了B,读取的纹理值自然就是Tb而不是原来的Ta了。
这样给人的感觉就是原来远离眼睛的东西变近了,或者原来离眼睛很近的东西边远了(具体是哪种情况取决于height * 2 - 1的符号),凹凸感由此而生。
你可以参考:
http://www.opengl.org/discussion_boards/ubb/Forum3/HTML/011292.html
http://www.beyond3d.com/forum/viewtopic.php?t=9808&postdays=0&postorder=asc&start=0&sid=af3c2a1577200f85ab8b3ff26752c8b7
http://www.beyond3d.com/forum/viewtopic.php?t=9836&start=0