Grafika 3D - rzutowanie przestrzenne.


Przykładowy program używa jedynie klas Graphics2D i Line2D do wyświetlania grafiki. Widoczna na obrazku grafika rysowana jest w instancji klasy PanelRysunku dziedziczącej po klasie JPanel. Zatem problem polega na wizualizacji obiektu 3D na rysunek 2D.
Poniżej przedstawiony jest kod odpowiedzialny za obliczenie współrzędnych z układu 3D na układ 2D. 


 double x2D = (x3D * wielkosc) / (z3D - 600) + srodekX2D;
 double y2D = (y3D * wielkosc) / (z3D - 600) + srodekY2D;


w celu zdefiniowania dowolnej bryły w przestrzeni 3D najlepiej podawać punkty tak aby punkt 0 (X=0, Y=0, Z=0) znajdował się w jej środku. Zapewni to obrót bryły wokół jej osi.
Przykład dla figury sześcian - punkty:
P1: X=-20 Y=-20 Z=-20
P2: X=20 Y=-20 Z=-20
P3: X=20 Y=20 Z=-20
P4: X=-20 Y=20 Z=-20
P5: X=-20 Y=-20 Z=20
P6: X=20 Y=-20 Z=20
P7: X=20 Y=20 Z=20
P8: X=-20 Y=20 Z=20

Środek bryły jak i punkt obserwatora znajdują się w punkcie zerowym i dlatego przeliczając punkty na układ 2D należy odjąć od współrzędnej "Z" jakąś wartość, nie mniejszą niż odległość krawędzi bryły do jej środka. Zmienne: "srodekX2D" i "srodekY2D" przechowują wartości, które są współrzędnymi środka panelu, odpowiadają za przesunięcie rysunku na środek panelu. Zmienna "wielkosc" odpowiedzialna jest za skalowanie rysunku 2D, im większa jej wartość tym większy jest rysunek. Wartość zmiennej "wielkosc" może być zależna od wielkości okna programu - zapewni to zmianę rozmiaru rysunku w zależności od rozmiaru okna.



2 komentarze:

Skup maszyn pisze...

Masz dobre zdanie na różne tematy.

Biuro rachunkowe Szczecin pisze...

Dobrze powiedziane!