Estou lendo um tutorial incrível sobre o OpenGL . É realmente ótimo, confie em mim. O tópico em que estou atualmente é Z-buffer. Além de explicar o que é, o autor menciona que podemos realizar testes de profundidade personalizados, como GL_LESS, GL_ALWAYS etc. Ele também explica que o significado real dos valores de profundidade (que é superior e que não é) também pode ser personalizado. Eu entendo até agora. E então o autor diz algo inacreditável:
O intervalo zNear pode ser maior que o intervalo zFar; se for, os valores do espaço da janela serão revertidos, em termos do que constitui o mais próximo ou o mais distante do visualizador.
Anteriormente, foi dito que o valor de Z no espaço da janela de 0 é o mais próximo e 1 é o mais distante. No entanto, se nossos valores Z do espaço do clipe forem negados, a profundidade de 1 estará mais próxima da vista e a profundidade de 0 será a mais distante. No entanto, se mudarmos a direção do teste de profundidade (GL_LESS para GL_GREATER, etc), obteremos exatamente o mesmo resultado. Portanto, é realmente apenas uma convenção. De fato, inverter o sinal de Z e o teste de profundidade já foi uma otimização de desempenho vital para muitos jogos.
Se eu entendi corretamente, em termos de desempenho, inverter o sinal de Z e o teste de profundidade não passa de uma <
comparação para outra >
. Então, se eu entendi direito e o autor não está mentindo ou inventando as coisas, mudar <
para >
costumava ser uma otimização vital para muitos jogos.
O autor está inventando as coisas, estou entendendo mal alguma coisa, ou é realmente o caso que já <
foi mais lento ( vitalmente , como o autor diz) do que >
?
Obrigado por esclarecer este assunto bastante curioso!
Isenção de responsabilidade: Estou ciente de que a complexidade do algoritmo é a principal fonte de otimizações. Além disso, suspeito que hoje em dia definitivamente não faria diferença e não estou pedindo para otimizar nada. Sou extremamente, dolorosamente, talvez proibitivamente curioso.