28
Realidade Virtual Aula 6 Remis Balaniuk

Realidade Virtual Aula 6 Remis Balaniuk. Conteúdo Nessa aula estudaremos como definir propriedades das luzes e dos materiais. O render gráfico das cores

Embed Size (px)

Citation preview

Page 1: Realidade Virtual Aula 6 Remis Balaniuk. Conteúdo Nessa aula estudaremos como definir propriedades das luzes e dos materiais. O render gráfico das cores

Realidade VirtualAula 6

Remis Balaniuk

Page 2: Realidade Virtual Aula 6 Remis Balaniuk. Conteúdo Nessa aula estudaremos como definir propriedades das luzes e dos materiais. O render gráfico das cores

Conteúdo

• Nessa aula estudaremos como definir propriedades das luzes e dos materiais.

• O render gráfico das cores e outros efeitos nos objetos depende da combinação de características das fontes de luz e dos materiais que compõem os objetos.

Page 3: Realidade Virtual Aula 6 Remis Balaniuk. Conteúdo Nessa aula estudaremos como definir propriedades das luzes e dos materiais. O render gráfico das cores

Cores

• Basearemos nosso estudo no modelo de cores RGB (red green blue), que define a proporção entre as 3 cores básicas para definir a cor desejada.

• Cores no OpenGL e no Chai são definidos por 4 valores numéricos reais, RGBA, sendo que o último, chamado Alpha, controla a opacidade do objeto.

Page 4: Realidade Virtual Aula 6 Remis Balaniuk. Conteúdo Nessa aula estudaremos como definir propriedades das luzes e dos materiais. O render gráfico das cores

Luzes

• Como visto na aula 3, para que a cena virtual seja visível é necessário que pelo seja definida menos uma fonte de luz.

• Uma luz é definida por uma série de parâmetros:– Ser posicional ou direcional – Posição– Direção– Cores:

• Ambiente• Difusa• Refletida• Emitida

Page 5: Realidade Virtual Aula 6 Remis Balaniuk. Conteúdo Nessa aula estudaremos como definir propriedades das luzes e dos materiais. O render gráfico das cores

Luzes

• Definindo o tipo: posicional ou direcional– Uma luz pode ser definida como estando numa

posição no infinito ou próxima à cena.– O efeito de ter uma luz no infinito é que seus raios

são considerados como sendo paralelos.– Esse tipo de luz é chamado de “direcional”, uma vez

que só importa a direção de onde vem. – Equivalente à luz do sol.– Uma luz próxima à cena é chamada de “posicional”.– Sua posição e direção fazem diferença no efeito de

iluminação.– Equivalente à luz de uma lâmpada.

Page 6: Realidade Virtual Aula 6 Remis Balaniuk. Conteúdo Nessa aula estudaremos como definir propriedades das luzes e dos materiais. O render gráfico das cores

Luzes

• No Chai o tipo de fonte de luz é definido pelo método:

//! Set this light to be purely directional (true) or purely positional (false)

void setDirectionalLight(bool a_directionalLight)

{

m_directionalLight = a_directionalLight;

}

Page 7: Realidade Virtual Aula 6 Remis Balaniuk. Conteúdo Nessa aula estudaremos como definir propriedades das luzes e dos materiais. O render gráfico das cores

Luzes

• Para a luz direcional só é necessário definir o parâmetro de posição:

light->setPos(cVector3d(2,1,1));

• Embora soe contraditório, é em função da posição que a direção de onde vem a luz é definida.

Page 8: Realidade Virtual Aula 6 Remis Balaniuk. Conteúdo Nessa aula estudaremos como definir propriedades das luzes e dos materiais. O render gráfico das cores

Luzes • Para a luz posicional é necessário definir além

posição, a direção da luz. light2->setPos(cVector3d(-2,1,1)); light2->setDirectionalLight(true);

light2->setDir(cVector3d(2,-1,-1));

• A luz direcional é como uma lanterna, que forma um cone de luz.

• Para definir o cone é preciso definir um ângulo:

light2->setCutOffAngle(30);

• um ângulo de 180 equivale a uma luzemitindo em todas as direções.

