Hi;
I'm new to WPF, and I'm trying to understand the underlying architecture, so please correct me if I'm wrong:
As far as I know, there are three possibilities to dynamically transform a GeometryModel3D during runtime:
a) Set the model's Transform-property to a Transform3DGroup once, to which you add new / duplicate Transformations.
b) Cast the model's Transform-property as a MatrixTransform3D and
multiply its matrix with the Value-property of a Transformation (which i
guess is pretty much case (a) )
c) Leave the Transform-property as a identity matrix and instead
transform the model's Geometry.Positions property directly (provided you
use a MeshGeometry3D) like such:
int i; MeshGeometry3D mesh;
mesh = (_SomeModel.Geometry as MeshGeometry3D); for (i = 0; i < mesh.Positions.Count; i++) { mesh.Positions[i] = _SomeTransform.Transform( mesh.Positions[i]);
|
On first glance, option (c) seems like the best (though not most
intuitive) choice, especially when you need the actual positions of the
model(s); for example to calculate hit-detection.
Is there another way to easily access a model's current, transformed
position(s)? And why does WPF transform a model's own space instead of
just the actual coordinates?
Kind regards, Frank