Existe alguma confusão aqui.
OpenGL é destro no espaço do objeto e no espaço do mundo.
Mas no espaço da janela (também conhecido como espaço da tela), de repente, somos canhotos .
Como isso aconteceu ?
A forma como passamos de destros para canhotos é uma entrada de escala z negativa nas matrizes de projeção glOrtho
ou glFrustum
. Escalar z por -1 (enquanto deixa xey como estavam) tem o efeito de alterar a destreza do sistema de coordenadas.
Para glFrustum,
longe e perto devem ser positivos, com muito > perto . Diga distante = 1000 e próximo = 1. Então C = - (1001) / (999) = -1,002.
Veja aqui mais detalhes e diagramas.
De uma perspectiva ortográfica , glOrtho gera uma matriz como esta:
Aqui, esquerda , direita , inferior e superior são apenas as coordenadas para os planos de recorte vertical esquerdo , vertical direito , horizontal inferior , horizontal superior (resp) .
Os planos próximos e distantes , entretanto, são especificados de forma diferente . o próximo parâmetro é definido como
- Perto: a distância até o plano de corte de profundidade mais próximo. Esta distância é negativa se o avião estiver atrás do observador.
e longe:
- zFar a distância até o plano de corte de profundidade mais distante. Esta distância é negativa se o avião estiver atrás do observador.
Aqui temos um volume típico de visualização canônica
Como o multiplicador z é (-2 / (muito perto)), o sinal de menos escala z por -1 . Isso significa que "z" é virado para a esquerda durante a transformação da visualização, sem o conhecimento da maioria das pessoas, pois elas simplesmente funcionam no OpenGL como um sistema de coordenadas "destro".
Então, se você ligar
glOrthof(-1, 1, -1, 1, 10, -10) ; // near=10, FAR=-10,
Então o NEAR PLANE está 10 unidades à sua frente . Onde você está? Por que, na origem, com o eixo x à sua direita, o eixo y no topo da sua cabeça e seu nariz apontando para baixo do eixo z negativo (esse é o padrão "Por padrão, a câmera está situada na origem , aponta para baixo o eixo z negativo e tem um vetor superior de (0, 1, 0). " ). Portanto, o plano próximo está em z = -10. O plano distante está 10 unidades atrás de você, em z = + 10 .