Manual de Apoio 2010
Manual de Apoio 2010
Manual de Apoio 2010
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Da mesma forma que <strong>de</strong>ifinimos a função <strong>de</strong> blending para os valores RGBA source e <strong>de</strong>stination utilizandoglBlendFunc, po<strong>de</strong>mos utilizar a função glBlendFuncSeparate para especificar funções diferentes também parao cálculo dos factores alpha:glBlendFuncSeparate ( int srcRGB , int dstRGB , int srcAlpha , int dstAlpha );Sendo o srcRGB a função para o source color, o dstRGB a função para o <strong>de</strong>stination color. Os valoressrcAlpha e dstAlpha permitem <strong>de</strong>finir as funções para o source e <strong>de</strong>stination alpha respectivamente.6.2 AntialiasingNa maior parte dos casos, fragmentos individuais da nossa ren<strong>de</strong>rização, consistem <strong>de</strong> pixeis no ecrã. Estespixeis são quadrados (ou quase), po<strong>de</strong>ndo quebrar a sensação <strong>de</strong> realismo. O OpenGL permite <strong>de</strong>finir flags quemisturam as bordas <strong>de</strong> pontos, linhas e polígonos com a vizinhança, suavizando os contornos dos objectos.Para tal, é preciso activar primeiro o blending e <strong>de</strong>finir as funções para o source e <strong>de</strong>stination color. Depoispo<strong>de</strong>mos activar as flags: GL POINT SMOOTH (pontos), GL LINE SMOOTH (linhas) e GL POLYGON SMOOTH (polígonos).A Figura 6.4 mostra dois circulos, sendo o <strong>de</strong> fora <strong>de</strong>senhado sem antialiasing e o <strong>de</strong> <strong>de</strong>ntro <strong>de</strong>senhado comantialiasing.(a) Circulos Com/Sem Antialiasing(b) ZoomFigura 6.4: AntialiasingO código para conseguir o resultado da Figura 6.4(a) po<strong>de</strong>ria ser:gl. glClear ( GL2 . GL_COLOR_BUFFER_BIT );float x, y;gl. glLineWidth (5f);// Desenhar o Primeiro Circulo Sem Antialiasinggl. glBegin ( GL2 . GL_LINE_LOOP );for ( float a =0; a < 2f * GlTools . GL_PI ; a += .1f) {x = ( float ) Math . sin (a) / 2f;y = ( float ) Math . cos (a) / 2f;gl. glVertex3f (x, y, 0);}gl. glEnd ();// Activar o Blending / Antialiasing e Desenhar o Circulo <strong>de</strong> Dentrogl. glEnable ( GL2 . GL_BLEND );gl. glBlendFunc ( GL2 . GL_SRC_ALPHA , GL2 . GL_ONE_MINUS_SRC_ALPHA );// Suavizar as linhasgl. glEnable ( GL2 . GL_LINE_SMOOTH );62