Page 9: Realidade Virtual Aula 6 Remis Balaniuk. Conteúdo Nessa aula estudaremos como definir propriedades das luzes e dos materiais. O render gráfico das cores

Luzes

• Para a luz posicional é possível ainda definir como o luz dentro do cone é distribuída.– A atenuação define como a intensidade da luz

diminui com a distância entre a fonte e os objetos iluminados.

– O fator de atenuação é calculado usando a seguinte equação:

• onde d é a distância entre a luz e o vértice, kc é a constante de atenuação, kl é a atenuação linear e kq a atenuação quadrática.

2

1

dkdkkatt

qlc

Page 10: Realidade Virtual Aula 6 Remis Balaniuk. Conteúdo Nessa aula estudaremos como definir propriedades das luzes e dos materiais. O render gráfico das cores

Luzes• No Chai a definição da atenuação se faz pelos métodos: //! Set my constant attenuation parameter void setAttConstant(const GLfloat& a_value)

{ m_attConstant = cClamp(a_value, 0.0f, 1.0f); } //! Read my constant attenuation parameter GLfloat getAttConstant() const { return

(m_attConstant); } //! Set my linear attenuation parameter void setAttLinear(const GLfloat& a_value)

{ m_attLinear = cClamp(a_value, 0.0f, 1.0f); } //! Read my linear attenuation parameter GLfloat getAttLinear() const { return (m_attLinear); } //! Set my quadratic attenuation parameter void setAttQuadratic(const GLfloat& a_value)

{ m_attQuadratic = cClamp(a_value, 0.0f, 1.0f); } //! Read my quadratic attenuation parameter GLfloat getAttQuadratic() const { return

(m_attQuadratic); }

Page 11: Realidade Virtual Aula 6 Remis Balaniuk. Conteúdo Nessa aula estudaremos como definir propriedades das luzes e dos materiais. O render gráfico das cores

Cores x Luzes

• O modelo de iluminação do OpenGL considera a luz emanada de uma cena como vindo de diferentes fontes:– Luz vinda diretamente de uma fonte (dirigida - diffuse)– Luz vinda do reflexo da luz em um objeto (refletida -

specular)– Luz vinda do reflexo em múltiplos objetos e

superfícies (ambiente - ambient)– Luz vinda da emissão de um objeto (emitida -

emissive)• Não adiciona luz à cena no OpenGL, só na intensidade da

cor do objeto.

Page 12: Realidade Virtual Aula 6 Remis Balaniuk. Conteúdo Nessa aula estudaremos como definir propriedades das luzes e dos materiais. O render gráfico das cores

Cores x Luzes

• O modelo de iluminação do OpenGL considera que tanto uma fontes de luz quanto o material de que é feito um objeto que a reflete podem ser descritos definindo a cor que cada tipo de luz (da classificação do slide anterior) tem.

Page 13: Realidade Virtual Aula 6 Remis Balaniuk. Conteúdo Nessa aula estudaremos como definir propriedades das luzes e dos materiais. O render gráfico das cores

Cores x Luzes

• No Chai tanto as luzes (cLight) como os materiais (cMaterial) possuem as propriedades abaixo:

//! Ambient light component. cColorf m_ambient; //! Diffuse light component. cColorf m_diffuse; //! Specular light component. cColorf m_specular;

Page 14: Realidade Virtual Aula 6 Remis Balaniuk. Conteúdo Nessa aula estudaremos como definir propriedades das luzes e dos materiais. O render gráfico das cores

Definindo cores das luzes

• A cor de uma luz indica qual frequência de luz ela emite.

• Por exemplo, um quarto iluminado por uma luz branca mas com paredes predominantemente vermelhas poderia ter a seguinte configuração de cores:

light->m_ambient.set( 1.0, 0.0, 0.0, 1.0); light-> m_diffuse.set( 1.0, 1.0, 1.0, 1.0);

• Normalmente a luz refletida (specular) e a luz dirigida (diffuse) tem a mesma cor

Page 15: Realidade Virtual Aula 6 Remis Balaniuk. Conteúdo Nessa aula estudaremos como definir propriedades das luzes e dos materiais. O render gráfico das cores

