Natalia GL Component for 3D Graphics and Rendering Reklamy Google
Szczegółowe przedstawienie komponentu do grafiki 3D oraz renderingu wraz z przykładami i komenatrzami.
NataliaGL - Delphi Component Program „NataliaGL - 3D Modelling” napisany jest w oparciu o modul NataliaGL dla Delphi dzialajacy podobnie jak OpenGL.
Mozna powiedziec ze jest to wlasna namiastka OpenGL - oczywiscie o wiele prostsza. Napisalam go zaczynajac od podstaw
matematyki:
deklaracja wirtualneo ukladu kartezjanskiego
funkcje dokonujace obrotow dow. punktu wokół kazdej z osi wspolrzednych
procedury translacji dowolnego punktu o dowolny wektor
funkcje pozwalajace na przejscie z innych ukladow na uklad kartezjanski. Np. z ukladow: cylindrycznego, sferycznego,
toroidalnego (potrzebne np. w celu tworzenia kuli, torusa czy walca)
procedury rzutujace punkt 3D na plaszczyzne 2D z uwzglednieniem efektu perspektywy, punktu obserwatora itp.
procedury obslugujace zdarzenia pochadzace od klawiatury i myszki
W oparciu o powyzsze funkcje - idac dalej dochodza nastepujace, bardziej zaawansowane:
algorytm usuwania niewidocznych elementow
funkcje rysowania i renderowania
procedury pozwalajace na dynamiczne dodawanie nowych figur i bryl do sceny z okresleniem dokladnosci ich rysowania
Działanie programu Zasada dzialania jest prosta: W pamieci tworzony jest wirtualny uklad wspolrzednych XYZ i rezerwowana jest pamiec
dla okreslonej liczby kwadracikow. Kwadracik jest najprostszym elementem widocznym od strony uzytkownika.
Każdy kwadracik sklada się z 4 punktow XYZ – w ten sposób tworzone sa elementarne plaszczyzny.
Powyzszy Screen pokazuje np. ze element kula sklada się z wielu malych 4-bocznych wycinkow.- tworzac przyblizony
obraz kuli. Prostopadloscian natomiast sklada się w moim programie zawsze z 6 kwadracikow.
Obsluga klawiatury i myszy Po zaladowaniu przykladowej sceny lub prymitywu dostepne sa rozne opcje obslugi myszy oraqz klawiarury:
Reczne obracanie figur mysza w roznych kierunkach metod± „złap i przeciagnij”
Obracanie w jednej z osi (X, Y lub Z) za pomoca myszy oraz klawiatury. Przytrzymanie klawiszy Shift, Ctrl lub
Alt oraz przeciaganie mysza powoduje obrot figur w jednej z osi.Przytrzymujac np. klawisz Alt oraz
przeciagajac mysz powoduje to obrot figury wokół osi Z. Analogicznie mamy dla klawiszy Shift i Ctrl dla osi X oraz Y.
Podwojne klikniecie rozpoczyna lub zatrzymuje animacje.
Prawym klawisz myszy umozliwia wlaczenie lub wylaczenie opcji HIDE (ukrywanie elementow niewidocznych).
Za pomoca tej opcji można obejrzec obiekt tak jakby był on przezroczysty. Funkcja przydaje się przy tworzeniu
bardziej skomplikowanych scen 3D.
Dostepne elementy NataliaGL zawiera baze prymiwywow (podstawowych elemenotw z ktorych tworzone sa sceny).
Aktualnie w bazie znajduja sie:
Cube (Prostopadłoscian)
Ball (Kula)
Pipe (Rura)
Circle (Koło)
Cylinder (Walec)
Torus (Torus)
Cone (Stożek)
Dwa sposoby programowania scen Pisanie wlasnych scen 3D możliwe jest na dwa sposoby:
Bezposrednio w srodowisku Delphi – majac dostep do komponentu NataliaGL piszemy zwykly program w Pascalu
wykorzystujac wszystkie funkcje biblioteki NataliaGL
Poprzez ladowanie do programu zewnetrznych plikow tekstowych *.dat zawierajaych opisy scen
Pisanie scen w pliku *.dat nie rozni się znaczaco od tego w którym bezposrednio piszemy w Delphi. Oczywiste jest ze scena pisana w Delphi daje nieco wieksze mozliwosci od zwyklego pliku tekstowego.
Programowanie sceny w Delphi Wlasne sceny pisze pisze się kodem linia po linii wykorzystujac procedury modulu NataliaGL. Ponizej przedstawiam
wszystkie dostepne funkcje dla Delphi:
Rysuj;
Render;
SetFigure(KtoraFigura : Integer);
New(IlePamieci : LongInt);
Rotate(Alfa, Beta, Gamma, X, Y, Z : Double; Delta : Integer);
Transpose(dX, dY, dZ : Double; Delta : Integer);
Scale(Skala : Double; Delta : Integer);
Stretch(StretchX, StretchY, StretchZ : Double; Delta : Integer);
SetColor(R, G, B : Byte);
SetBackColor(R, G, B : Byte);
AddCube(dX, dY, dZ, A, B, C : Double);
AddBall(dX, dY, dZ, R : Double; Delta : Integer);
AddCircle(dX, dY, dZ, R : Double; Delta : Integer);
AddPipe(dX, dY, dZ, R, Z : Double; Delta : Integer);
AddCylinder(dX, dY, dZ, R, Z : Double; Delta : Integer);
AddTorus(dX, dY, dZ, R1, R2 : Double; Delta : Integer);
AddCone(dX, dY, dZ, R, Z : Double; Delta : Integer);
AddText(Txt : String);
WczytajPlik(FileName : String);
Jak widac znajduja się tutaj funkcje rysowania, renderowania, przydzielania pamieci; dokonujace obrotow,
translacji oraz funkcje pozwalajace na dodawanie nowych figur do sceny a także procedura czytajaca scene z pliku *.dat.
Przykład tworzenia prostej sceny w Delphi Aby pokazac najprostsza scenke można po prostu dodac jedna kule, usytuowana w srodku ukladu wspolrzednych (0,0,0)
o promieniu R=20. Kolor kuli okreslimy jako zielony a kolor tla ustawimy jako czarny. Kula będzie się skladac z
81 elementarnych kwadracikow. Pokazemy również uklad wspolrzednych Coordinate.
Procedura rysowania kuli wymaga nastepujacych parametrow:
AddBall(X,Y,Z,Promien,IloscKwadracikow)
Oto program realizujacy ta scene:
NataliaGL1.New(360);
NataliaGL1.SetBackColor(0,0,0);
NataliaGL1.SetColor(0,255,0);
NataliaGL1.AddBall(0,0,0,20,360);
NataliaGL1.Coordinate:=True;
NataliaGL1.Render;
Oto wygenerowany obraz:

