25
CG com CG com CG com CG com CG com CG com CG com CG com OpenGL OpenGL OpenGL OpenGL OpenGL OpenGL OpenGL OpenGL Paulo Gandra de Sousa Paulo Gandra de Sousa Paulo Gandra de Sousa Paulo Gandra de Sousa [email protected] Sistemas Gr Sistemas Gr Sistemas Gr Sistemas Grá á áficos e Interactivos ficos e Interactivos ficos e Interactivos ficos e Interactivos Instituto Superior de Engenharia do Porto

CG com OpenGL - Departamento de Engenharia Informáticapsousa/aulas/SGRAI/SGRAI-2006... · Instituto Superior de Engenharia do Porto Paulo Gandra de Sousa [email protected]

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: CG com OpenGL - Departamento de Engenharia Informáticapsousa/aulas/SGRAI/SGRAI-2006... · Instituto Superior de Engenharia do Porto Paulo Gandra de Sousa psousa@dei.isep.ipp.pt

CG com CG com CG com CG com CG com CG com CG com CG com OpenGLOpenGLOpenGLOpenGLOpenGLOpenGLOpenGLOpenGL

Paulo Gandra de SousaPaulo Gandra de SousaPaulo Gandra de SousaPaulo Gandra de [email protected]

Sistemas GrSistemas GrSistemas GrSistemas Grááááficos e Interactivosficos e Interactivosficos e Interactivosficos e InteractivosInstituto Superior de Engenharia do Porto

Page 2: CG com OpenGL - Departamento de Engenharia Informáticapsousa/aulas/SGRAI/SGRAI-2006... · Instituto Superior de Engenharia do Porto Paulo Gandra de Sousa psousa@dei.isep.ipp.pt

1

ISEP/IPP

ConteConteConteConteConteConteConteConteúúúúúúúúdodododododododo

� O que é?

� Exemplos

� API do OpenGL

� demos

� Desenho, iluminação, projecções,

transformações, ...

� Exemplos de aplicações

Page 3: CG com OpenGL - Departamento de Engenharia Informáticapsousa/aulas/SGRAI/SGRAI-2006... · Instituto Superior de Engenharia do Porto Paulo Gandra de Sousa psousa@dei.isep.ipp.pt

IntroduIntroduIntroduIntroduIntroduIntroduIntroduIntroduçççççççção ao ão ao ão ao ão ao ão ao ão ao ão ao ão ao

OpenGLOpenGLOpenGLOpenGLOpenGLOpenGLOpenGLOpenGL

Aula 1Aula 1Aula 1Aula 1

Sistemas GrSistemas GrSistemas GrSistemas Grááááficos e Interactivosficos e Interactivosficos e Interactivosficos e InteractivosInstituto Superior de Engenharia do Porto

Paulo Gandra de [email protected]

Page 4: CG com OpenGL - Departamento de Engenharia Informáticapsousa/aulas/SGRAI/SGRAI-2006... · Instituto Superior de Engenharia do Porto Paulo Gandra de Sousa psousa@dei.isep.ipp.pt

3

ISEP/IPP

ConteConteConteConteConteConteConteConteúúúúúúúúdodododododododo

� Introdução

� Tipos de dados

� Nomenclatura de funções

� Esqueleto de programa� Actividades básicas

� Esqueleto de programa usando GLUT� Inicialização

� Callback de desenho

� Exemplos de aplicações

Page 5: CG com OpenGL - Departamento de Engenharia Informáticapsousa/aulas/SGRAI/SGRAI-2006... · Instituto Superior de Engenharia do Porto Paulo Gandra de Sousa psousa@dei.isep.ipp.pt

4

ISEP/IPP

OpenGLOpenGLOpenGLOpenGLOpenGLOpenGLOpenGLOpenGL

� Open Graphics Library

� API genérica de gráficos 2D/3D

� Apenas contém primitivas simples

� Modelos complexos construídos com base nestas primitivas

� Independente do sistema operativo

� Independente do sistema gestor de

janelas

Page 6: CG com OpenGL - Departamento de Engenharia Informáticapsousa/aulas/SGRAI/SGRAI-2006... · Instituto Superior de Engenharia do Porto Paulo Gandra de Sousa psousa@dei.isep.ipp.pt

5

ISEP/IPP

Uma cena: Uma cena: Uma cena: Uma cena: Uma cena: Uma cena: Uma cena: Uma cena: wireframewireframewireframewireframewireframewireframewireframewireframe

Page 7: CG com OpenGL - Departamento de Engenharia Informáticapsousa/aulas/SGRAI/SGRAI-2006... · Instituto Superior de Engenharia do Porto Paulo Gandra de Sousa psousa@dei.isep.ipp.pt

