KWADRYKI, Studia, WAT Informatyka, s3 - GK - lab grafika komputerowa, Lab2


Kwadryki

Kwadryka to powierzchnia drugiego rzędu, którą można zapisać w postaci równania:

0x01 graphic

0x01 graphic

0x01 graphic

0x01 graphic

Kwadryki dostępne w bibliotece GLU

0x01 graphic

void gluCylinder(GLUquadricObj* obj,

GLdouble baseRadius,

GLdouble topRadius,

GLdouble height,

GLint slices,

GLint stacks);

gluCylinder(obj, 0.5, 1.0, 1.5, 10, 5);

0x01 graphic

void gluDisk(GLUquadricObj* obj,

GLdouble innerRadius,

GLdouble outerRadius,

GLint slices,

GLint loops);

gluDisk(obj, 1.0, 2.0, 10, 5);

0x01 graphic

void gluPartialDisk(

GLUquadricObj* obj,

GLdouble innerRadius,

GLdouble outerRadius,

GLint slices,

GLint loops,

GLdouble startAngle,

GLdouble sweepAngle

);

gluPartialDisk(obj,1.0,2.0,10,5,0,60);

0x01 graphic

void gluSphere(GLUquadricObj* obj,

GLdouble radius,

GLint slices,

GLdouble stacks);

Używanie kwadryk

Przykład:

/*Przygotowanie obiektu*/

GLUquadricObj *obiekt;

obiekt = gluNewQuadric();

gluQuadricDrawStyle(obiekt, GLU_FILL);

/*Rysowanie kwadryki*/

gluQuadricOrientation(obiekt, GLU_OUTSIDE);

gluQuadricNormals(obiekt, GLU_FLAT);

/*Funkcje odpowiedzialne za teksturowanie kwadryki */

glEnable(GL_TEXTURE_2D);

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);

gluQuadricTexture(obiekt, GL_TRUE);

glCallList(Texture);

/*Właściwe rysowanie kwadryk */

gluCylinder(obiekt, 0.5, 1.0, 1.0, 20, 2);

glTranslatef(0.0f, 0.0f, -1.0f);

gluCylinder(obiekt, 1.0, 0.5, 1.0 ,20, 2);

Parametry kwadryk:

Style rysowania kwadryk ustawiane przy pomocy gluQuadricDrawStyle

GLU_FILL

kwadryki są wypełniane przy użyciu wielokątów (czworokątów)

GLU_LINE

kwadryki są rysowane jako siatka, za pomocą linii łamanych

GLU_SILHOUETTE

kwadryki są rysowane za pomocą odcinków, wyświetlane są tylko zewnętrzne krawędzie

GLU_POINT

kwadryki są rysowane jako zbiór punktów

Automatyczne obliczanie normalnych - gluQuadricNormals

GLU_NONE

Normalne nie są generowane

GLU_FLAT

Normalne są generowane dla wielokątów - powstają płaskie ścianki (ostrosłupy, graniastosłupy)

GLU_SMOOTH

Normalne są generowane dla wierzchołków - powstaje gładka ścianka (stożki, walce, sfery)

Ustalanie kierunku normalnych dla kwadryki - gluQuadricOrientation

GLU_OUTSIDE

Normalne wskazują na zewnątrz obiektu

GLU_INSIDE

Normalne wskazują do wewnątrz obiektu

Generowanie współrzędnych dla tekstury - gluQuadricTexture

GLU_TRUE

Współrzędne są generowane

GLU_FALSE

Współrzędne nie są generowane

Podział wielokątów

0x01 graphic

Przykład - rysowanie litery A

1. Przygotowanie współrzędnych

GLUtriangulatorObj *obj;

GLdouble out[7][3] =

{{ 0.0, 1.0, 0.0 },

{-0.5, -1.0, 0.0 },

{-0.4, -1.0, 0.0 },

{-0.2, -0.1, 0.0 },

{ 0.2, -0.1, 0.0 },

{ 0.4, -1.0, 0.0 },

{ 0.5, -1.0, 0.0 }};

GLdouble ins[3][3] =

{{ 0.0, 0.6, 0.0 },

{-0.1, 0.1, 0.0 },

{ 0.1, 0.1, 0.0 }};

