Pergunta

Estou criando um renderizador 3D de lona HTML5, e eu diria que fiquei muito longe sem a ajuda de tão, mas eu corri para um showstopper. Estou tentando implementar o backface abelhando em um cubo com a ajuda de alguns cálculos de normais. Além disso, eu marcei isso como webgl, pois esta é uma pergunta geral suficiente que pode ser aplicada a tanto o meu caso de uso e um acelerado 3D.

De qualquer forma, como estou girando o cubo, descobri que os rostos errados estão sendo escondidos. Exemplo:

backface scluling problema em um cubo

Estou usando os seguintes vértices: https://github.com/toji/gl-matrix

Além disso, o arquivo específico no meu código aberto do código aberto eu estou usando está aqui:

http://code.google.com /p/nanoblok/source/browse/nb11/app/render.js

Obrigado antecipadamente!

Foi útil?

Solução

Eu não recebi todo o seu sistema, mas o "composto VEC3" não deve ser arbitrário; Deve ser o vetor "fora do ecrã", que (já que sua projeção é ⟨ x , y , z ⟩ → ⟨ X , y ⟩) é ⟨0, 0, -1⟩ ou ⟨0, 0, 1⟩, dependendo da lateralidade do sistema de coordenadas e dos eixos de tela. Você não tem uma "matriz de câmera" explícita (que geralmente é chamada de matriz de visualização), mas sua câmera (visualização e projeção) é implicitamente definida pela sua projeção passo 4!

No entanto, observe que esta abordagem só funcionará para projeções ortográficas, não as perspectivas (considerar uma face no lado esquerdo da tela, voltada para a direita e paralela à direção da vista; o produto dot seria 0, mas deve ser visível). A abordagem usual, usada no hardware 3D real, é primeiro fazer toda a transformação (incluindo projeção) e, em seguida, verificar se o triângulo 2D resultante é no sentido anti-horário ou no sentido horário, e manter ou descartar com base nessa condição.

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