Programowanie sceny w pliku .DAT Przy programowaniu scen w plikach tekstowych należy pamietac o kilku sprawach:
Plik zawsze musi się rozpoczynac slowem NataliaGL
Duze i male litery nie maja znaczenia
Pomiedzy komenda a jej parametrami musi wystapic ptzynajmniej jedna spacja. Nie mog± to być same taby.
Dopuszczalne sa natomiast spacje i taby
Wazne jest aby liczba parametrow zgadzala się z wymagana dla danej procedury
Nie jest istotne pisanie kodu linia pod linijka. Plik tekstowy pozwala na te male odejscia od scislosci.
Ponizej zestawione sa wszystkie komendy jakie rozroznia program dla plikow tekstowych:
Cube [ dX dY dZ A B C ]
Ball [ dX dY dZ R Delta ]
Circle [ dX dY dZ R Delta ]
Pipe [ dX dY dZ R Z Delta ]
Cylinder [ dX dY dZ R Z Delta ]
Torus [ dX dY dZ R1 R2 Delta ]
Cone [ dX dY dZ R Z Delta ]
Rotate [ Alfa Beta Gamma X Y Z Delta ]
Transpose [ dX dY dZ Double Delta ]
Scale [ Skala Delta ]
Stretch [ StretchX StretchY StretchZ Delta ]
SetColor [ R G B ]
SetBackColor[ R G B ]
Contrast [ Value (0-1) ]
Alfa [ Angle ]
Beta [ Angle ]
Gamma [ Angle ]
ShowCoord
Rysuj
Render
Procedury chyba nie wymagaja szczegolowego komentarza. Przykladowo procedura dodajaca torus do sceny
wymaga kolejno parametrow: wspolrzednych X, Y, Z srodka torusa, promieni R1 i R2 oraz wartosci Delta.
Delta to ilosc kwadracikow jaka deklarujemy dla tej bryly.
Waznym parametrem dla procedur Rotate, Transpose, Scale oraz Stretch jest Delta. Analizujac komentarze
ponizszego programu:
NataliaGL
Obowiazkowe slowo kluczowe rozpoczynajace kazdy plik DAT
SetColor 255 140 100
Ustawienie koloru pedzla (dla bryly)
Torus 0 0 0 18 6 360
Narysowanie Torusa w poczatku ukladu wsp. o promianiech R1=18 oraz R2=6 skladajacego się z 360 kwadracikow.
Stretch 0,8 1,6 2,8 360
Rozciagniecie tosusa w osiach XYZ odpowiednio o wartosci 0,8 1,6 oraz 2,8 . Ostatni parametr okresla ile
kwadracikow wstecz będzie poddawana tej transformacji poczawszy od biezacego. Je¶li podamy jako Delta=180
to tylko polowa torusa zostanie rozciagnieta. Ta procedura dziala od biezacej pozycji wstecz. Torus zostal
dodany wczesniej a potm wywolana procedura Stretch rozciagajaca liczbe kwadratow rowna liczbie kwadratow
zadeklarowanych dla Torusa.
Scale 0,8 360
Przeskalowanie zdeformowanego torusa ze wsp. Skali 0,8 (dla 360 kwadracikow, czyli calego torusa)
Rotate 90 90 45 0 0 0 360
Obrocenie naszej bryly o katy: 90 stopni wokół osi X, 90 stopni wokół osi Y oraz 45 wokół osi Z. Os obrotu
usytuowana jest w punkcie (0,0,0). Również parametr Delta=360.
Transpose 0 0 3 360
Przesuniecie naszej bryly o 0 jednostek w osi X, 0 jednostek w osi Y oraz 0 3 jednostki w osi Z. Cala
operacja dotyczy 360 kwadracikow.
Render
Pokaz bryle w trybie render. Można tutaj uzyc zamiast tej funkcji procedurę Rysuj.
Myslę, że udalo mi się w prosty sposób przedstawic wlasnosc parametru DELTA i zarazem sposób programowania scenek w pliku.
Dla przykladowego pliku pokazanego powyzej otrzymac można obraz przetransformowanego torusa:

Natalia GL - pobierz plikiPrzykładowy program, pliki DAT, żródła oraz inne rzeczy udostępniam poniżej. Pliki do pobrania:
|