我有一个用 FMX 制作的DelphiXE4应用程序。
我想要平面纹理对象(无厚度),我可以在屏幕上放大和移动整个场景。
(提示:想想墙上的照片)
我开始使用TForm3D来实现分配了位图的TImage3D
组件。它运作良好!
但是我已经使用TPlane
组件进行了测试,我可以做同样的事情并获得相同的结果。
问题是:这两个组件之间的区别TImage3D
& TPlane
?
这将帮助我为我的当前和进一步的需求选择合适的一个
FMX文档和wiki在这里没有真正的帮助!
答案 0 :(得分:4)
考虑这些事情的最好方法是查看继承路径。
TImage3D
派生自TAbstractLayer
,因此通常可以像3D图层一样使用。 TAbstractLayer
来自TControl3D
,但也实现了IAlignableObject
和IAlignRoot
。
TPlane
派生自TCustomMesh
,TShape3D
来自TControl3D
。
我想简而言之TPlane
只是一个特定的3D形状 - 我没有完全通过FMX源代码,但我猜它必须比TImage3D
更轻量级。 TPlane
只是一个可以在3D空间中操作的平面。
然而,TImage3D
通过IAlignableObject
等方式可以访问许多内置方法和功能,使其能够作为3D UI对象进行交互 - 使自身对齐其他IAlignableObjects
,用于定义边距,边界和锚点等,以定义它如何相对于其他IAlignableObjects
放置或填充空间。
使用哪种取决于你在做什么。如果您希望图像成为3D场景的一部分,那么TPlane
可能最有意义。如果您希望它成为3D UI的一部分;也就是说,图像是具有其他控件,用户界面元素等的3D空间的一部分,那么TImage3D
可能是最有意义的。
TImage3D
可能无法同时访问TCustomMesh
上运行的某些方法 - TImage可能不会公开其网格(即:不能通过以下方式进行修改: 3D转换等,其中输入必须是TCustomMesh
),而TPlane
是3D原语而不是锁定的UI控件,在这方面会更具延展性。