6

ISEP/IPP

Sombras e iluminaSombras e iluminaSombras e iluminaSombras e iluminaSombras e iluminaSombras e iluminaSombras e iluminaSombras e iluminaççççççççãoãoãoãoãoãoãoão

Page 8: CG com OpenGL - Departamento de Engenharia Informáticapsousa/aulas/SGRAI/SGRAI-2006... · Instituto Superior de Engenharia do Porto Paulo Gandra de Sousa psousa@dei.isep.ipp.pt

7

ISEP/IPP

Pormenor Pormenor Pormenor Pormenor Pormenor Pormenor Pormenor Pormenor

Page 9: CG com OpenGL - Departamento de Engenharia Informáticapsousa/aulas/SGRAI/SGRAI-2006... · Instituto Superior de Engenharia do Porto Paulo Gandra de Sousa psousa@dei.isep.ipp.pt

8

ISEP/IPP

Efeitos ambienteEfeitos ambienteEfeitos ambienteEfeitos ambienteEfeitos ambienteEfeitos ambienteEfeitos ambienteEfeitos ambiente

Page 10: CG com OpenGL - Departamento de Engenharia Informáticapsousa/aulas/SGRAI/SGRAI-2006... · Instituto Superior de Engenharia do Porto Paulo Gandra de Sousa psousa@dei.isep.ipp.pt

9

ISEP/IPP

““““““““Bits and bytesBits and bytesBits and bytesBits and bytesBits and bytesBits and bytesBits and bytesBits and bytes””””””””

� OpenGL� GLU – OpenGL Utility library

� GLUT – OpenGL Utility Toolkit

� GLX / WGL – OpenGL for X-Windows/OpenGLfor Windows

� Java bindings� GlAx – OpenGL ActiveX

� CsGL – OpenGL for C#

Page 11: CG com OpenGL - Departamento de Engenharia Informáticapsousa/aulas/SGRAI/SGRAI-2006... · Instituto Superior de Engenharia do Porto Paulo Gandra de Sousa psousa@dei.isep.ipp.pt

10

ISEP/IPP

Tipos de dadosTipos de dadosTipos de dadosTipos de dadosTipos de dadosTipos de dadosTipos de dadosTipos de dados

GLuint, GLenum, GLbitfieldunsigned int or unsigned long32-bit unsigned integerui

GLushortunsigned short16-bit unsigned integerus

GLubyte, GLbooleanunsigned char8-bit unsigned integerub

GLdouble, GLclampddouble64-bit floating-pointd

GLfloat, GLclampffloat32-bit floating-pointf

GLint, GLsizeiint or long32-bit integeri

GLshortshort16-bit integers

GLbytesigned char8-bit integerb

OpenGL Type DefinitionTypical Corresponding C-Language Type

Data TypeSuffix

Page 12: CG com OpenGL - Departamento de Engenharia Informáticapsousa/aulas/SGRAI/SGRAI-2006... · Instituto Superior de Engenharia do Porto Paulo Gandra de Sousa psousa@dei.isep.ipp.pt

11

ISEP/IPP

Nomenclatura de funNomenclatura de funNomenclatura de funNomenclatura de funNomenclatura de funNomenclatura de funNomenclatura de funNomenclatura de funççççççççõesõesõesõesõesõesõesões

� Prefixos no nome das funções� gl� glu� glut

� { gl | glu | glut } FUNC [{ 1 | 2 | 3 | 4 } TYPE [ v ]]� TYPE := b | d | f | i | s | ub | ui | us

� Exemplos:� glColor3b, glColor3f, glColor4d, glColor4dv� glLoadMatrixd, glLoadMatrixf� gluLookAt� glutSwapBuffers

Page 13: CG com OpenGL - Departamento de Engenharia Informáticapsousa/aulas/SGRAI/SGRAI-2006... · Instituto Superior de Engenharia do Porto Paulo Gandra de Sousa psousa@dei.isep.ipp.pt

12

ISEP/IPP

Esqueleto de programaEsqueleto de programaEsqueleto de programaEsqueleto de programaEsqueleto de programaEsqueleto de programaEsqueleto de programaEsqueleto de programa

#include <whateverYouNeed.h>

main()

{

InitializeAWindowPlease();

glClearColor (0.0, 0.0, 0.0, 0.0);

glClear (GL_COLOR_BUFFER_BIT);

glMatrixMode(GL_PROJECTION)

glLoadIdentity();

glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);

glColor3f (1.0, 1.0, 1.0);

glBegin(GL_POLYGON);

glVertex3f (0.25, 0.25, 0.0);

glVertex3f (0.75, 0.25, 0.0);

