Baixe o app para aproveitar ainda mais
Prévia do material em texto
Introdução • A modelagem em camadas de um objeto (esfera, cilindro, cone, etc.) cria um objeto primitivo centrado na origem, onde os vértices situam-se sobre camadas de formato definido (normalmente circunferências) A estrutura do objeto primitivo irá requerer parâmetros adicionais: um índice correspondente ao número de camadas (nc) e outro índice correspondente aos vértices existentes nas camadas (nvc). Basicamente o processo ocorre em três etapas: São feitos cortes nos objetos definindo camadas Em cada camada são distribuídos um número fixo de vértices Os vértices entre camadas e nas próprias camadas são ligados Comp Graf II - Camadas - Comp Graf II - Camadas - R X Y Z Vértice do topo Camada da base H Modelagem do Objeto Cone A representação por camadas de um cone utiliza um cone primitivo centrado na origem, de altura H, onde a base é formada por uma camada de vértices situados sobre a circunferência de um círculo de raio R. Para simplificar o processo, é atribuído o vértice do topo. Y0=-H/2 Y1=H/2 Comp Graf II - Camadas - j. Eixo X eixoZ z x R Modelagem do Objeto Cone Para a circunferência de raio “R” da camada de base do cone de altura H, existem “nvc” vértices. Para um vértice “j” qualquer da base tem-se: x = R cos(j.) y = -H/2 z = R sin(j.); onde j varia de 0 até nvc O método drawCone irá calcular os valores x, y e z dos vértices do cone padrão utilizando a estrutura mostrada na figura abaixo: void drawConeSimple(int nvc, float height, float radius) { double alfa = 2.0 * M_PI / nvc; // incremento do angulo em radianos int j; GLfloat y0 = -0.5 * height; // altura da camada da base GLfloat y1 = 0.5 * height ; // altura da camada do topo glBegin(GL_TRIANGLE_FAN); glVertex3f(0, y1, 0); // vértice do topo for (j = 0; j <= nvc; ++j) { // loop de vertice por camada double angulo = j * alfa; GLfloat x = radius * cos(angulo); GLfloat z = radius * sin(angulo); glVertex3f(x, y0, z); } glEnd(); } Comp Graf II - Camadas - R X Y Z Camada do topo Camada da base H Modelagem do Objeto Cilindro A representação por camadas de um cilindro utiliza um cilindro primitivo centrado na origem, onde as duas camadas de vértices situam-se sobre a circunferência de dois círculos de mesmo raio R. Comp Graf II - Camadas - Modelagem do Objeto Cilindro Para a circunferência de raio “R” da camada de base ou de topo do cilindro de altura H, existem “nvc” vértices. Para um vértice “j” qualquer da base tem-se: x = R cos(j.) y = -H/2 z = R sin(j.); onde j varia de 0 até nvc Para um vértice “j” qualquer do topo tem-se: x = R cos(j.) y = +H/2 z = R sin(j.); onde j varia de 0 até nvc O método drawCilindro irá calcular os valores x, y e z dos vértices do cone padrão utilizando a estrutura mostrada na figura abaixo: j. Eixo X eixoZ z x R void drawCylinder(int nvc, float height, float radius) { double alfa = 2.0 * M_PI / nvc; // incremento do angulo em radianos int j; GLfloat y0 = -0.5 * height; // altura da camada de base GLfloat y1 = 0.5 * height; // altura da camada de topo glBegin(GL_QUAD_STRIP); for (j = 0; j <= nvc; ++j) { // loop de vertice por camada double angulo = j * alfa; GLfloat x = radius * cos(angulo); GLfloat z = radius * sin(angulo); glNormal3f(x, 0.0, z); glVertex3f(x, y0, z); glVertex3f(x, y1, z); } glEnd(); } Modelagem do Objeto Esfera • A representação por camadas de uma esfera pode ser feita através da matriz com parâmetros de camadas e vértices por camada: Comp Graf II - Camadas - esferaObj(36, 36, 2) Coordenadas (x, y e z) Vértices por camada Camadas X Y Z Comp Graf II - Camadas - Modelando a esfera • Considere uma esfera centrada na origem como um objeto default e construída segundo o modelo B-Rep. Esta esfera pode ser vista como composta de vários círculos: X Y Z Comp Graf II - Camadas - Modelando a esfera • Os círculos horizontais fatiam um círculo vertical em seções cujo perfil é: • O processo, portanto, eqüivale a dividir o círculo em várias partes iguais. Como o círculo possui 360º, se for dividido em “n” partes, cada parte terá um setor de: = 360º / n X Y X Y Comp Graf II - Camadas - Modelando a esfera • Considerando o raio da esfera igual a “R”, para um vértice qualquer localizado no ângulo k. situado na circunferência de raio igual a rx = R cos (k. ), a coordenada y seria a mesma e igual a: y = R sin (k. ) k. rx y X Y R m. X Z z x rx• Para a circunferência de raio “rx” existem “n” vértices. • Para o vértice “m” tem-se: x = rx cos(m.) z = rx sin(m.) Comp Graf II - Camadas - Incluindo método para Calculo dos pontos da esfera (exemplo VB6) Public Sub CalcEsfera() Const Pi As Double = 3.141592 Dim nc As Integer Dim nvc As Integer glbR = 1# nvc = Objeto(glbNextObj).nVCamadas nc = nvc alfa = (2 * Pi) / nc For i = 0 To nvc esferaObj(0, i, 0) = 0 esferaObj(0, i, 1) = glbR esferaObj(0, i, 2) = 0 Next i angulo = Pi / 2 For k = 1 To nc angulo = angulo - alfa rx = glbR * Cos(angulo) yc = glbR * Sin(angulo) For i = 0 To nvc esferaObj(k, i, 0) = rx * Cos(i * alfa) esferaObj(k, i, 1) = yc esferaObj(k, i, 2) = rx * Sin(i * alfa) Next i Next k End Sub k. rx y X Y R m. X Z z x rx Comp Graf II - Camadas - Exercício: Desenvolver o método Esfera em linguagem C e Open GL k. rx y X Y R m. X Z z x rx
Compartilhar