0x01 graphic

2. Utworzenie obiektu

obj = gluNewTess();

3. Zdefiniowanie funkcji zwrotnych

void CALLBACK MyVertex (void* data)

{

double *tab=data;

glTexCoord2dv(tab);//Ustawiamy wpółrzędne dla teksturowania

glVertex3dv(tab);

}

gluTessCallback(obj,GLU_BEGIN, glBegin);

gluTessCallback(tess, GLU_VERTEX, (void (CALLBACK*)(void))MyVertex);

gluTessCallback(obj, GLU_END, glEnd);

4. Rysowanie obiektu - część zewnętrzna

gluBeginPolygon(obj);

gluObjVertex(obj, out[0], out[0]); gluObjVertex(obj, out[1], out[1]);

gluObjVertex(obj, out[2], out[2]); gluObjVertex(obj, out[3], out[3]);

gluObjVertex(obj, out[4], out[4]); gluObjVertex(obj, out[5], out[5]);

gluObjVertex(obj, out[6], out[6]);

5. Rysowanie obiektu - część wewnętrzna

gluNextContour(obj, GLU_INTERIOR);

gluObjVertex(obj, ins[0], ins[0]); gluObjVertex(obj, ins[1], ins[1]);

gluObjVertex(obj, ins[2], ins[2]);

gluEndPolygon(obj);

gluDeleteObj(obj);

Opis funkcji dotyczących triangulatora

Definiowanie funkcji zwrotnych:

void gluTessCallback(GLUtriangulatorObj *tObj, GLenum which, void (*fn)());

Ta funkcja określa funkcje zwrotne podziału wielokąta, wywoływane na różnych etapach podziału. Funkcje zwrotne nie wpływają na sposób działania triangulatora ani na jego wydajność. Umożliwiają raczej uzupełnienie generowanych wierzchołków o dodatkowe informacje, takie jak kolor czy współrzędne tekstury.

Parametry

tObj GLUtriangulatorObj*: Wskaźnik do obiektu triangulatora, używanego przy podziale wielokąta.

which GLenum: Definiowana funkcja zwrotna

fn void (*)(): Wywoływana funkcja. Ponieważ funkcje mają różne prototypy należy je rzutować na typ właściwy przy pomocy rzutowania (void (CALLBACK*)(void))

Parametr which

Opis funkcji

Deklaracja funkcji

GLU_BEGIN

Funkcja jest wywoływana w momencie rozpoczęcia budowania prymitywu GL_TRIANGLE_FAN, GL_TRIANGLE_STRIP, GL_TRIANGLES

void begin(GLenum type);

GLU_EDGE_FLAG

Funkcja jest wywoływana przy każdym wierzchołku wielokąta i musi przyjmować pojedynczy parametr GLboolean, określający czy wierzchołek jest wierzchołkiem określającym obszar wielokąta(GL_TRUE) czy wygenerowanym w jego wnętrzu w celu podziału (GL_FALSE)

void edgeFlag (GLboolean flag);

GLU_TESS_VERTEX

Funkcja jest wywoływana przed każdym wysłaniem kolejnego wierzchołka funkcją glVertex3dv. Funkcja otrzymuje kopię trzeciego argumentu funkcji gluTessVertex

void vertex (void * vertex_data);

GLU_TESS_END

Funkcja wywoływana na zakończenie rysowania prymitywu, zwykle funkcją glEnd

void end (void);

GLU_TESS_ERROR

Funkcja wywoływana w przypadku błędu. Możliwe argumenty to GLU_TESS_MISSING_BEGIN_POLYGON, GLU_TESS_MISSING_END_POLYGON, GLU_TESS_MISSING_BEGIN_CONTOUR, GLU_TESS_MISSING_END_CONTOUR, GLU_TESS_COORD_TOO_LARGE

void error (GLenum errno);

GLU_TESS_BEGIN_DATA

GLU_TESS_EDGE_FLAG_DATA

GLU_TESS_VERTEX_DATA

GLU_TESS_END_DATA

GLU_TESS_ERROR_DATA

Parametry definiują funkcje działające tak samo jak powyższa, z tym że udostępniające jako ostatni parametr wskaźnik do obiektu triangulatora

