Three.js: plan de découpe défini par l'utilisateur

Créé le 13 oct. 2011  ·  5Commentaires  ·  Source: mrdoob/three.js

J'aimerais utiliser des plans de détourage définis par l'utilisateur.
Dans openGL, j'utiliserais:

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

Comment puis-je faire la même chose avec webGL?

Question

Commentaire le plus utile

Hé merci les gars !!

Vos suggestions m'ont amené à reconsidérer le problème, et j'ai remarqué qu'il n'y avait pas de décalage «général», mais seulement un scintillement lorsque le plan proche du clip change (la position du miroir par rapport à la position de la caméra en miroir).

Donc, vous y étiez presque @WestLangley : ce sont les matrices de la caméra miroir que vous devez mettre à jour, pas la caméra elle-même.

Résultat: plus de 'lag': http://jsfiddle.net/slayvin/PT32b/2/ : smiley:

Peut-être que nous pourrions résumer cela dans son propre objet.

Oui, j'y ai pensé. Ce serait formidable d'avoir un new THREE.mirror() qui gère tout. Je vais essayer de coder quelque chose ...

Tous les 5 commentaires

Vous devriez pouvoir obtenir le contexte WebGL avec renderer.context .
De là, c'est à vous et à la spécification WebGL :)

J'ai récemment rencontré le même problème lors de la mise en œuvre de surfaces planes réfléchissantes (aka 'mirrors': smile :) dans three.js
Autant que je sache, vous ne pouvez pas avoir de plans de découpage définis par l'utilisateur avec WebGL, du moins pas avec la méthode openGL «simple» que vous avez décrite.
L'astuce consiste à utiliser la méthode "Oblique View Frustum", qui est expliquée dans cet article: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf
Le but de cette méthode est de remplacer le plan de découpe proche de votre tronc de caméra en miroir par le plan défini par la surface réfléchissante.
Il y a même du code source fourni (en C ++ cependant): http://www.terathon.com/code/oblique.html

J'ai porté cette méthode avec succès dans three.js et voici un exemple de scène pour montrer cela en direct: http://jsfiddle.net/slayvin/PT32b/

Le seul problème restant est que le renderTarget est rendu une image derrière, et je n'ai aucune idée pourquoi! Cela provoque un scintillement lorsque la caméra se déplace trop rapidement et lorsque le miroir traverse d'autres objets.

Une idée pour réparer ceci? Dois-je implémenter une sorte de méthode multi-tampons, ou est-ce simplement parce que je ne mets pas à jour la matrice de la caméra après avoir modifié le frustum? Si oui, comment puis-je faire cela?

Mmmhh ... J'ai essayé de définir scene.autoUpdate sur false et d'appeler scene.updateMatrixWorld() à la main pour m'assurer que tous les moteurs de rendu avaient les mêmes choses mais ne semble rien résoudre ... Ni appeler mirror.updateMatrix() avant d'extraire la rotation à partir de là ...

Plutôt cool cependant! Peut-être que nous pourrions résumer cela dans son propre objet.

Sucré.

J'ai également essayé de m'assurer que les matrices pertinentes étaient à jour. Si vous vous inquiétez du décalage, vous devez les mettre à jour avant de les utiliser. Malheureusement, cela ne semblait pas avoir d'importance lors d'un zoom rapide ...

mirror.updateMatrixWorld();

camera.updateMatrixWorld();

camera.matrixWorldInverse.getInverse( camera.matrixWorld );

Hé merci les gars !!

Vos suggestions m'ont amené à reconsidérer le problème, et j'ai remarqué qu'il n'y avait pas de décalage «général», mais seulement un scintillement lorsque le plan proche du clip change (la position du miroir par rapport à la position de la caméra en miroir).

Donc, vous y étiez presque @WestLangley : ce sont les matrices de la caméra miroir que vous devez mettre à jour, pas la caméra elle-même.

Résultat: plus de 'lag': http://jsfiddle.net/slayvin/PT32b/2/ : smiley:

Peut-être que nous pourrions résumer cela dans son propre objet.

Oui, j'y ai pensé. Ce serait formidable d'avoir un new THREE.mirror() qui gère tout. Je vais essayer de coder quelque chose ...

Cette page vous a été utile?
0 / 5 - 0 notes