[C# .NET] Zamiana position & rotate na "origin & normal"


(LonngerM) #1

Witam,

Piszę program w bibliotece ActiViz.Net i mam pewien problem bardziej matematyczny. Mam dwie płaszczyzny - widoczną dla użytkownika, którą da się ustawić poprzez dane: position i rotate, druga jest ustawiana poprzez origin oraz normal. Jak to zamienić macie pomysły?

Opis poszczególnych funkcji:

SetPosition(double _arg1, double _arg2, double _arg3)- "Set the position of the Prop3D in word coordinates"

SetOrigin(double _arg1, double _arg2, double _arg3) - "Set point through which plane passes."

SetNormal(double _arg1, double _arg2, double _arg3) - "Set plane normal. Plane is defined by point and normal."

Jak to można przekształcić? albo czego będę potrzebował? Płaszczyzna zawsze tworzy się tak samo tzn. szerokość i wysokość zawsze rozciągnięte są na osiach X,Y.


(Ryan) #2

Nie tłumaczysz co chcesz osiągnąć. Z dokumentacji wynika, że Plane jest nieskończoną płaszczyzną, więc nie bardzo wiem co próbujesz zrobić. Chcesz uzyskać Plane równoległy do obiektu (Prop3D) zawierającego quada?


(LonngerM) #3

Chcę uzyskać efekt taki, by plane oraz aktorPlane były nałożone na siebie...


(Ryan) #4

Wciąż problem nie jest przedstawiony w pełni. Prop3D to zgodnie z dokumentacją nie płaszczyzna a obiekt. Dowolny, taki jaki wczytasz. Jeśli masz w ramach tego obiektu quada, to ustawienie go równolegle do czegokolwiek wymaga informacji na temat tego jak jest on skierowany. Jeśli domyślnie leży np. na płaszczyźnie XY i nie używasz obrotów, to prawdopodobnie chcesz go przemieścić tak, żeby jego środek był w punkcie (0,0,jakieś_z), gdzie jakieś_z zależy do wielu rzeczy (rozmiaru, położenia kamery, ustawień clipping plane, tego w którą stronę skierowane jest z układu współrzędnych) a przemieszczenie zależy od tego gdzie jest lokalny środek obiektu. Dalej, jeśli masz quada na płaszczyźnie XY, to ustawienie Plane'a równolegle wymaga ustawienia na nim normalnej prostopadłej do płaszczyzny XY (a więc (0,0,1) lub (0,0,-1)). SetOrigin z kolei nie ma większego znaczenia, chyba że ma Plane i Prop3D mają się pokrywać (wtedy chcesz podobnie do obiektu ustawić (0,0,jakieś_z)). Jeśli z jakiegoś powodu Plane też jest wizualizowany, to jakieś_z Plane'a i Prop3D muszą się różnić o jakąś bardzo małą wartość, w przeciwnym wypadku będzie miał z-fighting i obraz będzie migotał np. zależnie od kąta patrzenia.