200 likes | 301 Views
Computação Gráfica. Introdução ao OpenGL. OpenGL. Open Graphic Library Biblioteca de rotinas gráficas e modelagens bidimensional (2d) e tridimensional (3d) extremamente portável e rápida
E N D
Computação Gráfica Introdução ao OpenGL
OpenGL • Open GraphicLibrary • Biblioteca de rotinas gráficas e modelagens bidimensional (2d) e tridimensional (3d) extremamente portável e rápida • Incorpora diversos algoritmos otimizados para desenho de primitivas gráficas, mapeamento de texturas e efeitos especiais • Gerenciado por um consórcio formado pelas principais empresas da área • 3Dlabs, Apple Computer, NVIDIA, SGI e SUN • Freqüentes revisões proporciona a incorporação das mais recentes técnicas e da evolução do hardware
OpenGL • Usado na construção de ferramentas CAD, programas de modelagem, jogos, etc. • Funcionalidades • Desenho de primitivas gráficas • Iluminação • Coloração • Mapeamento de texturas • Transparências • Animações
OpenGL • Restrições • As funcionalidades fornecidas pelo OpenGL são de baixo nível • Não fornecem funcionalidades de gerenciamento de janelas • Solução • Extensão da OpenGL através de novas bibliotecas • GLU (OpenGLUtilityLibrary) • Matrizes de projeção • Orientação da visualização • Desenho de superfícies quádricas • GLUT (OpenGLUtility Toolkit) • Criação de janelas e menus • Gerenciamento de janelas e eventos
OpenGL – Padronização de nomes <PrefixoBiblioteca> <ComandoRaiz> <ContadorArgumentosOpc> <TipoArgumentosOp> void glColor3f(Glfloat red, Glfloat green, Glfloat blue) • Os duas ultimas partes do padrão são opcionais • Funções das bibliotecas Glu e GLUT não as utilizam
OpenGL – Primeiros Passos #include <stdlib.h> #include <GL/openglut.h> int main(void) { glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); glutInitWindowSize(400,400); glutCreateWindow("Primeiro programa OpenGL"); //Inicializa(); //glutDisplayFunc(Desenha); //glutKeyboardFunc(Teclado); glutMainLoop(); return 0; }
void Desenha(void) { glClearColor(1,1,1,0); glClear(GL_COLOR_BUFFER_BIT); glColor3f(1,0,0); glBegin(GL_TRIANGLES); glVertex3f(-0.5, -0.5, 0); glVertex3f(0.0, 0.5, 0); glVertex3f(0.5, -0.5, 0); glEnd(); glFlush(); } void Teclado(unsigned char key, int x, int y) { if (key == 27) exit(0); }
void Inicializa(void) { glMatrixMode(GL_PROJECTION); gluOrtho2D(-1.0,1.0,-1.0,1.0); glMatrixMode(GL_MODELVIEW); }
Tratamento de eventos • void glutReshapeFunc(AlteraTamanhoTela) • void <nomeFunção>(int largura, int altura); • void glutSpecialFunc(TeclasEspeciais) • void <nomeFunção>(int tecla, int x, int y); • void glutMouseFunc(GerenciaMouse) • void <nomeFunção>(int botao, int estado, int x, int y)
void glutMotionFunc (MoveMouseBotãoPressionado) • void <nomeFunção>(int x, int y); • void glutPassiveMotionFunc(MoveMouse) • void <nomeFunção>(int x, int y); • void glutIdleFunc(Idle) • void <nomeFunção>(void)
Desenhos Bidmencionais #include <math.h> float ang; glBegin(GL_POINTS); for(ang=0;ang<2*M_PI;ang+=M_PI/7.0) glVertex2f(20*cos(ang), 20*sin(ang)); glEnd();
Criação de menus • int glutCreateMenu(void (*func) (int value)) • func – função responsável pelo tratamento do menu • retorna um inteiro que identifica o menu criado • void glutAddMenuEntry(char *name, int value) • void glutAddSubMenu(char *name, int menu) • name – nome do sub-menu • menu – valor inteiro correspondente ao menu ao qual o sub-menu deve ser adcionado • void glutAttachMenu(int button) • Associa um botão ao menu • void glutDetachMenu(int button) • Desassocia o menu
Alterando Propriedades dos Desenhos • void glPointSize(GLfloat size) • void glLineWidth(Glfloat width) • Altera a espessura da linha • glEnable(GL_LINE_STIPPLE) • Habilita a variável de estado que armazena o estilo de linha • void glLineStipple(GLint factor, Glushort pattern) • Factor – valor entre 1 e 256 que altera o número de pixels do tracejado • Pattern – valor de 16 bits utilizado p/ especificar o tipo de tracejado
Exibição de Textos • Utiliza a GLUT para exibição de textos na tela gráfica • Dois tipos de fontes de caracteres • Segmentos de reta (STROKE) • Mais flexíveis (escalável e rotacionável) • Imagens (BITMAP) • Mais rápidas • As funções de texto presentes na GLUT são básicas, para textos com melhor qualidades devem ser utilizadas bibliotecas específicas, como a FTGL (http://homepages.paradise.net/henryj/code)
void glutBitmapCharacter(void *font, int character) • void glRasterPos2f, void glRasterPos2i, void glRasterPos2d • Modifica a posição matricial corrente utilizada para desenhar o texto
void glutStrokeCharacter(void *font, int character) • Exibe caracteres formados por segmentos de reta • GLUT_STROKE_ROMAN e GLUT_STROKE_MONO_ROMAN • Funções que afetam as linhas também afetam as letras escritas com este método
void DesenhaTexto(void *font, char *string){ while(*string) glutBitmapCharacter(*font, *string++); } *obs: Utilizar a função glRasterPos2f(int x,int y) para posicionar o texto