void fun ( …. , void *poly_data);

Rysowanie wielokątów wklęsłych

Void gluTessVertex(GLUtriangulatorObj *t0bj,

GLdouble v[3],

void *data);

Ta funkcja dodaje wierzchołek do bieżącej ścieżki podziału wielokąta. Argument data jest przekazywany w funkcji

zwrotnej GL_VERTEX.

Parametry

tObj GLUtriangulatorObj*: Wskaźnik do obiektu triangulatora, używanego przy podziale wielokąta.

v GLdouble[3]: Wierzchołek 3D.

data void *: Wskaźnik do danych, które mają zostać przekazane w funkcji zwrotnej GL_VERTEX.

Rysowanie wielokątów złożonych

void gluNextContour(GLUtriangulatorObj *t0bj,GLenum type);

Ta funkcja rozpoczyna nowy kontur lub otwór w złożonym wielokącie

Parametry

tObj GLUtriangulatorObj*: Wskaźnik do obiektu triangulatora, używanego przy podziale wielokąta.

type GLenum: Typ konturu.

Typy ścieżek funkcji gluNextContour

GLU_EXTERIOR

Ścieżka wyznacza zewnętrzne krawędzie wielokąta

GLU_INTERIOR

Ścieżka wyznacza wewnętrzne krawędzie wielokąta (dziura)

GLU_UNKNOWN

Kontur będzie analizowany przez glu

GLU_CCW ,GLU_CW

Pierwszy definiowany kontur przyjmuje się domyślnie jako zawnętrzny. Przyjmuje się że każdy następny również będzie zewnętrzny, jeśli będzie definiowany w tym samym kierunku, a jeśli w przeciwnym - wewnętrzny. Dla parametru GLU_CCW, ścieżki zewnętrzne będą przeciwne do ruchu wskazówek zegara

0x01 graphic

WYKŁAD 4a

Kwadryki i wielokąty złożone

0x01 graphic

6



Wyszukiwarka

Podobne podstrony:
SPR-ANKI, Studia, WAT Informatyka, s3 - GK - lab grafika komputerowa, Lab2
sprawko-pieci, Studia, WAT Informatyka, s3 - GK - lab grafika komputerowa, Lab2
Zadania L2 I6Y3S1, Studia, WAT Informatyka, s3 - GK - lab grafika komputerowa, Lab2
sprawozdanie3, Studia, WAT Informatyka, s3 - GK - lab grafika komputerowa, Lab4
sprawozdanie oswietlenie, Studia, WAT Informatyka, s3 - GK - lab grafika komputerowa, Lab3
OpenGl, Studia, WAT Informatyka, s3 - GK - lab grafika komputerowa, Lab4
Zadania L3 I6X4S1, Studia, WAT Informatyka, s3 - GK - lab grafika komputerowa, Lab4
Zadania L3 I6Y3S1, Studia, WAT Informatyka, s3 - GK - lab grafika komputerowa, Lab3
tresc lab3 gk, Studia, WAT Informatyka, s3 - GK - lab grafika komputerowa, Lab3
Zadania L4 I6Y4S1, Studia, WAT Informatyka, s3 - GK - lab grafika komputerowa, Lab4
Zadania L3 I6Y4S1, Studia, WAT Informatyka, s3 - GK - lab grafika komputerowa, Lab3
Opała GK sprawozdanie lab4, Studia, WAT Informatyka, s3 - GK - lab grafika komputerowa, Lab4
Zadania L4 I6Y3S1, Studia, WAT Informatyka, s3 - GK - lab grafika komputerowa, Lab4
sprko-pieci, Studia, WAT Informatyka, s3 - GK - lab grafika komputerowa, Lab3
Zadanie IY4S1, Studia, WAT Informatyka, s3 - GK - grafika komputerowa, LAB2
Rzezba Lab4, Studia, WAT Informatyka, s3 - GK - grafika komputerowa, LAB4
GK LAB3, Studia, WAT Informatyka, s3 - GK - grafika komputerowa, LAB4
Zadania I1Y3S1, Studia, WAT Informatyka, s3 - GK - grafika komputerowa, LAB4

więcej podobnych podstron