< 3D

OpenGL

Szerző: Sallai András

Copyright © Sallai András, 2020

Licenc: CC Attribution-Share Alike 4.0 International

Web: https://szit.hu

Ablak törlés

void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)

void glClearIndex(GLfloat c)

void glClear(GLbitfield mask);

Példa:

glClear(GL_COLOR_BUFFER_BIT)

Törölhető pufferek:

GL_COLOR_BUFFER_BIT – színpuffer

GL_DEPTH_BUFFER_BIT – mélységpuffer

GL_ACCUM_BUFFER_BIT – gyűjtőpuffer

GL_STENCIL_BUFFER_BIT – stencilpuffer

A rajzolás befejezését a glFlush() függvénnyel kezdeményezhetjük.

void glFlush(void);

A glFinish() függvény csak akkor adja vissza a vezérlést, ha minden utasítást végrehajtódott.

void glFinish(void);

Geometriai alakzatok rajzolása

A geometriai alakzatokat csúcspontokkal adjuk meg. Csúcspontot 2, 3 vagy 4 koordinátával adunk meg.

x, y – síkbeli

x, y, z – derékszögű Descartes koordináta rendszer

x, y, z, w – homogén koordináták

A csúcspontokat a glVertex*() függvényekkel adhatunk meg.

void glVertex{234}{sifd} (TYPE coords);

void glVertex{234}{sifd}v (const TYPE *coords);

A glVertex*() függvényeket a glBegin() és glEnd() függvények között kell megadni.

Normálvektor

Az a vektor, amely adott pontban merőleges a felület érintősíkjára.

Minden csúcsponthoz legfeljebb egy normálist rendelhetünk, a glNormal*() függvénnyel. Szintaxis:

void glNormal3{bsifd} (TYPE nx, TYPE ny, TYPE nz)
void glNormal3{bsifd}v (const TYPE *v)

Automatikus normalizálás engedélyezése:

glEnable(GL_NORMALIZE)

Alakzat megjelenítése

Pontok, szakaszok és poligonokat rajzolhatunk csúcspontokkal.

Kivételesen, egy téglalap megadható az átlók csúcspontjaival.

void glRect{sifd} (TYPE x1, TYPE y1, TYPE x2, TYPE y2 );
void glRect{sifd}v (TYPE *v1, TYPE *v2 );

GL_POINTS – Pontrajzolása

GL_LINES – páros és páratlan csúcspontok összekötése

GL_LINE_STRIP – csúcspontok összekötése, egyenes szakasszal

GL_LINE_LOOP – Mint a STRIP, de végpont össze lesz kötve a kezdőponttal

GL_QUADS – négyszög

GL_TRIANGLES – háromszög

GL_POLYGON – poligon

glBegin(GL_LINES); ... glEnd(); glBegin(GL_QUADS); ... glEnd();