delphi - 如何绘制数千个不同透明度的 Sprite ?

标签 delphi delphi-xe2 firemonkey

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

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

最佳答案

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

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

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

现在,你使用光粒子吗?一些图形 API 实际上具有生成光粒子的代码。

编辑:我刚刚想起了顶点着色器,这可以。

关于delphi - 如何绘制数千个不同透明度的 Sprite ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9757524/

相关文章:

delphi - 为什么 Delphi "for"会这样?

Delphi XE2/Intraweb12 - 在运行时更改端口/全局变量

delphi - 使用实时绑定(bind)将多个字段值分配给 FMX MetropolisUI TListBox Item.Text

Delphi从TObject继承Create

delphi - 如何通知 Free Pascal 编译器为编译的应用程序设置区域设置 ID

delphi - 什么应该是一个简单的 TCP 客户端服务器,,STUCK

macos - 在 OSX 上使用 FireMonkey 播放音频文件

delphi - 自动插入断点?

c++ - 设置 Firemonkey 控件的 OnMouseMove 方法

德尔福火猴网格: Invisible Columns When Navigating