C++ OpenGL,如何创建一个;凹凸多边形;?

C++ OpenGL,如何创建一个;凹凸多边形;?,c++,opengl,graphics,3d,C++,Opengl,Graphics,3d,我不确定如何描述我所追求的,因此我画了一幅图来帮助: 我的问题是,在OpenGL中,是否有可能在单个多边形上创建那些看起来像像素的凹凸,而不必使用许多多边形?如果是,方法是什么?我想你想要的是指向一个简单教程的链接。你可能也在想。如果你有DX11类硬件,那么你可以细分多边形,然后应用置换贴图。看见但是,让它运行并在上面开发一些东西会变得有点复杂。我想你真正想要的是(或视差遮挡贴图) 演示: Parralax贴图基本上是通过使用高度贴图来更改所使用的纹理UV坐标来工作的 视差的主要缺点是,

我不确定如何描述我所追求的,因此我画了一幅图来帮助:


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

我想你想要的是指向一个简单教程的链接。

你可能也在想。

如果你有DX11类硬件,那么你可以细分多边形,然后应用置换贴图。看见但是,让它运行并在上面开发一些东西会变得有点复杂。

我想你真正想要的是(或视差遮挡贴图)

演示:



Parralax贴图基本上是通过使用高度贴图来更改所使用的纹理UV坐标来工作的

视差的主要缺点是,任何看起来在多边形“外部”的东西都会被剪裁(想象一下在3D电视上观看图像),因此最好是在表面上缩进的东西,而不是突出表面(尽管可以通过使多边形大于可见纹理区域来减少)。它也相当复杂,需要与其他着色器技术结合才能获得良好的效果

凹凸贴图通过使用法线的纹理来工作,这使灯光的着色看起来是3D的,但是它不会根据查看器的位置更改3D数据,只会更改着色。凹凸贴图对于OP的示例图像也非常无用,因为曲面在不同高度处的角度都相同,凹凸贴图依赖于曲面角度的变化。你必须像这样倾斜边缘

置换贴图/细分使用纹理生成更多多边形,而不仅仅是一个多边形

有一段视频比较了所有3个


编辑:还有一个,类似于视差。看见还有一种方法(质量有点低,但浮雕看起来深度更好)。

在其他人的回答中提到的技巧:

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

这实际上取决于你期望观众离你有多近,以及凹凸的突出程度。如果你在死星战壕下飞行,你需要对撞击进行建模或使用置换贴图。如果你在几百米高处,凹凸贴图就足够了。

我想这就是凹凸贴图?我可能错了,你画的吗?很好@夜贼-Pfft!这不完全是一件艺术品,但谢谢~看起来像印第安纳琼斯式的谜语或陷阱@德斯蒙德-我希望每个人都把冰箱放在身边谢谢你。。。我很惊讶它实际上被称为“凹凸”贴图,啊哈。我以为这是用像素着色器完成的(我还没有从OpenGL 1.2开始)。我会被诅咒的!你也可以在着色器中做它。但是你应该考虑到凸点映射的影响只有在移动的光或与光相关的表面移动时才是明显的。如果您想让凹凸块阻挡其他块,凹凸贴图可能不是一个选项。@DesmondHume-实际上,让它遮挡几何体是我希望的效果。我猜凹凸贴图不是很有趣吗!尽管如此,Dx11并不是我可以依赖的东西,因为我的很多用户都会缺少它。这种方法似乎也极大地增加了所需的向量和多边形的数量。@Clarivoire置换贴图通常通过将视差贴图与OpenGL 4.0或Dx11细分相结合来实现。这允许您以性能友好的方式动态添加细节。啊,谢谢!很高兴看到这些技术被总结并相互比较