A configuração da matriz de projeção em perspectiva no Open GL (incluindo o OpenGL ES 2.0) tem o seguinte formato geral:
glm::mat4 perspective(float fovy, float aspect, float zNear, float zFar);
Observe os dois últimos parâmetros ; Primeiro, especifique o plano zNear , que é o plano mais próximo da câmera. O segundo especifica o plano zFar que está longe da câmera.
É do conhecimento geral que, no OpenGL, coisas que estão além, em outras palavras "mais fundo na tela", têm eixo Z negativo . Por que, então, todos os exemplos do OpenGL, que configuram a matriz de projeção em perspectiva (extraídos de fontes confiáveis como OpenGL SuperBible e similares), se parecem com os dois parâmetros mencionados acima (zNear, zFar) da função de projeção em perspectiva?
Este exemplo foi retirado do webiste do GLM (OpenGL Math) :
glm::mat4 Projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 100.f);
Você pode ver que o parâmetro zNear está mais distante da câmera do que o parâmetro zFar, que é 100 pontos mais próximo da câmera / visualizador.
Você pode fornecer uma explicação fácil de entender , por favor? I não é apenas um, mas todos os exemplos, que passam zFar como valor positivo mais alto que zNear. Obrigado.
Meu exemplo:
No meu código, quando defino:
glm::mat4 Projection = glm::perspective(45.0f, 4.0f / 3.0f, 1000.0f, -500.0f);
Suponho que meu frustum tenha 1000 pontos na direção z-positiva e 500 pontos na z-negativa direção .
Quando defino coisas assim, posso ver pelo menos algum objeto, embora as coisas não sejam perfeitas: por algumas razões, vejo apenas objetos posicionados em coordenadas z negativas.
Isso pode estar relacionado ao meu entendimento incorreto da função de projeção em perspectiva.
fonte
Respostas:
O método em questão (
glm::perspective
) e seu tipo são essencialmente invólucros ou reimplementações do gluPerspective . Como você pode ver na documentação dessa função, os valores próximos / distantes são distâncias do plano de visualização e são sempre positivos.fonte