【问题标题】:How to draw thousands of Sprites with different transparency?如何绘制数千个不同透明度的精灵?
【发布时间】:2012-03-18 10:18:17
【问题描述】:

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

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

【问题讨论】:

  • "我可以设置一个透明的颜色...或者使用透明的纹理"...你为什么不试试呢?然后回来告诉我们。

标签: delphi delphi-xe2 firemonkey


【解决方案1】:

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

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

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

现在,您使用的是光粒子吗?一些图形 API 实际上有制作光粒子的代码。

编辑:我只记得顶点着色器,它可以。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 2012-09-09
    • 2013-11-14
    • 1970-01-01
    相关资源
    最近更新 更多