Digital Signal Processing 3D Graphics & Rendering Programming Download Natalia
Komentarze (0)  Wizyty (3 625)  Aktualnie osób (7)  Tutaj (1) 
User: Hasło:

 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 pliki

    Przykładowy program, pliki DAT, żródła oraz inne rzeczy udostępniam poniżej.

    Pliki do pobrania:

    NataliaGL.doc (74.5 kB) - dokumentacja (819 pobrań)
    ExampleTorus.dat (241 Bytes) - przykłdowy plik sceny (554 pobrań)
    ExampleCubes.dat (413 Bytes) - przykłdowy plik sceny (384 pobrań)
    NataliaGL.exe (343 kB) - Aplikacja do testowania (368 pobrań)
    NataliaGL.rar (7.56 kB) - komponent dla Delphi (314 pobrań)

    Visitors

    free counters

    Reklamy Google


    Komentarze (0)

    Zapraszam do pisania komentarzy w tym temacie.

    Napisz komentarz

    Pamiętaj, aby wypełnić wszystkie pola.

    Temat: Podpis: