t sprawko lab3

Sprawozdanie z ćwiczenia labolatoryjnego

Grafika Komputerowa

Labolatorium nr 3

Prowadzący: dr inż. W. Sulej

Autor: Teodor Kulej
Grupa: I8Y1S1

Zadanie polegało na napisaniu programu rysującego zadany przez prowadzącego obiekt w przestrzeni 3D za pomocą biblioteki OpenGl i prymitywów dostarczonych przez nią. Zadana bryła miała posiadać możliwość ruchu, zgodną ze szczegółowymi wytycznymi.

Bryłą, którą modelowałem był bojowy wóz piechoty. Miał posiadać możliwość obrotu wieżyczki i zmiany kątu nachylenia lufy.

Wykorzystywane funkcje:

Polecenia operujące na macierzy przekształceń:

glPushMatrix() – Ta funkcja odkłada na stos aktualną macierz przekształceń geometrycznych
glPopMatrix() – zdejmuje ze stosu odłożoną wcześniej macierz przekształceń.
glScalef(x, y, z) – modyfikuje macierz przekształceń tak, aby tworzona bryła była przeskalowana o x, y, z wzdłóż osi OX, OY, OZ
glTranslatef(x, y, z) – modyfikuje macierz tak, aby tworzona bryła znajdowała się w punkcie przesuniętym o x, y, z względem poprzedniego punktu odniesienia
glRotate(a, x, y, z) – obraca układ odniesienia o kąt a na współrzędnych tych osiach, których parametry x, y, z nie są zerowe. Obrót następuje przeciwnie do ruchu wskazówek zegara

Polecenia rysujące prymitywy

GluCylinder(kwadryka, promienPodstawy1, promienPodstawy2, wysokosc, poludniki, rownolezniki)
gluDisk(kwadryka, promien1, promien2, poludniki, rownolezniki)
gluWireCube(dlugoscBoku)
Te funkcje rysują odpowiednio:
Cylinder ścięty o zadanym promieniu podstawy górnej i dolnej, wysokości i odpowiedniej liczbie podziałów pionowych i poziomych
Dysk ze środkiem w punkcie odniesienia, zadanym promieniem zewnętrznym i wewnętrznym oraz odpowiedniej liczbie podziałów
Sześcian o zadanej długości boku

Kod rysujący bojowey wóz piechoty:

//podwozie

glPushMatrix();

glTranslatef(0.0,1.2,20.0);

glScalef(10,1.4,2);

glutWireCube(1);

glPopMatrix();

//nadwozie

glPushMatrix();

glTranslatef(0.0,2.3,20.0);

glScalef(10,0.8,4);

glutWireCube(1);

glPopMatrix();

//koła

glPushMatrix();

glRotatef(0, 1, 0, 0);

glTranslatef(-3,0.5,21);

gluCylinder(quadr, 1.0, 1.0, 1.0, 10, 4);

glTranslatef(0.0, 0.0, 1);

gluDisk(wieza, 0.0, 1.0, 2, 2);

glTranslatef(0.0, 0.0,-1);

gluDisk(quadr, 0.0, 1.0, 2, 2);

glPopMatrix();

glPushMatrix();

glRotatef(0, 1, 0, 0);

glTranslatef(3,0.5,21);

gluCylinder(quadr, 1.0, 1.0, 1.0, 10, 4);

glTranslatef(0.0, 0.0, 1);

gluDisk(wieza, 0.0, 1.0, 2, 2);

glTranslatef(0.0, 0.0,-1);

gluDisk(wieza, 0.0, 1.0, 2, 2);

glPopMatrix();

glPushMatrix();

glRotatef(0, 1, 0, 0);

glTranslatef(-3,0.5,18);

gluCylinder(quadr, 1.0, 1.0, 1.0, 10, 4);

glTranslatef(0.0, 0.0, 1);

gluDisk(wieza, 0.0, 1.0, 2, 2);

glTranslatef(0.0, 0.0,-1);

gluDisk(wieza, 0.0, 1.0, 2, 2);

glPopMatrix();

glPushMatrix();

glRotatef(0, 1, 0, 0);

glTranslatef(3,0.5,18);

gluCylinder(quadr, 1.0, 1.0, 1.0, 10, 4);

glTranslatef(0.0, 0.0, 1);

gluDisk(wieza, 0.0, 1.0, 2, 2);

glTranslatef(0.0, 0.0,-1);

gluDisk(wieza, 0.0, 1.0, 2, 2);

glPopMatrix();

//wieza

glPushMatrix();

glRotatef(-90, 1, 0, 0);

glTranslatef(0,-20,2.7);

gluCylinder(quadr, 2.0, 1.0, 1.1, 10, 4);

glTranslatef(0.0, 0.0, 1.1);

gluDisk(wieza, 0.0, 1.0, 10, 4);

glPopMatrix();

//lufa

glPushMatrix();

glRotatef(90,0,1,0);

glTranslatef(-20,3.4,0);

gluCylinder(quadr, 0.15, 0.15, 4.5, 10, 4);

glPopMatrix();

Powyższy kod nie jest kodem napisanym w trakcie ćwiczeń labolatoryjnych, a jedynie otworzonym jego odpowiednikiem, ze względu na śmierć używanego przeze mnie nośnika danych I niemożność odzyskania oryginalnego kodu.

Ze względu na ograniczony czas trwania ćwiczeń i problemy z uzyskaniem dynamicznych przekształceń, nie udało mi się zrealizować całego zadania.

Wnioski:

Rysowanie brył przebiega w sposób bardzo podobny. Następuje odłożenie na stos aktualnego stanu macierzy przekształceń, ustawienie układu odniesienia w odpowiedni stan, narysowanie bryły i przywrócenie pierwotnego stanu macierzy przekształceń. Ten sposób jest wydajny obliczeniowo i wygodny dla programisty, gdyż nie wymaga przeliczania położenia kolejnych punktów, uwzględniania skalowania, obrotu czy translacji. Stosując jednak tę metodę należy pamiętać, że przekształcenia odbywają się nie na bryle, a na „świecie” w którym ta bryła jest tworzona.

Modelowanie w ten sposób bardziej złożonych i realistycznie wyglądających brył, w szczególności odpowiadającym obiektom organicznym, niezawierających w sobie graniastosłupów czy kul może być jednak bardzo kłopotliwe.

Przykładowy render:


Wyszukiwarka

Podobne podstrony:
sprawko z lab3 z auto by pawelekm
sprlab3PA, AGH WIMIR AiR, Semestr 3, PA, laborki, sprawko lab3 PA
sprawko lab3 metro
sprawko z lab3 z auto by pawelekm
sprawko lab3
WDA Lab3 Sprawko, WAT, semestr III, Wprowadzenie do automatyki
AOK LAB3 SPRAWKOZDANIE
lab3
El sprawko 5 id 157337 Nieznany
LabMN1 sprawko
lab3 kalorymetria
Obrobka cieplna laborka sprawko
Ściskanie sprawko 05 12 2014
1 Sprawko, Raport wytrzymałość 1b stal sila
Instrukcja Lab3
lab3 6
stale, Elektrotechnika, dc pobierane, Podstawy Nauk o materialach, Przydatne, Sprawka
2LAB, 1 STUDIA - Informatyka Politechnika Koszalińska, Labki, Fizyka, sprawka od Mateusza, Fizyka -

więcej podobnych podstron