Manual de Apoio 2010
Manual de Apoio 2010
Manual de Apoio 2010
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Figura 5.20: Vector Normal movido para a OrigemNo exemplo, a função glNormal3f especifica o vector normal à superfície <strong>de</strong>finida pelos três vectoressubsequentes (neste caso um triângulo), na direcção do eixo-y negativo. Os vectores são <strong>de</strong>senhados emcounterclock-wise quando vistos do lado para que aponta o vector, <strong>de</strong> forma a manter o winding coerente.Vectores Normais UnitáriosTodos os vectores normais no OpenGL, <strong>de</strong>vem ser vectores unitários (<strong>de</strong> comprimento 1). Po<strong>de</strong>mos converterqualquer vector para um vector unitário obtendo o seu cumprimento e dividindo as componentes nos 3 eixos poresse cumprimento:x 1 =Length = √ x 2 + y 2 + z 2xLength , y y1 =Length , z z1 =LengthV 1 = (x 1 , y 1 , z 1 )O processo <strong>de</strong> tornar um vector unitários <strong>de</strong>nomina-se <strong>de</strong> normalização <strong>de</strong> vectores.A fim <strong>de</strong> evitar os cálculos, po<strong>de</strong>mos dizer ao OpenGL para converter automaticamente as nossas normaispara vectores unitários, activando a flag:glEnable ( GL2 . GL_NORMALIZE );No entanto, isto tem um custo no <strong>de</strong>sempenho. A melhor solução será efectuar o pré-cálculo dos vectoresnormais já normalizados.Sem mais configuração, a transformação efectuada pela função glScale, altera, junto com a geometria, otamanho das normais <strong>de</strong>finidas para os nossos polígonos. Para evitar esse efeito po<strong>de</strong>mos activar a flag:glEnable ( GL2 . GL_RESCALE_NORMALS );Junto com este documento, foi criado um projecto do eclipse contendo classes <strong>de</strong> auxílio à programaçãoOpenGL. Uma <strong>de</strong>ssas classes é a classe GlTools que contém um conjunto <strong>de</strong> funções úteis. Uma <strong>de</strong>ssas funções éa função:GLVector GlTools . normalizeVector ( GLVector v);Esta função recebe como argumento um vector (classe GLVector) e <strong>de</strong>volve uma instância normalizada dovector fornecido.51