Pergunta

Uma resposta a minha pergunta sugere que a iluminação DOT3 pode ajudar com renderização OpenGL ES, mas estou tendo dificuldades para encontrar uma definição decente do que a iluminação DOT3 é.

Editar 1

iPhone informações relacionadas é muito apreciado.

Foi útil?

Solução

DOT3-iluminação é muitas vezes referida como iluminação por pixel. Com vértice acender a iluminação é calculado em cada vértice ea iluminação resultante é interpolada sobre o triângulo. Na iluminação por pixel, como o nome indica, o objetivo é calcular a iluminação em cada pixel.

A forma como isso é feito em hardware função fixa como o iPhone é com os chamados combinadores de registro. O nome DOT3 vem desse estado processar:

glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_DOT3_RGB);

esta entrada do blog em Wolfgang Engels blog para mais informações sobre exatamente como configurá-lo.

Ao fazer per-pixel iluminação é popular também utilizar um chamado mapa normal. Isto significa que o normal a cada ponto em um objeto é armazenado em um mapa de textura especial, um mapa normal. Este foi popularizado no jogo DOOM 3 por software ID onde os modelos muito baixos polígonos onde usado, mas com mapas normais de alta resolução. A razão para usar esta técnica é que o olho é mais sensível à variação na iluminação de variação em forma.

Eu vi em sua outra pergunta que a razão desta surgiu foi que você queria reduzir o consumo de memória dos dados vértice. Isto é verdade, em vez de armazenar três componentes para uma normal em cada vértice, você só precisa armazenar dois componentes para as coordenadas de textura para o mapa normal. Permitindo iluminação por pixel virá com um custo de desempenho embora assim que eu não tenho certeza se isso vai ser uma vitória líquida, como de costume, o conselho é tentar e ver.

Finalmente, a iluminação difusa intensidade num ponto é proporcional ao coseno do ângulo entre a normal da superfície e a direcção da luz. Para dois vector o dot produto é definido como:

a dot b = |a||b| cos(theta)

onde |a| e |b| é o comprimento do a vectores e b respectivamente e theta é o ângulo entre eles. Se o comprimento é igual a um, e |a| |b| são referidos como vectores unitários e os simplifica a fórmula:

a dot b = cos(theta)

Isto significa que a intensidade da iluminação difusa é dado pelo produto escalar entre a normal da superfície e a direcção da luz. Isto significa que todas difusa iluminação é uma forma de DOT3-iluminação, mesmo que o nome tem vindo a referir ao tipo per-pixel.

Outras dicas

A partir aqui :

bumpmapping está colocando uma textura em um modelo onde o brilho de cada texel define a altura do que texel.

A altura de cada texel é então utilizada para perturbar a iluminação de toda a superfície.

mapeamento normal é colocar uma textura em um modelo onde a cor de cada texel é realmente três valores que definem a direção que a localização dos pontos de superfície.

Uma cor de (255, 0, 0), por exemplo, pode significar que a superfície nessa localização ponta virada para baixo do eixo X positivo.

Em outras palavras, cada texel é um normal.

O nome dot3 vem do que você realmente fazer com esses normais.

Vamos dizer que você tem um vetor que aponta na direção seus pontos de fonte de luz. E vamos dizer que você tem o vetor que é o normal em um texel específica do seu modelo que lhe diz qual a direção que os pontos de Texel.

Se você fizer uma equação matemática simples chamada um "produto escalar" sobre estes dois vetores normais, assim:

Dot = N1x N2x + N1y N2y + N1z * N2z

Em seguida, o valor resultante é um número que lhe diz quanto esses dois vetores apontam na mesma direção.

Se o valor é de -1, em seguida, eles apontam em sentidos opostos, o que efectivamente significa que o texel é apontando para a fonte de luz, e a fonte de luz está apontando para o texel, de modo que o texel deve ser iluminada.

Se o valor for 1, então eles apontam na mesma direção, o que significa o texel está apontando para longe da fonte de luz.

E se o valor for 0, então um dos pontos de vetores em 90 graus em relação ao outro. Ou seja: Se você está em pé no chão olhando para a frente, em seguida, seu vetor vista é de 90 graus em relação ao normal do solo, que aponta para cima.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top