• Nenhum resultado encontrado

Computação Gráfica. Desempenho

N/A
N/A
Protected

Academic year: 2021

Share "Computação Gráfica. Desempenho"

Copied!
39
0
0

Texto

(1)

Computação Gráfica

(2)

Desempenho

• Tópicos:

– Display Lists

– Vertex Arrays

– Vertex Buffers

(3)

Display Lists

• As DL permitem ao

driver

“compilar” sequências de comandos.

Por exemplo:

– Transformações geométricas

– Coordenadas de Vértices

– Coordenadas de texturas e normais

(4)

Display Lists

• Exemplos:

– Ao invocar glRotate no modo imediato, é necessário construir a matriz respectiva e executar a multiplicação de matrizes.

– Caso glRotate seja incluído na DL, então é possível construir a

matriz ao criar a DL, na execução só é executada a multiplicação de matrizes.

– Um display list pode também concatenar matrizes resultantes de transformações geométricas durante a sua criação.

(5)

Display Lists

• Uma

display list

é estática.

– => Não é possível editar os comandos de uma

display list

.

– Motivo: A edição de uma DL podia provocar fragmentações de

memória, e implicava uma gestão de memória mais exigente.

(6)

Display Lists

Display Lists Hierárquicas

Uma

display list

pode conter referências a outras

display

lists

.

A recursividade não é permitida.

O nível de aninhamento, segundo a especificação, pode ir

até 64.

(7)

Display Lists

• Display Lists Hierarquicas (cont.)

– Permitem uma forma básica de edição de conteúdos.

• Ao alterar uma

display list

previamente aninhada, a “mãe”

também é implicitamente alterada.

(8)

Display Lists

• Setup

GLuint glGenLists( GLsizei

range

);

Gera um conjunto de listas sequenciais. Devolve o índice da primeira lista.

(9)

Display Lists

• Definição

void glNewList( GLuint

list

, GLenum

mode

); // comandos para a lista

void glEndList(

void

);

list

: o índice da lista

(10)

Display Lists

• Utilização

glCallList( GLuint

list);

realiza o render de uma

display list

com o índice

list

. glCallLists(Glsizei, n, Glenum type, const Glvoid *lists);

render de um conjunto de

display lists

, cujos índices estão especificados no

array lists

.

(11)

Display Lists

• Libertar recursos

void glDeleteLists(GLuint listID, GLsizei numberOfLists);

Liberta recursos de uma sequência de comprimento

numberOfLists

, a partir do índice

listID

.

(12)

Display Lists

Setup e Geração

id = GenLists(1); glNewList(id,GL_COMPILE); glTranslatef(10.0f,5.0f,3.0f); glBegin(GL_TRIANGLE_STRIP); glVertex3f(1.0f,1.0f,1.0f); ... glEnd(); glEndList();

Utilização

glCallList(id);

(13)

Display Lists