glVertex3f (0.75, 0.75, 0.0);

glVertex3f (0.25, 0.75, 0.0);

glEnd();

glFlush();

UpdateTheWindowAndCheckForEvents();

}

Limpar ecrã

Definir sist.

coordenadas

desenhar

Page 14: CG com OpenGL - Departamento de Engenharia Informáticapsousa/aulas/SGRAI/SGRAI-2006... · Instituto Superior de Engenharia do Porto Paulo Gandra de Sousa psousa@dei.isep.ipp.pt

13

ISEP/IPP

Limpar ecrãLimpar ecrãLimpar ecrãLimpar ecrãLimpar ecrãLimpar ecrãLimpar ecrãLimpar ecrã

� glClearColor(red, green, blue,

alpha)

� Define qual a cor utilizada como “fundo” para limpar o ecrã

� glClear(GL_COLOR_BUFFER_BIT)

� Limpa um ou mais buffers do OpenGL

� GL_COLOR_BUFFER_BIT = buffer de cor

� Será utilizado futuramente para limpar o

buffer de profundidade em 3D

Page 15: CG com OpenGL - Departamento de Engenharia Informáticapsousa/aulas/SGRAI/SGRAI-2006... · Instituto Superior de Engenharia do Porto Paulo Gandra de Sousa psousa@dei.isep.ipp.pt

14

ISEP/IPP

Sistema de coordenadasSistema de coordenadasSistema de coordenadasSistema de coordenadasSistema de coordenadasSistema de coordenadasSistema de coordenadasSistema de coordenadas

� glViewport(x, y, width, height)

� Define a área de desenho do OpenGL dentro da área total da janela

� Por omissão ocupa toda a janela

� glMatrixMode(GL_PROJECTION)

� glLoadIdentity()

� Limpa a matriz de projecção

� glOrtho(left, right, bottom, top, zNear, zFar)

� gluOrtho2D(left, right, bottom, top)

� Define uma projecção ortográfica sobre a cena modelada, criando um sistema de coordenadas

Page 16: CG com OpenGL - Departamento de Engenharia Informáticapsousa/aulas/SGRAI/SGRAI-2006... · Instituto Superior de Engenharia do Porto Paulo Gandra de Sousa psousa@dei.isep.ipp.pt

15

ISEP/IPP

Sistema de coordenadasSistema de coordenadasSistema de coordenadasSistema de coordenadasSistema de coordenadasSistema de coordenadasSistema de coordenadasSistema de coordenadas

� gluOrtho2D(0.0, 50.0, 0.0, 50.0)

Page 17: CG com OpenGL - Departamento de Engenharia Informáticapsousa/aulas/SGRAI/SGRAI-2006... · Instituto Superior de Engenharia do Porto Paulo Gandra de Sousa psousa@dei.isep.ipp.pt

16

ISEP/IPP

CorCorCorCorCorCorCorCor

� RGBA� glColor{3|4}� red + green + blue� Alfa : usado para blending e transparências (falaremos futuramente)� [ 0.0 , 1.0 ]

� Index (color map)� Utiliza color map do sistema gestor de janelas� Um índice para o mapa em vez dos componentes de cor

� glColor3f(0.0, 0.0, 0.0); /* black */

� glColor3f(1.0, 0.0, 0.0); /* red */� glColor3f(0.0, 1.0, 0.0); /* green */

� glColor3f(1.0, 1.0, 0.0); /* yellow */� glColor3f(0.0, 0.0, 1.0); /* blue */

� glColor3f(1.0, 0.0, 1.0); /* magenta */� glColor3f(0.0, 1.0, 1.0); /* cyan */

� glColor3f(1.0, 1.0, 1.0); /* white */

Page 18: CG com OpenGL - Departamento de Engenharia Informáticapsousa/aulas/SGRAI/SGRAI-2006... · Instituto Superior de Engenharia do Porto Paulo Gandra de Sousa psousa@dei.isep.ipp.pt

17

ISEP/IPP

DesenharDesenharDesenharDesenharDesenharDesenharDesenharDesenhar

� glBegin(mode) / glEnd

� Define um objecto da cena

� Neste caso um polígono (GL_POLYGON)

� glVertex

� Define um vértice do objecto a desenhar

� glFlush

� Força o pipeline do OpenGL a terminar o

processamento e desenhar os pixels no ecrã

Page 19: CG com OpenGL - Departamento de Engenharia Informáticapsousa/aulas/SGRAI/SGRAI-2006... · Instituto Superior de Engenharia do Porto Paulo Gandra de Sousa psousa@dei.isep.ipp.pt

18

ISEP/IPP

