如何使用OpenGL将2D艺术图形分割成三角形

5
我有2D人物艺术作品,将映射到Box2d骨架上。例如,角色的手臂可能是由两个物理矩形连接而成,并在肘部连接一个关节。每个矩形都将有自己对应的艺术精灵。下臂的艺术作品不完全是矩形的。它可能是一个矩形png源,但在手臂没有被绘制的地方会有很多负空间。
我的问题是最好的方法是如何将2D艺术作品分解为三角形?我应该将所有平面精灵视为由2个三角形组成的简单矩形,留下许多透明空间吗?还是最好将形状分成多个三角形,并尝试匹配实际的形状(可能使用三角形扇形)?每种方法可能具有哪些优点/缺点?随着角色发生各种事情,我将更新纹理。
这是我所说的内容的插图:

img

红色方块是物理形状,蓝色线条是可能的三角形配置。

1个回答

1

通常情况下,减少几何图形可以提高性能(从左数第三个)。

“精确”的三角剖分(从左数第四个)对于高保真度的碰撞检测非常有用(激光反射在闪亮的小行星上?)。

注意频繁的纹理更新。使用glTexSubImage2d()

如果您的GL实现支持,可以使用异步上传使用PBOs


谢谢。我并不考虑实际艺术形状用于碰撞检测。这可能都是通过物理模型完成的。我想知道的是,所有额外渲染的透明空间是否会消除2个三角形解决方案的简单性的好处...特别是当纹理变得不那么矩形,而更多的负空间被使用时。像流星纹理这样的圆形东西,在矩形纹理中会有很多负空间。将几个alpha = 0区域重叠在一起肯定会产生一些负面影响,对吧? - Jim B
2
如果您不需要实际的Alpha混合(由于添加了目标像素读取,这需要更多的内存带宽),则可以使用Alpha测试来解决问题,该测试仅在Alpha值低于某个阈值时丢弃传入的像素。实际上,我认为您可以结合混合和Alpha测试,以获得两全其美的效果:通过低阈值值,纯零像素可以早期剔除(在混合之前),同时仍然可以让您在对象边缘进行漂亮的Alpha淡入淡出。 - genpfault
太好了...这非常有道理,非常有帮助。 - Jim B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接