void drawSnowMan() { glColor3f(1.0f, 1.0f, 1.0f); // Draw Body glTranslatef(0.0f ,0.75f, 0.0f); glutSolidSphere(0.75f,20,20); // Draw Head glTranslatef(0.0f, 1.0f, 0.0f); glutSolidSphere(0.25f,20,20); // Draw Eyes glPushMatrix(); glColor3f(0.0f,0.0f,0.0f); glTranslatef(0.05f, 0.10f, 0.18f); glutSolidSphere(0.05f,10,10); glTranslatef(-0.1f, 0.0f, 0.0f); glutSolidSphere(0.05f,10,10); glPopMatrix(); // Draw Nose glColor3f(1.0f, 0.5f , 0.5f); glRotatef(0.0f,1.0f, 0.0f, 0.0f); glutSolidCone(0.08f,0.5f,10,1);

(14)

OpenGL - Display Lists

• Sem Display Lists

for(i = -3; i < 3; i++) for(int j=-3; j < 3; j++) { glPushMatrix(); glTranslatef(i*10.0,0,j * 10.0); drawSnowMan(); glPopMatrix(); }

(15)

OpenGL - Display Lists

• Display List para o boneco

Setup

snowManDL = glGenLists(1);

glNewList(snowManDL,GL_COMPILE); drawSnowMan();

(16)

OpenGL - Display Lists

• Display List para o boneco

Utilização

for(i = -3; i < 3; i++) for(int j=-3; j < 3; j++) { glPushMatrix(); glTranslatef(i*10.0,0,j * 10.0); glCallList(snowManDL); glPopMatrix(); }

(17)

OpenGL - Display Lists

• Display List com todos os bonecos de neve

Setup

glNewList(loopDL,GL_COMPILE); for(int i = -3; i < 3; i++) for(int j=-3; j < 3; j++) { glPushMatrix(); glTranslatef(i*10.0,0,j * 10.0); drawSnowMan(); glPopMatrix(); } glEndList();

(18)

OpenGL - Display Lists

Display List

Hierárquica

Setup

loopDL = glGenLists(2); glNewList(loopDL+1,GL_COMPILE); drawSnowMan(); glEndList(); glNewList(loopDL,GL_COMPILE); for(int i = -3; i < 3; i++) for(int j=-3; j < 3; j++) { glPushMatrix(); glTranslatef(i*10.0,0,j * 10.0); glCallList(loopDL+1); glPopMatrix();

(19)

Display Lists

• Teste

– 100 cilindros

– número de triângulos de cada cilindro =

{60,600,6000,60000}

– Pentium 4 2.53Ghz, 1GB DDR 400, GeForce TI

4800 SE

(20)

Display Lists

• Resultados

1106 1227 1227 1581 6000 60.000 600.000 6.000.000 212 250 251 490 22.77 77.53 77.53 66.01 2.17 7.91 7.91 2.53 Sem DL DL simples DL Hierárquica DL Total

(21)

Desempenho

• Tópicos:

– Display Lists

– Vertex Arrays

– Vertex Buffers

(22)

Vertex Arrays

• São necessárias 900 invocações de funções para

submeter 300 triângulos com cores e textura.

Immediate Mode Vertex Submission

958 664 38238 0 500 1000 1500 2000 2500 3000 3500 4000 4500 5000

glTexture glColor glVertex

C P U C y c le s min max mean 163154 ciclos CPU para submeter 300 Vértices

(23)

Vertex Arrays

• Triângulos pequenos (pouco tempo de raster)

• Sem iluminação

• Sem transformações geométricas

(24)

Vertex Arrays

• Permitem:

– Introduzir os valores em arrays e submeter os dados uma só

vez.

• Vantagens:

(25)

Vertex Arrays

• Definição: Interleaved Arrays

... b2 g2 r2 t2 s2 z2 y2 x2 b1 g1 r1 t1 s1 z1 y1 x1 GL_T2F_C3F

(26)

Vertex Arrays

• Interleaved Arrays (from MSDN)

• void void void void glInterleavedArraysglInterleavedArraysglInterleavedArrays( glInterleavedArrays( ( ( GLenumGLenumGLenumGLenumformat,GLsizei,GLsizei,GLsizei,GLsizeistride, const , const GLvoid, const , const GLvoidGLvoidGLvoid ****pointer););););

Parameters

• format - The type of array to enable. The parameter can assume one of the following symbolic values: GL_V2F, GL_V3F, GL_C4UB_V2F, GL_C4UB_V3F, GL_C3F_V3F, GL_N3F_V3F, GL_C4F_N3F_V3F, GL_T2F_V3F, GL_T4F_V4F, GL_T2F_C4UB_V3F, GL_T2F_C3F_V3F, GL_T2F_N3F_V3F, GL_T2F_C4F_N3F_V3F, or

GL_T4F_C4F_N3F_V4F.

• stride - The offset in bytes between each aggregate array element. • pointer - A pointer to the first element of an aggregate array.

(27)

Vertex Arrays

• Utilização:

• void glDrawArrays( GLenum mode, GLint first, GLsizei count ); • Parameters:

• mode - The kind of primitives to render. The following constants specify

acceptable types of primitives: GL_POINTS, GL_LINE_STRIP, GL_LINE_LOOP, GL_LINES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_TRIANGLES,

GL_QUAD_STRIP, GL_QUADS, and GL_POLYGON. • first - The starting index in the enabled arrays. • count - The number of indexes to render.

(28)

Vertex Arrays

• Utilização: indíces não sequenciais

• void glDrawElements( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices );

• Parameters

• mode - GL_POINTS, GL_LINE_STRIP, GL_LINE_LOOP, GL_LINES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_TRIANGLES,

GL_QUAD_STRIP, GL_QUADS, and GL_POLYGON. • count - The number of elements to be rendered.

• type - The type of the values in indices. Must be one of GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT, or GL_UNSIGNED_INT.

(29)

Vertex Arrays

glInterleavedArrays Vertex Subm ission

0 20000 40000 60000 80000 100000 120000 140000 160000 180000 200000 C P U C y c le s min max mean

Tempo médio

de 72821

ciclos para

submeter 300

vértices

(30)

Vertex Arrays

• Arrays Independentes

• glVertexPointer • glColorPointer • glNormalPointer • glTexCoordPointer

void glEnableClientState( GLenum

array

); void glDisableClientState( GLenum

array

);

(31)

Vertex Arrays

• Vantagens: Independência dos dados.

void glVertexPointer( GLint size,GLenum type,GLsizei stride, const GLvoid *pointer);

Parameters

size- The number of coordinates per vertex. The value of sizemust be 2, 3, or 4.

type- The data type of each coordinate in the array using the following symbolic constants: GL_SHORT, GL_INT, GL_FLOAT, and GL_DOUBLE.

stride- The byte offset between consecutive vertices. When stride is zero, the vertices are tightly packed in the array.

(32)

Desempenho

• Tópicos:

– Display Lists

– Vertex Arrays

– Vertex Buffers

(33)

Vertex Buffers

• Não é possível ter vários vertex arrays do mesmo tipo

simultaneamente em memória.

• Submeter toda a geometria num só array pode ser

contra- produtivo.

(34)

Vertex Buffers

• Vertex Buffers permitem definir múltiplos vertex

arrays, ou buffers de memória, armazenados

idealmente na placa gráfica.

• Mecanismo semelhante às texturas.

(35)

Vertex Buffers

• Criação:

– glGenBuffers (int num, GLuint *buffers);

• É necessário um buffer para cada tipo de dados: normais, cores

texturas e vértices.

(36)

Vertex Buffers

• Definição:

glBindBuffer (GL_ARRAY_BUFFER, vertexBuffers[0]); glBufferData (GL_ARRAY_BUFFER, size, pointer,modo); glVertexPointer(3, GL_FLOAT, 0, 0);

glBindBuffer (GL_ARRAY_BUFFER, vertexBuffers[1]); glBufferData (GL_ARRAY_BUFFER, size, pointer,modo); glNormalPointer(GL_FLOAT, 0, 0);

glBindBuffer(GL_ARRAY_BUFFER, vertexBuffers[2]); glBufferData (GL_ARRAY_BUFFER, size, pointer,modo); glTexCoordPointer(4, GL_FLOAT, 0, 0);

(37)

Vertex Buffers

• O parâmetro de

modo

indica a utilização dos dados:

– Taxa de actualização

– Taxa de utilização

– Tipo de utilização

(38)

Vertex Buffers

• Render:

– Semelhante aos Vertex Arrays

.

• glDrawArrays

(39)

Referências

Referências

Documentos relacionados

‘ O crime de insubmissão previsto no artigo 183 do CPM (‘deixar de apresentar-se o convocado à incorporação, dentro do prazo que lhe foi marcado ...’) aplica-se apenas aos

O LAVI vem sendo montado gradativamente, com recursos provenientes do FDA (Fundo de Desenvolvimento Acadêmico) e LABGRAD (Programa de Apoio aos Laboratórios de

1964: Managing for Results (“Administrando para Obter Resultados”, ed. Thomson Pio- neira). Neste livro, que complementa The Practice of Management, Drucker explica por que é

· Indicações sobre cuidados médicos urgentes e tratamentos especiais necessários Não existe mais nenhuma informação relevante disponível.. 5 Medidas de combate

A organização reserva-se ao direito a realizar as modificações que considere necessárias, dependendo das diferentes condições, assim como à suspensão da prova se

1) O atendimento de nossos clientes é realizado por empregados da XP Investimentos CCTVM S/A (“XP Investimentos ou XP”) ou por agentes autônomos de investimento que

Fica garantido pelos EMPREGADORES o fornecimento de VALE ALIMENTAÇÃO OU VALE REFEIÇÃO a todos os EMPREGADOS em atividade das categorias albergadas por esta CONVENÇÃO COLETIVA

// analisa um verbo (like, sees) private void parseSubject ();. // analisa um sujeito (I ou a rat) private void