我不确定如何描述我追求的东西,所以我画了一张图片来帮助:
我的问题是,在OpenGL中是否有可能在单个多边形上创建像素看起来凹凸的错觉,而不必诉诸于使用多个多边形?如果是的话,方法是什么?
答案 0 :(得分:21)
我认为您所寻找的实际上是Parallax mapping(或Parallax Occlusion mapping)。
演示:
http://www.youtube.com/watch?v=01owTezYC-w
http://www.youtube.com/watch?v=gcAsJdo7dME&NR=1
http://www.youtube.com/watch?v=njKdLvmBl88
Parralax贴图基本上可以通过使用高度贴图来改变正在使用的纹理UV坐标。
视差的主要缺点是任何看起来都在多边形“外面”的东西都会被裁剪掉(想想看3D电视上的图像),所以最好是在表面凹进而不是伸出的东西它(尽管你可以通过使多边形比可见纹理区域更大来减少这种情况)。它也相当复杂,需要与其他着色器技术结合才能产生良好的效果。
凹凸贴图通过使用纹理作为法线来工作,这使得灯光的阴影看起来是3D,但是它不会根据观察者的位置仅改变阴影来改变3D数据。对于OP的样本图像,凹凸贴图也是相当无用的,因为曲面在不同高度处的角度都相同,凹凸贴图依赖于曲面角度的变化。你必须像this那样倾斜边缘。
置换贴图/曲面细分使用纹理生成更多多边形,而不仅仅是1个多边形。
有一个视频比较所有3 here
编辑:还有Relief mapping,它与视差相似。见demo。还有一个comparison video(它的质量有点低,但看起来它可以提供更好的深度)。答案 1 :(得分:14)
我认为你所追求的是bump mapping.这个链接是一个简单的教程。
答案 2 :(得分:13)
您可能也在考虑displacement mapping。
答案 3 :(得分:6)
其他人的答案中提到的技巧:
这实际上取决于您对观众的接近程度以及凸起的突出程度。如果你正在飞行死星壕沟,你需要模拟颠簸或使用位移映射。如果你只有几百米,那么碰撞就足够了。
答案 4 :(得分:3)
如果您有DX11类硬件,则可以对多边形进行细分,然后应用置换贴图。见http://developer.nvidia.com/node/24。但是,让它运行并在其上开发一些东西会变得有点复杂。