Os artefatos podem ser reproduzidos ampliando e movendo um pouco a câmera.
https://threejs.org/examples/webgl_mirror.html
De fato.
Veja também este tópico: https://github.com/mrdoob/three.js/issues/11885
No final, tenho a sensação de que o Mirror não está devidamente implementado.
A proporção da câmera principal nunca é copiada para a câmera espelho.
// "examples/Mirror.js" (lines 142-146)
mirrorCamera.near = camera.near;
mirrorCamera.far = camera.far;
mirrorCamera.updateMatrixWorld();
mirrorCamera.updateProjectionMatrix();
Deve ser alterado para:
mirrorCamera.updateMatrixWorld();
mirrorCamera.projectionMatrix.copy(camera.projectionMatrix);
Vou enviar um PR para isso mais tarde!
Outro problema com o espelho (e o oceano plano) é que ele parece não funcionar quando logarithmicDepthBuffer
está habilitado. O recorte oblíquo próximo ao plano atrapalha a profundidade e nunca encontrei uma solução para isso. Eu gostaria que o WebGL tivesse glClipPlane
😞
@vanruesc Eu estava bagunçando o código, então implementei diretamente. Muito Obrigado!
@mrdoob Se você ainda está brincando, acho que há espaço para simplificação ...
//mirrorCamera.up.set( 0, - 1, 0 );
//mirrorCamera.up.applyMatrix4( rotationMatrix );
//mirrorCamera.up.reflect( normal ).negate();
mirrorCamera.up.set( 0, 1, 0 ).applyMatrix4( rotationMatrix ).reflect( normal );
@WestLangley Obrigado!
Comentários muito úteis
@mrdoob Se você ainda está brincando, acho que há espaço para simplificação ...