Materiais

• Definindo um material:– Classe cMaterial– Um objeto qualquer pode estar associado a um

material através da propriedade m_material: cMaterial material2;

bola2->m_material = material2;

– Configuração de um material:• Cores• Brilho• Fricção • Dureza

Page 16: Realidade Virtual Aula 6 Remis Balaniuk. Conteúdo Nessa aula estudaremos como definir propriedades das luzes e dos materiais. O render gráfico das cores

Materiais

• As cores são definidas como dito anteriormente: material2.m_ambient.set( 0.0, 0.9, 0.2, 1.0 ); material2.m_diffuse.set( 0.8, 0.6, 0.6, 1.0 ); material2.m_specular.set( 0.9, 0.9, 0.9, 1.0 );

• No caso de um objeto a definição dessas cores diz quais frequências de luz (cores) ele reflete.– Um objeto de cor vermelha ao receber luz branca absorve as

cores verde e azul e reflete a vermelha.– Se um objeto vermelho recebe só luz verde ele não reflete nada

(parece preto).– Os valores dos parâmetros RGB nesse caso não indicam uma

proporção. – Cada valor indica quanto de cada cor é refletida (1 para reflexão

total, 0 para nenhuma reflexão).– Assim a sequência (1,1,1) indica branco e (0.1,0.1,0.1) indica

um cinza escuro).

Page 17: Realidade Virtual Aula 6 Remis Balaniuk. Conteúdo Nessa aula estudaremos como definir propriedades das luzes e dos materiais. O render gráfico das cores

Materiais

• Normalmente num material as cores diffuse (dirigida) e ambient (ambiente) são idênticas (para ser coerente com relação à sua cor).

• Já a luz specular (refletida) é normalmente branca (para um material com brilho) ou cinza (para um material opaco).

Page 18: Realidade Virtual Aula 6 Remis Balaniuk. Conteúdo Nessa aula estudaremos como definir propriedades das luzes e dos materiais. O render gráfico das cores

Materiais x luzes

• Combinando cores das luzes e dos materiais para definir a aparência do objeto: – O OpenGL calcula a cor de um objeto combinando os

componentes specular, diffuse e ambient das luzes e do objeto.

– Por exemplo, se uma luz tem um componente da cor (LR,LG,LB) e o objeto tem o mesmo componente como (OR,OG,OB) o calculo da cor desse componente é obtido com (LR.OR, LG.OG, LB.OB).

Page 19: Realidade Virtual Aula 6 Remis Balaniuk. Conteúdo Nessa aula estudaremos como definir propriedades das luzes e dos materiais. O render gráfico das cores

Brilho

• O Chai permite a definição do brilho de um objeto usando o método abaixo:

//! Set shininess (the exponent used for specular lighting)

void setShininess(GLuint a_shininess);

//! Get shininess

GLuint getShininess() {

return (m_shininess);

}

Page 20: Realidade Virtual Aula 6 Remis Balaniuk. Conteúdo Nessa aula estudaremos como definir propriedades das luzes e dos materiais. O render gráfico das cores

Transparências

• É possível configurar um objeto para que pareça transparente.

• Isso se faz no OpenGL usando uma opção chamada “blending”, que ao mostrar um objeto na tela leva em consideração não só a superfície mais próxima da câmera, mas também as ocultas e também os objetos atrás dele.

• O controle no OpenGL da transparência se faz através do parâmetro alpha, que é o último da definição RGBA da cor.

Page 21: Realidade Virtual Aula 6 Remis Balaniuk. Conteúdo Nessa aula estudaremos como definir propriedades das luzes e dos materiais. O render gráfico das cores

Transparências no Chai

• No Chai um objeto transparente é definido usando os métodos abaixo:

cubo1->enableTransparency(true); cubo1->setTransparencyLevel(0.6);

• o método setTransparencyLevel define quanto o objeto é transparente, sendo 0 totalmente transparente e 1 totalmente opcao.

Page 22: Realidade Virtual Aula 6 Remis Balaniuk. Conteúdo Nessa aula estudaremos como definir propriedades das luzes e dos materiais. O render gráfico das cores

