Pergunta

void main(void)
{
  vec4 clipCoord = glModelViewProjectionmatrix * gl_Vertex;
  gl_Position = clipCoord;

  gl_FrontColor = gl_Color;

  vec3 ndc = clipCoord.xyz / clipCoord.w;

Assim, o clipCoord está apenas fazendo transforma oleodutos fixos padrão. Por que eu dividir por w, e o que eu ganho com isso?

Foi útil?

Solução

W é o quarto de coordenadas de um vértice tridimensional; Este vértice é chamado vértice coordenadas homogêneas.

Em poucas palavras, o componente W é um factor que divide os outros componentes do vector. Quando W é de 1,0, as coordenadas dos vértices homogéneos são "normalizada". Para comparar dois vértices, você deve normalizar o valor W a 1,0.

Pense no vértice (1,1,1,1). Agora aumentar o valor W (w> 1,0). A posição normalizada é escalar! e ele está indo para a origem. Pense no vértice (1,1,1,1). Agora diminuir o valor W (W <1,0). A posição normalizada vai um ponto infinito.

Além de escalar coordenadas dos vértices, o W coordenada é necessária uma vez que você tem que multiplicar uma matriz 4x4 (a vista do modelo e / ou as matrizes de projeção) com uma matriz 4x1 (o vértice).

É claro que o Livro Vermelho é o guia definitivo:

Red Book Apêndice

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