Three.js: plano de recorte definido por el usuario

Creado en 13 oct. 2011  ·  5Comentarios  ·  Fuente: mrdoob/three.js

Me gustaría usar planos de recorte definidos por el usuario.
En openGL usaría:

glClipPlane(GL_CLIP_PLANE0, planeEq);
glEnable(GL_CLIP_PLANE0);

¿Cómo puedo hacer lo mismo con webGL?

Question

Comentario más útil

¡¡Hola, muchas gracias chicos !!

Sus sugerencias me hicieron reconsiderar el problema, y ​​noté que no había un retraso "general", sino que solo parpadeaba cuando cambia el plano del clip cercano (la posición del espejo en comparación con la posición de la cámara reflejada).

Entonces, casi estabas allí

Resultado: no más 'lag': http://jsfiddle.net/slayvin/PT32b/2/ : smiley:

Quizás podríamos abstraer esto en su propio objeto.

Sí, lo he pensado. Sería genial tener un new THREE.mirror() que maneje todo. Intentaré codificar algo ...

Todos 5 comentarios

Debería poder obtener el contexto WebGL con renderer.context .
A partir de ahí, depende de usted y de la especificación WebGL :)

Recientemente encontré el mismo problema al implementar superficies planas reflectantes (también conocidas como 'espejos': sonrisa :) en three.js
Hasta donde yo sé, no puede tener planos de recorte definidos por el usuario con WebGL, al menos no con la forma 'simple' de openGL que describió.
El truco consiste en utilizar el método "Oblique View Frustum", que se explica en este documento: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf
El propósito de este método es reemplazar el plano de recorte cercano del tronco de la cámara reflejada por el plano definido por la superficie reflectante.
Incluso se proporciona algún código fuente (aunque en C ++): http://www.terathon.com/code/oblique.html

Porté con éxito ese método en three.js y aquí hay una escena de muestra para mostrar esto en vivo: http://jsfiddle.net/slayvin/PT32b/

El único problema que queda es que el renderTarget se renderiza un marco detrás, ¡y no tengo ni idea de por qué! Esto provoca un parpadeo cuando la cámara se mueve demasiado rápido y cuando el espejo atraviesa otros objetos.

Alguna idea de como arreglar esto? ¿Necesito implementar una especie de método de almacenamiento en búfer múltiple, o es simplemente porque no actualizo la matriz de la cámara después de modificar el tronco? Si es así, ¿cómo puedo hacer eso?

Mmmhh ... Intenté configurar scene.autoUpdate en false y llamar a scene.updateMatrixWorld() a mano para asegurarme de que todos los renderizadores tuvieran lo mismo pero no parecen resolver nada ... Ni llamar a mirror.updateMatrix() antes de extraer la rotación de allí ...

¡Aunque bastante guay! Quizás podríamos abstraer esto en su propio objeto.

Dulce.

También intenté asegurarme de que las matrices relevantes estuvieran actualizadas. Si le preocupa el retraso, debe actualizarlos antes de usarlos. Desafortunadamente, no pareció importar al hacer zoom rápidamente ...

mirror.updateMatrixWorld();

camera.updateMatrixWorld();

camera.matrixWorldInverse.getInverse( camera.matrixWorld );

¡¡Hola, muchas gracias chicos !!

Sus sugerencias me hicieron reconsiderar el problema, y ​​noté que no había un retraso "general", sino que solo parpadeaba cuando cambia el plano del clip cercano (la posición del espejo en comparación con la posición de la cámara reflejada).

Entonces, casi estabas allí

Resultado: no más 'lag': http://jsfiddle.net/slayvin/PT32b/2/ : smiley:

Quizás podríamos abstraer esto en su propio objeto.

Sí, lo he pensado. Sería genial tener un new THREE.mirror() que maneje todo. Intentaré codificar algo ...

¿Fue útil esta página
0 / 5 - 0 calificaciones