如何绘制数千个不同透明度的精灵?

时间:2012-03-18 10:18:18

标签: delphi delphi-xe2 firemonkey

您好我正在使用Firemonkey,因为它具有跨平台功能。我想渲染一个粒子系统。现在我正在使用TMesh,它可以很好地快速显示粒子。每个粒子通过两个纹理三角形在网格中表示。使用不同的纹理坐标,我可以使用相同的网格显示许多不同的粒子类型。问题是,每个粒子都有自己的透明度/不透明度。根据我目前的方法,我无法为每个三角形(甚至顶点)单独设置透明度。我能做什么?

我意识到TMesh.Data.VertexBuffer中还有一些其他属性,比如Diffuse或其他纹理集(TexCoord1-3),但这些属性在TMesh中不被使用(甚至没有初始化)。通过继承TMesh简单地改变这种行为似乎并不容易。似乎必须从较低级别的控件继承以初始化具有更多属性的VertextBuffer。在我尝试之前,我想问一下是否可以控制三角形的透明度。例如。我可以设置透明色(漫反射)还是使用透明纹理(TextCoor1)?或者有更好的方法在Firemonkey中绘制粒子。

1 个答案:

答案 0 :(得分:0)

我承认我对这个特定的框架知之甚少,但你不应该通过3D模型中的顶点来改变透明度。这些点通常是x,y,z坐标。现在,如果使用照明系统,顶点将影响精灵的照明方式。您还可以使用顶点信息应用不同的透明效果

现在,可能有十几种不同的方法可以做到这一点。通常,您的纹理具有不同程度的alpha值,可以在运行时设置。图形API通常具有一些过滤功能,可以快速将值应用于精灵/纹理,如果可用,一个好的将使用您的图形芯片。

如果你可以使用效果,它通常会更好,因为核方法是制作一堆不同的精灵副本然后单独应用效果。如果您使用Gouraud着色,那么由于Gouraud使用代码填充纹理信息,因此它变得更容易。

现在,您使用的是轻微颗粒吗?一些图形API实际上具有产生光粒子的代码。

编辑:我只记得Vertex Shaders,可能。