Texturas

• A textura permite que se cubra a superfície de um objeto 3D com um padrão ou imagem.

• Uma textura é normalmente uma imagem bidimensional.• Existem texturas tridimensionais, mas que só fazem

sentido para objetos cujo volume interno do objeto é preenchido por elementos geométricos (voxels).

• Nesses objetos é possível traçar

cortes e ver o seu interior, o que

num objeto cujo modelo se limita

à superfície externa resultaria num

objeto oco.

Page 23: Realidade Virtual Aula 6 Remis Balaniuk. Conteúdo Nessa aula estudaremos como definir propriedades das luzes e dos materiais. O render gráfico das cores

Texturas

• As texturas permitem enriquecer o realismo de uma cena e simplificar a sua modelagem geométrica.

• Uma parede de tijolos aparentes, por exemplo, precisaria de um grande número de polígonos para descrever cada tijolo, sendo que usando textura com a foto de uma parede é possível definir a parede com dois triângulos ter os detalhes dos tijolos como simples efeito gráfico.

• Esse recurso é largamente utilizado em aplicações gráficas para criar o efeito de paisagens e outros foto-realismos.

• Reflexos do ambiente em objetos brilhantes também são conseguidos por texturas.

Page 24: Realidade Virtual Aula 6 Remis Balaniuk. Conteúdo Nessa aula estudaremos como definir propriedades das luzes e dos materiais. O render gráfico das cores

Texturas• A textura é normalmente um bitmap como da figura ao

lado.• Ela pode ser “colada” à superfície do objeto ou combinada

com as propriedades do material associado ao objeto.• A definição de texturas bidimensionais exige um trabalho

quase manual de definir para cada vértice da superfície poligonal onde esse se encontra dentro do bitmap.

x

y

• Para criar uma textura realista é preciso buscar uma continuidade do padrão de um triângulo ao próximo.• Isso exige um cálculo cuidadoso do posicionamento dos vértices dentro do bitmap, principalmente nos cantos e partes não planas do objeto.

Page 25: Realidade Virtual Aula 6 Remis Balaniuk. Conteúdo Nessa aula estudaremos como definir propriedades das luzes e dos materiais. O render gráfico das cores

Texturas no Chai

• O Chai possui a classe cTexture2D que permite a definição de texturas bidimensionais.

cTexture2D *textura = new cTexture2D();

bool sim=textura->loadFromFile("teste.bmp");

object->setTexture(textura);

• o método “loadFromFile” permite a carga do bitmap no objeto textura.

• O método setTexture permite associar um objeto cTexture2D a um cMesh.

Page 26: Realidade Virtual Aula 6 Remis Balaniuk. Conteúdo Nessa aula estudaremos como definir propriedades das luzes e dos materiais. O render gráfico das cores

Texturas no Chai

• A definição das coordenadas dos vértices dentro da textura se faz pelo método setTexCoord da classe cVertex:

int p1 = object->newVertex(-0.5*largura+dx, -

0.5*largura+dy, 0.5*largura+dz);

object->getVertex(p1)->setTexCoord(0,0);

• As coordenadas na textura devem variar entre 0 e 1, sendo (0,0) o extremo superior esquerdo do bitmap e (1,1) o extremos inferior direito.

• Note que as coordenadas são relativas ao bitmap e não absolutas.

• Dessa forma não importa o tamanho do bitmap carregado.

Page 27: Realidade Virtual Aula 6 Remis Balaniuk. Conteúdo Nessa aula estudaremos como definir propriedades das luzes e dos materiais. O render gráfico das cores

Texturas no Chai

• Se tiver sido definido a cor dos vértices ou o material do objeto, a textura é combinada a essas propriedades para gerar a imagem.

Page 28: Realidade Virtual Aula 6 Remis Balaniuk. Conteúdo Nessa aula estudaremos como definir propriedades das luzes e dos materiais. O render gráfico das cores

Exercícios

1) Experimentar variações de materiais e fontes de iluminação no projeto da mesa giratória.

2) Aplicar a textura bricks.bmp aos pilares da mesa giratória.