primitivas opengl
Post on 08-Apr-2018
280 Views
Preview:
TRANSCRIPT
-
8/7/2019 primitivas openGL
1/60
1
Primitivas do OpenGL
Toms Antnio C. Badan
-
8/7/2019 primitivas openGL
2/60
2
Primitivas
Formas simples que combinadas, geramobjetos mais complexos Blocos de construo de objetos
Podem ser 1D, 2D ou 3D Vo desde pontos, linhas at polgonos
-
8/7/2019 primitivas openGL
3/60
3
Volume de Visualizao
Estabelecido no espao de modelagem Definido, por exemplo, pela funo: glOrtho(-100, 100, -100, 100, -100, 100);
-
8/7/2019 primitivas openGL
4/60
4
Pixel e Vertex
Pixel Menor elemento do monitor de computador
Definido em um plano 2D
Vertex Um ponto no espao de modelagem
Definido em um espao 3D Pode ser definido em um espao 2D
Basta considerar Z = 0 No OpenGL glVertex
-
8/7/2019 primitivas openGL
5/60
5
Definindo pontos no Espao3D
estabelecido por uma srie de pontos(funo glVertex), encapsulado pelo blocoglBegin(GL_POINTS)/glEnd()
-
8/7/2019 primitivas openGL
6/60
6
Vertex* - GL_POINTS
GLint p[5][2] = {{0,50},{-47,15},
{-29,-40}, {29,-40},{47,15}};
glBegin(GL_POINTS);
glVertex2iv(p[0]); glVertex2iv(p[2]); glVertex2iv(p[4]); glVertex2iv(p[1]); glVertex2iv(p[3]);glEnd();
-
8/7/2019 primitivas openGL
7/60
7
Propriedades de Pontos
Tamanho do ponto (padro) 1 pixel Alterando o tamanho:
void glPointSize(GLfloat size); Existem valores mximos e mnimos Obtendo a faixa permissvel: GLfloat sizes[2], step;
glGetFloatv(GL_POINT_SIZE_RANGE, sizes);
glGetFloatv(GL_POINT_SIZE_GRANULARITY, &step);
-
8/7/2019 primitivas openGL
8/60
8
Propriedades de Pontos (2)
Pontos so desenhados no formatoquadricular
Valores de tamanhos no necessitam serinteiros So aproximaes do dimetro de um crculo
contendo todos os pixels que so usados para
desenhar o ponto
-
8/7/2019 primitivas openGL
9/60
9
Definindo Retas no Espao 3D
Uma reta definida por 2 pontos Ponto definido pela funo glVertex
Em OpenGL Encapsular os pontos pelo bloco
glBegin(GL_LINES)/glEnd() Cada 2 pontos define uma reta Ponto solteiro descartado
-
8/7/2019 primitivas openGL
10/60
10
Vertex* - GL_LINES
GLint p[5][2] = {{0,50},{-47,15},
{-29,-40}, {29,-40},{47,15}};
glBegin(GL_LINES);
glVertex2iv(p[0]); glVertex2iv(p[2]); glVertex2iv(p[4]); glVertex2iv(p[1]); glVertex2iv(p[3]);glEnd();
D fi i d S t d
-
8/7/2019 primitivas openGL
11/60
11
Definindo Segmentos deRetas
Reta definida por 2 pontos ltimo ponto de um segmento de reta pode
ser considerado como primeiro ponto para o
prximo segmento Em OpenGL
Encapsular os pontos pelo bloco
glBegin(GL_LINE_STRIP)/glEnd() Todos os pontos so utilizados
-
8/7/2019 primitivas openGL
12/60
12
Vertex* - GL_LINE_STRIP
GLint p[5][2] = {{0,50},{-47,15},
{-29,-40}, {29,-40},{47,15}};
glBegin(GL_LINE_STRIP);
glVertex2iv(p[0]); glVertex2iv(p[2]); glVertex2iv(p[4]); glVertex2iv(p[1]); glVertex2iv(p[3]);glEnd();
D fi i d S t
-
8/7/2019 primitivas openGL
13/60
13
Definindo SegmentosFechados
Equivale ao caso anterior, exceto que oltimo ponto conectado ao primeiro
Em OpenGL Encapsular os pontos pelo bloco
glBegin(GL_LINE_LOOP)/glEnd()
-
8/7/2019 primitivas openGL
14/60
14
Vertex* - GL_LINE_LOOP
GLint p[5][2] = {{0,50},{-47,15},
{-29,-40}, {29,-40},{47,15}};
glBegin(GL_LINE_LOOP);
glVertex2iv(p[0]); glVertex2iv(p[2]); glVertex2iv(p[4]); glVertex2iv(p[1]); glVertex2iv(p[3]);glEnd();
-
8/7/2019 primitivas openGL
15/60
15
Propriedades das Linhas
Tamanho da linha 1 pixel Alterando o tamanho:
void glLineWidth(GLfloat width); Obtendo os valores mximo e mnimo
Sizes[0] valor mnimo Sizes[1] valor mximo
GLfloat sizes[2], step;
glGetFloatv(GL_LINE_WIDTH_RANGE, sizes);
glGetFloatv(GL_LINE_WIDTH_GRANULARITY, &step);
-
8/7/2019 primitivas openGL
16/60
16
Propriedades das Linhas (2)
Tracejado Primeiramente, deve ser habilitado com:
glEnable(GL_LINE_STIPPLE); Pode ser desabilitado a qualquer momento por:
glDisable(GL_LINE_STIPPLE);
Tipo de tracejado definido por:
void glLineStipple(GLint factor, Glushort pattern);
-
8/7/2019 primitivas openGL
17/60
17
Propriedades do Tracejado (2)
Pattern 16 bits, onde cada bitrepresenta 1 pixel que est on ou off
Factor multiplicador de pixels Cada pixel do pattern multiplicado por este
valor
-
8/7/2019 primitivas openGL
18/60
18
Definindo Polgonos
Polgonos so consideradas superfcies No definem apenas o permetro, mas so
fechadas e opacas
Possuem dois lados Definido pelaordem que pontos so definidos (winding)
Interno
Sentido horrio regra da mo esquerda Externo
Sentido antihorrio mo direita
-
8/7/2019 primitivas openGL
19/60
19
Polgonos Definies
Composto de vrtices,arestas (edges) e facesDevem ser convexos
No podem haverarestas cruzadas
-
8/7/2019 primitivas openGL
20/60
20
Tringulos
definido por 3 pontos Ponto definido pela funo glVertex
Em OpenGL Encapsular os pontos pelo bloco
glBegin(GL_TRIANGLES)/glEnd() Se os pontos forem menor do que 3, so
descartados
-
8/7/2019 primitivas openGL
21/60
21
Tringulos (2)
GLint pts[6][2] = {{-100, 0}, {-50, -86},{50, -86}, {100, 0}, {50, 86},{-50, 86}};
glBegin(GL_TRIANGLES);
glVertex2iv(pts[0]);glVertex2iv(pts[1]);glVertex2iv(pts[5]);glVertex2iv(pts[2]);glVertex2iv(pts[3]);glVertex2iv(pts[4]);
glEnd();
-
8/7/2019 primitivas openGL
22/60
22
Winding
-
8/7/2019 primitivas openGL
23/60
23
Tiras de Tringulos
Um novo tringulo pode ser definido pelosdois ltimos pontos do tringulo anterior edefinindo um novo ponto
Em OpenGL Encapsular os pontos pelo bloco
glBegin(GL_TRIANGLE_STRIP)/glEnd()
-
8/7/2019 primitivas openGL
24/60
24
Tiras de Tringulos (2)
GLint pts[6][2] = {{-100, 0}, {-50, -86},{50, -86}, {100, 0}, {50, 86},{-50, 86}};
glBegin(GL_TRIANGLE_STRIP);glVertex2iv(pts[0]);glVertex2iv(pts[1]);glVertex2iv(pts[5]);glVertex2iv(pts[2]);glVertex2iv(pts[4]);
glVertex2iv(pts[3]);glEnd();
-
8/7/2019 primitivas openGL
25/60
25
Tiras de Tringulos (3)
Definio do winding Tringulos numerados de 0 a n face
externa definida como: Tringulos pares pn, pn+1 pn+2 Tringulos impares p
n+1, p
n, p
n+2
-
8/7/2019 primitivas openGL
26/60
26
Ventoinha de Tringulos
Um novo tringulo formado pelo primeiroponto, pelo ltimo utilizado e pelo novoponto definido
Em OpenGL Encapsular os pontos pelo bloco
glBegin(GL_TRIANGLE_FAN)/glEnd()
-
8/7/2019 primitivas openGL
27/60
27
Ventoinha de Tringulos (2)
GLint pts[6][2] = {{-100, 0}, {-50, -86},{50, -86}, {100, 0}, {50, 86},{-50, 86}};
glBegin(GL_TRIANGLE_FAN);glVertex2iv(pts[0]);glVertex2iv(pts[1]);glVertex2iv(pts[2]);glVertex2iv(pts[3]);glVertex2iv(pts[4]);
glVertex2iv(pts[5]);glEnd();
-
8/7/2019 primitivas openGL
28/60
28
Cores
especificado por Vertex Cada vrtice pode ter uma cor distinta
Funo: glColor Qual cor o polgono vai ter?
Depende do modelo de sombreamento glShadeModel(GL_FLAT);
Cor do ltimo vrtice define a cor do polgono glShadeModel(GL_SMOOTH);
Cor do polgono a interpolao das cores de cadavrtice
-
8/7/2019 primitivas openGL
29/60
29
Exemplo do glShadeModel
Escondendo Superfcies
-
8/7/2019 primitivas openGL
30/60
30
Escondendo SuperfciesOcultas Performance
Se superfcie oculta no precisa ser vista Performance melhorada se no for desenhada Chamado de culling
glEnable(GL_CULL_FACE); Voltando a desenhar as superfcies
glEnable(GL_CULL_FACE);
Note que superfcies parcialmente ocultas sodesenhadas Note a diferena entre superfcie interna e
externa interna no vista quando habilitada
-
8/7/2019 primitivas openGL
31/60
31
Culling
-
8/7/2019 primitivas openGL
32/60
32
Formatao do Polgono
Padro polgono preenchido pela corslida glPolygonMode(face, modo); Onde:
Face GL_FRONT, GL_BACK,GL_FRONT_AND_BACK
Mode GL_POINT, GL_LINE, GL_FILL
-
8/7/2019 primitivas openGL
33/60
33
Quadrilteros (2)
GLint pts[8][2] = {{-10, 10}, {-10, 0}, {0, 0}, {0,10},{5,5}, {5,0}, {10,0}, {10,5}};
glBegin(GL_QUADS);glVertex2iv(pts[0]);glVertex2iv(pts[1]);glVertex2iv(pts[2]);glVertex2iv(pts[3]);glVertex2iv(pts[4]);
glVertex2iv(pts[5]);glVertex2iv(pts[6]);glVertex2iv(pts[7]);
glEnd();
-
8/7/2019 primitivas openGL
34/60
34
Tiras de Quadrilteros
Novo quadriltero definido usando osdois ltimos pontos e definindo 2 novospontos
Em OpenGL Encapsular os pontos pelo bloco
glBegin(GL_QUAD_STRIP)/glEnd()
-
8/7/2019 primitivas openGL
35/60
35
Tiras de Quadrilteros (2)
GLint pts[8][2] = {{-10, 10}, {-10, 0}, {0, 0}, {0,10},{5,5}, {5,0}, {10,0}, {10,5}};
glBegin(GL_QUAD_STRIP);glVertex2iv(pts[0]);glVertex2iv(pts[1]);glVertex2iv(pts[3]);glVertex2iv(pts[2]);glVertex2iv(pts[4]);
glVertex2iv(pts[5]);glVertex2iv(pts[7]);glVertex2iv(pts[6]);
glEnd();
-
8/7/2019 primitivas openGL
36/60
36
Tiras de Quadrilteros (3)
Definio do winding GL_QUAD_STRIP
Vertices face externa 2n 1, 2n, 2n + 2 e 2n + 1
-
8/7/2019 primitivas openGL
37/60
37
Preenchimento de Polgonos
2 modos: Texturizao Aplicando padres
Composto de um bitmap de 32x32 pontos
-
8/7/2019 primitivas openGL
38/60
38
Resumo
Note que est sendo usado a regra da mo esquerda(viso interior das faces
-
8/7/2019 primitivas openGL
39/60
39
FIM
-
8/7/2019 primitivas openGL
40/60
40
GL Funes
Funes de linhas:GL_POINTS, GL_LINES, GL_LINE_STRIP,GL_LINE_LOOP
Funes de preenchimento de reas: GL_TRIANGLES, GL_TRIANGLE_STRIP,GL_TRIANGLE_FAN, GL_QUADS,GL_QUAD_STRIP, GL_POLYGON
Curvas so aproximadas por polgonosProcesso conhecido porTessellation
-
8/7/2019 primitivas openGL
41/60
41
Polgonos - Definies
Composto de vrtices,arestas (edges) e facesDevem ser convexos
No podem haverarestas cruzadas
-
8/7/2019 primitivas openGL
42/60
42
Face Frontal e Traseira
Todo polgono tem duas facesVisibilidade diferente para cada faceglPolygonMode(face, mode);
Vetor normal superfcie mostra a face externa,ou frontalVrtices posicionados no sentido contrrio do relgiofornece a face frontal
Regra da mo direitaEliminar faces escondidasglEnable(GL_CULL_FACE);glDisable(GL_CULL_FACE);
-
8/7/2019 primitivas openGL
43/60
43
GL Funes
glVertex*: especifica pontosglBegin, glEndDelimita os vrtices de uma primitivaPrimitivas de linha
GL_POINTS, GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP,Primitivas de reaGL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN,GL_QUADS, GL_QUAD_STRIP, GL_POLYGON
glRect*: desenha um retngulo 2DglPushMatrix, glPopMatrixOperaes de pilha sobre a matriz corrente
-
8/7/2019 primitivas openGL
44/60
44
GL Operao de Matrizes
glMatrixModeGL_MODELVIEW, GL_PROJECTION,GL_TEXTURE e GL_COLOR
glLoadIdentity:Substitui a corrente pela matriz identidade
glLoadMatrix*:substitui a matriz corrente pela especificada
glMultMatrix*Multiplica a matriz corrente com a especificada
E l
-
8/7/2019 primitivas openGL
45/60
45
Exemplovoid desenha(void) {
GLfloat cubo[8][3] = {{ 1.000000, -1.000000, -1.000000},{ 1.000000, -1.000000, 1.000000},{-1.000000, -1.000000, 1.000000},{-1.000000, -1.000000, -1.000000},{ 1.000000, 1.000000, -1.000000},{ 1.000000, 1.000000, 1.000000},{-1.000000, 1.000000, 1.000000},{-1.000000, 1.000000, -1.000000}
};
GLfloat cuboColor[8][3] = {{1.0, 0.0, 0.0},{0.0, 1.0, 0.0},{0.0, 0.0, 1.0},{1.0, 1.0, 0.0},{0.0, 1.0, 1.0},{1.0, 0.0, 1.0},
};
// limpa o buffer para um novo quadroglClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW); // matrix de modelagemglLoadIdentity(); // zera qualquer transformaogluLookAt(eye[0], eye[1], eye[2], 0, 0, 0, 0, 1, 0);
glBegin(GL_QUADS);glColor3fv(cuboColor[0]); glVertex3fv(cubo[0]);glColor3fv(cuboColor[1]); glVertex3fv(cubo[1]);glColor3fv(cuboColor[2]); glVertex3fv(cubo[2]);glColor3fv(cuboColor[3]);glVertex3fv(cubo[3]);
glColor3fv(cuboColor[4]); glVertex3fv(cubo[4]);glColor3fv(cuboColor[7]); glVertex3fv(cubo[7]);glColor3fv(cuboColor[6]); glVertex3fv(cubo[6]);glColor3fv(cuboColor[5]); glVertex3fv(cubo[5]);
glColor3fv(cuboColor[0]); glVertex3fv(cubo[0]);glColor3fv(cuboColor[4]); glVertex3fv(cubo[4]);glColor3fv(cuboColor[5]); glVertex3fv(cubo[5]);glColor3fv(cuboColor[1]); glVertex3fv(cubo[1]);
glColor3fv(cuboColor[1]); glVertex3fv(cubo[1]);glColor3fv(cuboColor[5]); glVertex3fv(cubo[5]);glColor3fv(cuboColor[6]); glVertex3fv(cubo[6]);glColor3fv(cuboColor[2]); glVertex3fv(cubo[2]);
glColor3fv(cuboColor[2]); glVertex3fv(cubo[2]);glColor3fv(cuboColor[6]); glVertex3fv(cubo[6]);glColor3fv(cuboColor[7]); glVertex3fv(cubo[7]);glColor3fv(cuboColor[3]); glVertex3fv(cubo[3]);
glColor3fv(cuboColor[4]); glVertex3fv(cubo[4]);glColor3fv(cuboColor[0]); glVertex3fv(cubo[0]);glColor3fv(cuboColor[3]); glVertex3fv(cubo[3]);glColor3fv(cuboColor[7]); glVertex3fv(cubo[7]);
glEnd(); glFlush(); }
GL Mi l
-
8/7/2019 primitivas openGL
46/60
46
GL Miscelneas
glColor* especifica a cor correnteglClearColor cor de fundo do bufferglClear:
GL_COLOR_BUFFER_BIT ouGL_DEPTH_BUFFER_BIT ouGL_ACCUM_BUFFER_BIT ouGL_STENCIL_BUFFER_BIT
glFlush:fora a execuo da pilha de comandos
GL Mi l (2)
-
8/7/2019 primitivas openGL
47/60
47
GL Miscelneas (2)
glRasterPos*especifica a posio de rasterpara operaes depixel
glNewList, glGenLists, glCallList, glEndListComandos que podem ser chamados eexecutados posteriormenteteis para a modelagem de objetos repetitivos
glFrustum: matriz perspectiva
Di l Li t
-
8/7/2019 primitivas openGL
48/60
48
Display List
Otimiza a criao de objetos estticosArmazena os comandos em linguagem dehardware para futuro processamento
Depois de criado no pode ser alteradoLista pode ser armazenada no bufferda placa de vdeo ouna memriaNormalmente criada na inicializao do programaDepende do tipo de aplicao (jogos, por exemplo, as utilizaria parainicializar os nveis ou fases)
Di l Li t d
-
8/7/2019 primitivas openGL
49/60
49
Display List- comandos
GLuint glGenLists(faixa);Reserva uma faixa de ID de listasRetorna zero no caso de erro
glNewList(id, tipo); / glEndList();Cria uma lista estticaTipo = GL_COMPILE ou
GL_COMPILE_AND_EXECUTEPermitido definio de objetos e mudanas de estado namquina OpenGLPermite chamar outras listas tambm
Di l Li t d (2)
-
8/7/2019 primitivas openGL
50/60
50
Display List comandos (2)
glCallList(id);Invoca uma lista previamente criada
glDeleteLists(id inicial, faixa);Libera a memria de uma lista
Evitar colocar informaes de textura emlistaDesperdcio de memria
Acesso ao buffer de vdeo no tem sentindonuma lista
E l
-
8/7/2019 primitivas openGL
51/60
51
Exemplovoid init(void) {
GLfloat cubo[8][3] = {{ 1.000000, -1.000000, -1.000000},{ 1.000000, -1.000000, 1.000000},{-1.000000, -1.000000, 1.000000},{-1.000000, -1.000000, -1.000000},{ 1.000000, 1.000000, -1.000000},{ 1.000000, 1.000000, 1.000000},{-1.000000, 1.000000, 1.000000},{-1.000000, 1.000000, -1.000000}
};
GLfloat cuboColor[8][3] = {{1.0, 0.0, 0.0},{0.0, 1.0, 0.0},{0.0, 0.0, 1.0},{1.0, 1.0, 0.0},{0.0, 1.0, 1.0},{1.0, 0.0, 1.0},
};list = glGenLists(1);
if ( !list) {printf("Impossvel alocar nova lista\n");exit(EXIT_FAILURE);
}
glNewList(list, GL_COMPILE);glBegin(GL_QUADS);
glColor3fv(cuboColor[0]); glVertex3fv(cubo[0]);glColor3fv(cuboColor[1]); glVertex3fv(cubo[1]);
glColor3fv(cuboColor[2]); glVertex3fv(cubo[2]);glColor3fv(cuboColor[3]);glVertex3fv(cubo[3]);
glColor3fv(cuboColor[4]); glVertex3fv(cubo[4]);glColor3fv(cuboColor[7]); glVertex3fv(cubo[7]);glColor3fv(cuboColor[6]); glVertex3fv(cubo[6]);glColor3fv(cuboColor[5]); glVertex3fv(cubo[5]);
glColor3fv(cuboColor[0]); glVertex3fv(cubo[0]);glColor3fv(cuboColor[4]); glVertex3fv(cubo[4]);glColor3fv(cuboColor[5]); glVertex3fv(cubo[5]);glColor3fv(cuboColor[1]); glVertex3fv(cubo[1]);
glColor3fv(cuboColor[1]); glVertex3fv(cubo[1]);glColor3fv(cuboColor[5]); glVertex3fv(cubo[5]);glColor3fv(cuboColor[6]); glVertex3fv(cubo[6]);glColor3fv(cuboColor[2]); glVertex3fv(cubo[2]);
glColor3fv(cuboColor[2]); glVertex3fv(cubo[2]);glColor3fv(cuboColor[6]); glVertex3fv(cubo[6]);glColor3fv(cuboColor[7]); glVertex3fv(cubo[7]);glColor3fv(cuboColor[3]); glVertex3fv(cubo[3]);
glColor3fv(cuboColor[4]); glVertex3fv(cubo[4]);glColor3fv(cuboColor[0]); glVertex3fv(cubo[0]);glColor3fv(cuboColor[3]); glVertex3fv(cubo[3]);glColor3fv(cuboColor[7]); glVertex3fv(cubo[7]);glEnd();
glEndList();
glClearColor(0, 0, 0, 1.0); // cor de fundo (branco)
}
E l C ti
-
8/7/2019 primitivas openGL
52/60
52
Exemplo - Continuao
void desenha(void) {// limpa o buffer para um novo quadroglClear(GL_COLOR_BUFFER_BIT); // todos os bit so iguais branco
glMatrixMode(GL_MODELVIEW); // matrix de modelagemglLoadIdentity(); // zera qualquer transformaogluLookAt(eye[0], eye[1], eye[2], 0, 0, 0, 0, 1, 0); // direo de visualizao
glCallList(list);
glFlush(); // fora a visualizao}
Di l li t t i
-
8/7/2019 primitivas openGL
53/60
53
Display list- comentrios
Ganho de performance?No precisa criar o objeto toda vez que invocadoObjetos do mesmo tipo pode ser chamado vrias
vezes, com uma nica inicializao
V t d ti
-
8/7/2019 primitivas openGL
54/60
54
Vetor de vrtices
Permite a criao de lista de forma dinmicaPode ser mudado o formato do objeto dentro dovetor previamente calculado
Exemplo, uma mesh que define o oceano, em cada quadro,a mesh pode ser atualizadaNo OpenGL, o vetor transferido do cliente para oservidor em loteGanho de performance
V t d V ti Et
-
8/7/2019 primitivas openGL
55/60
55
Vetor de Vrtices - Etapas
Construir os vetores vrtice, cor,coordenadas de textura, vetor normal, etcDizer ao OpenGL onde se encontram esses
vetoresDizer quais vetores a aplicao estinteressadaExecutar a renderizao do quadro
V t d V ti C d
-
8/7/2019 primitivas openGL
56/60
56
Vetor de Vrtices - Comandos
Habilitando vetores:gGlEnableClientState(x); glDisableClientState(x);X = GL_VERTEX_ARRAY, GL_COLOR_ARRAY,
GL_NORMAL_ARRAY, etcNote que uma operao realizada do lado do cliente eno do servidor
Vetor de Vrtices Comandos
-
8/7/2019 primitivas openGL
57/60
57
Vetor de Vrtices Comandos(2)
Onde esto os dados?glVertexPointer(...);glColorPointer(...);glNormalPointer(...);
DesenhandoglArrayElement(ndice);Especifica o indice do vetor previamente registrado
Vetor de Vrtices Comandos
-
8/7/2019 primitivas openGL
58/60
58
Vetor de Vrtices Comandos(3)
Forma mais econmica:glDrawArrays(mode, first, count);Desenha o objeto (mode = GL_TRIANGLES, etc), com o
ndice iniciando em first e count especificando a quantidadeForma usando vetor de ndicesglDrawElements(mode, count, tipo, indices);
Mesmo comentrio anterior, onde ndice um vetor
Exemplo
-
8/7/2019 primitivas openGL
59/60
59
Exemplo// vriaveis globais, ou estticas na funo// desenha()GLfloat cubo[24] = {
1.000000, -1.000000, -1.000000,1.000000, -1.000000, 1.000000,
-1.000000, -1.000000, 1.000000,-1.000000, -1.000000, -1.000000,1.000000, 1.000000, -1.000000,1.000000, 1.000000, 1.000000,
-1.000000, 1.000000, 1.000000,-1.000000, 1.000000, -1.000000
};GLfloat cuboColor[24] = {
1.0, 0.0, 0.0,0.0, 1.0, 1.0,0.0, 0.0, 1.0,1.0, 1.0, 0.0,0.0, 1.0, 1.0,1.0, 0.0, 1.0
};
GLubyte indices[24] = {0, 1, 2, 3,4, 7, 6, 5,0, 4, 5, 1,1, 5, 6, 2,
2, 6, 7, 3,4, 0, 3, 7
};
void init(void) { glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_COLOR_ARRAY);
glClearColor(0.5, 0.5, 0.5, 1.0); // cor de fundo (cinza)}
void desenha(void) {// limpa o buffer para um novo quadro
glClear(GL_COLOR_BUFFER_BIT); // todos os bit so iguais brancoglMatrixMode(GL_MODELVIEW); // matrix de modelagemglLoadIdentity(); // zera qualquer transformaogluLookAt(eye[0], eye[1], eye[2], 0, 0, 0, 0, 1, 0); // direo de
// visualizao
glVertexPointer(3, GL_FLOAT, 0, cubo); glColorPointer(3, GL_FLOAT, 0, cuboColor);
glDrawElements(GL_QUADS, 24, GL_UNSIGNED_BYTE, indices);
glFlush(); // fora a visualizao}
Bibliografia Adicional
-
8/7/2019 primitivas openGL
60/60
60
Bibliografia Adicional
http://www.opengl.org/sdk/docs/man/http://www.opengl.org/resources/libraries/glut/shttp://www.opengl.org/resources/code/samples/gl
ut_examples/examples/examples.html
http://www.opengl.org/resources/libraries/glut/spec3/spec3.htmlhttp://www.opengl.org/resources/libraries/glut/spec3/spec3.html
top related