OpenGLOpenGLOpenGLOpenGLOpenGLOpenGLOpenGLOpenGL e o sistema gestor e o sistema gestor e o sistema gestor e o sistema gestor e o sistema gestor e o sistema gestor e o sistema gestor e o sistema gestor

de janelasde janelasde janelasde janelasde janelasde janelasde janelasde janelas

� OpenGL é independente do sistema

gestor de janelas

� Utilizar a API do sistema gestor de janelas

� Ou

� Utilizar GLUT

Page 20: CG com OpenGL - Departamento de Engenharia Informáticapsousa/aulas/SGRAI/SGRAI-2006... · Instituto Superior de Engenharia do Porto Paulo Gandra de Sousa psousa@dei.isep.ipp.pt

19

ISEP/IPP

Esqueleto programa GLUTEsqueleto programa GLUTEsqueleto programa GLUTEsqueleto programa GLUTEsqueleto programa GLUTEsqueleto programa GLUTEsqueleto programa GLUTEsqueleto programa GLUT

#include <GL\glut.h>

void init();

void display();

void main(int argc, char** argv)

{

glutInit(&argc, argv);

glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);

glutInitWindowSize (250, 250);

glutInitWindowPosition (100, 100);

glutCreateWindow ("hello");

init ();

glutDisplayFunc(display);

glutMainLoop();

}

Page 21: CG com OpenGL - Departamento de Engenharia Informáticapsousa/aulas/SGRAI/SGRAI-2006... · Instituto Superior de Engenharia do Porto Paulo Gandra de Sousa psousa@dei.isep.ipp.pt

20

ISEP/IPP

Esqueleto programa GLUTEsqueleto programa GLUTEsqueleto programa GLUTEsqueleto programa GLUTEsqueleto programa GLUTEsqueleto programa GLUTEsqueleto programa GLUTEsqueleto programa GLUT

void init()

{

glClearColor (0.0, 0.0, 0.0, 0.0);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);

}

void display()

{

glClear (GL_COLOR_BUFFER_BIT);

glColor3f (1.0, 1.0, 1.0);

glBegin(GL_POLYGON);

glVertex3f (0.25, 0.25, 0.0);

glVertex3f (0.75, 0.25, 0.0);

glVertex3f (0.75, 0.75, 0.0);

glVertex3f (0.25, 0.75, 0.0);

glEnd();

glFlush ();

}

Page 22: CG com OpenGL - Departamento de Engenharia Informáticapsousa/aulas/SGRAI/SGRAI-2006... · Instituto Superior de Engenharia do Porto Paulo Gandra de Sousa psousa@dei.isep.ipp.pt

21

ISEP/IPP

InicializaInicializaInicializaInicializaInicializaInicializaInicializaInicializaççççççççãoãoãoãoãoãoãoão

� glutInit(argc, argv)� Inicializa a biblioteca GLUT

� glutInitDisplayMode(mode)� Indica qual o modo de funcionamento a usar� GLUT_SINGLE

� GLUT_RGB

� glutInitWindowSize(width, height)� Indica tamanho inicial da janela

� glutInitWindowPos(x, y)� Indica posição inicial da janela

� glutCreateWindow(titulo)� Cria a janela da aplicação

Page 23: CG com OpenGL - Departamento de Engenharia Informáticapsousa/aulas/SGRAI/SGRAI-2006... · Instituto Superior de Engenharia do Porto Paulo Gandra de Sousa psousa@dei.isep.ipp.pt

22

ISEP/IPP

CallbackCallbackCallbackCallbackCallbackCallbackCallbackCallback e ciclo principale ciclo principale ciclo principale ciclo principale ciclo principale ciclo principale ciclo principale ciclo principal

� glutDisplayFunc(callback)

� Indica qual a função a invocar sempre que for necessário desenhar o conteúdo da

janela

� glutMainLoop

� Processa os eventos do sistema gestor de janelas (rato, teclado, ...) e invoca as callbacks registadas

Page 24: CG com OpenGL - Departamento de Engenharia Informáticapsousa/aulas/SGRAI/SGRAI-2006... · Instituto Superior de Engenharia do Porto Paulo Gandra de Sousa psousa@dei.isep.ipp.pt

23

ISEP/IPP

DemoDemoDemoDemoDemoDemoDemoDemo

Page 25: CG com OpenGL - Departamento de Engenharia Informáticapsousa/aulas/SGRAI/SGRAI-2006... · Instituto Superior de Engenharia do Porto Paulo Gandra de Sousa psousa@dei.isep.ipp.pt

24

ISEP/IPP

Exemplos Exemplos Exemplos Exemplos Exemplos Exemplos Exemplos Exemplos