我想要把一些亮点(选择框真正)在一个许多TGLPlane是其中有许多不同的纹理分配给他们。我将如何适用的第二个花纹到那架飞机使用GLScene?

一些背景。各种不同的纹理应用的飞机都存储在一个MaterialLibrary和分配给各自的飞机材料。MaterialLibrary和材料。LibMaterialName.这是正确有效的再利用的质地,因为他们被装载只有一次无论如何许多次使用它们。

什么你不能看似做的就是使用任何性质的TGLPlane因为它们忽略一旦应用MaterialLibrary纹理。

这方法我可以找到这样做似乎需要我改变LibMaterial这当然适用于所有其他飞机而分享特定的质地,因此这是一个没有去。

另一种方法,我发现在 谷歌的代码(下棋) 解决了这个问题通过创建一个二面都有它自己的'亮点'部分透明的纹理的应用,然后放置略有上述原来的目(一个立方体,因为它恰好是)。这似乎是一个黑客来解决它,我希望避免,如果可能的。

如果它不是一个建立在能力的GLScene然后是有一个方法拦截的呈现,当它被要,特别是飞机然后使用的一些照片原语适用的贴花纹之后MaterialLibrary的质地是适用?

有帮助吗?

解决方案

这里是一个方法,而不应用第二纹但尽管如此,作出可见标记。

当装载的纹理、创建一个二TGLLibMaterial没有纹理的,但与任何'亮点'的修改你想让你的'选定'质,并呼吁它同样,除了与选定'所附的名称。

fMatLib.AddTextureMaterial('empty','empty.bmp', False);

with TGLLibMaterial.Create(fMatLib.Materials) do begin
  Material.MaterialLibrary := fMatLib;
  Texture2Name := 'empty';
  Name := 'empty-selected';
  Material.FrontProperties.Emission.Color := clrRed;
  Material.Texture.ImageBrightness := 1.5;
end;

这并不消耗纹记忆,因为你没重装的纹理。

然后在你的代码识别对象你希望强调,做这样的事情。

fPickedMaterial := fPickedObject.Material.LibMaterialName;
fPickedObject.Material.LibMaterialName :=
  fPickedObject.Material.LibMaterialName + '-selected';

fPickedMaterial节省的原料所以我可以在以后恢复它。

不完全是我想要的,但它的工作。叫它的一个工作周。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top