wtorek, 12 października 2010

[WPF 3D] Transformacja wektora 3D [PL]

Na temat transformacji w WPF 3D pojawiło się wcześniej już trochę informacji (m.in. „czym są transformacje i do czego je można wykorzystać?”, czy „jak transformacje tworzyć i komponować?”), zabrakło jednak informacji, jak transformacje wykorzystać do obliczeń 3D.
Niniejszy wpis poza prezentacją różnych i niezależnych od konkretnego wykorzystania treści stanowi również opis pewnych zagadnień związanych z projektem Mesh Diagram 3D.Informacje dotyczące projektu oznaczone są etykietą MeshDiagram3D.
Przeanalizujmy prosty przykład: chcemy, by jakiś element sceny 3D „obracał się przodem” zawsze w kierunku kamery. W tym celu musimy sprawdzić, jak ustawiona jest kamera w scenie i w jakim kierunku patrzy. Aby to osiągnąć, musimy najpierw dostać się do obiektu kamery w scenie. W tym celu możemy wykorzystać omówione wcześniej drzewo wizualne. Następnie z obiektu kamery odczytujemy wektor kierunku widzenia oraz ... transformatę ustawioną dla danej kamery. Dopiero na podstawie tych dwóch informacji możemy wyliczyć rzeczywisty wektor kierunku patrzenia kamery. Aby to obliczyć, należy wykorzystać metodę TryTransform obiektu transformacji.
Dla przykładu funkcja transformująca wektor 3D może wyglądać następująco:
public static Vector3D Transform3DVector(Transform3D transform, Vector3D vector)
{
  Point3D input = new Point3D(vector.X, vector.Y, vector.Z);
  Point3D output;
  if (transform.TryTransform(input, out output))
  {
    return new Vector3D(output.X, output.Y, output.Z);
  }
  return vector;
}
Proste prawda?
Promuj

2 komentarze:

Posty powiązane / Related posts