OpenGL,如何创建“颠簸的多边形”?

时间:2011-09-20 17:57:16

标签: c++ opengl graphics 3d

我不确定如何描述我追求的东西,所以我画了一张图片来帮助:

OpenGL question

我的问题是,在OpenGL中是否有可能在单个多边形上创建像素看起来凹凸的错觉,而不必诉诸于使用多个多边形?如果是的话,方法是什么?

5 个答案:

答案 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。但是,让它运行并在其上开发一些东西会变得有点复杂。