primitivas openGL

Embed Size (px)

Citation preview

  • 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