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

Ann*_*inn 30 c++ opengl 3d graphics

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

OpenGL问题

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

Dav*_*hop 21

我认为你所寻找的实际上是视差映射(或视差遮挡映射).

演示:
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的样本图像,凹凸贴图也是相当无用的,因为曲面在不同高度处的角度都相同,凹凸贴图依赖于曲面角度的变化.你必须像这样倾斜边缘.

位移贴图/曲面细分使用纹理生成更多多边形,而不仅仅是1个多边形.

有比较所有3的视频在这里

编辑:还有救济映射,类似于视差.见演示.还有一个比较视频(它有点低质量,但看起来它可以提供更好的深度).


Ern*_*ill 14

我认为你所追求的是凹凸贴图.该链接转到一个简单的教程.

  • 但是你应该考虑到凹凸贴图的效果只有在移动光线或表面相对于光线移动时才会引人注目.如果您希望碰撞块阻挡其他块,则可能不会选择凹凸贴图. (2认同)

gen*_*ult 13

您可能也在考虑位移映射.


Rus*_*ove 6

在其他人的答案中提到的技术:

  • 凹凸贴图是最容易实现的,但不会进行任何遮挡.
  • 视差映射可能是最复杂的,并且在所有情况下都不能很好地工作.
  • 置换贴图需要高端硬件和驱动程序,并创建其他几何体.
  • 实际上,对多边形建模始终是一种选择.

这实际上取决于您对观众的接近程度以及凸起的突出程度.如果你正在飞行死星壕沟,你需要模拟颠簸或使用位移映射.如果你只有几百米,那么凹凸贴图就足够了.