2017-10-11 6 views
1

J'utilise EdgesGeometry sur PlaneGeometry et il semble qu'il crée une hitbox plus grande dans les événements de la souris. Cependant, cela n'est pas évident lors de l'utilisation de CircleGeometry. Je donne les résultats suivants:EdgesGeometry: raycasting pas précis

createPanel = function(width, height, widthSegments) { 

     var geometry = new THREE.PlaneBufferGeometry(width, height, widthSegments); 

     var edges = new THREE.EdgesGeometry(geometry); 

     var panel = new THREE.LineSegments(edges, new THREE.LineBasicMaterial({ 
     color: 0xffffff })); 

     return panel; 

    } 

    var tile = createPanel(1.45, .6, 1); 

Maintenant, je suis en utilisant une bibliothèque appelée RayInput qui fait tout le raycasting pour moi, mais imaginez que je suis juste en utilisant un raycaster normal pour les événements de souris. Sans le edges et en n'utilisant que l'avion, les limites de la collision sont précises. Après avoir ajouté EdgesGeometry, la hitbox verticale semble avoir augmenté de façon spectaculaire, l'objet détecté est cliqué lorsque je ne clique pas dessus. La hitbox horizontale semble n'avoir augmenté que légèrement. Je n'ai jamais utilisé EdgesGeometry auparavant, donc quelqu'un a une idée de ce qui se passe?

Merci d'avance.

+1

'Essayez raycaster. linePrecision = 0.1; ' – WestLangley

+0

Merci, cela a fonctionné dans une certaine mesure mais n'était pas encore assez précis. Je viens juste de finir de mettre un plan invisible normal comme une boîte à succès derrière la forme décrite comme une solution. –

+0

Que voulez-vous dire que ce n'était pas assez précis? – WestLangley

Répondre

3

Si vous raycasting contre THREE.Line ou THREE.LineSegments, vous devez régler le paramètre linePrecision à une valeur appropriée à l'échelle de votre scène:

raycaster.linePrecision = 0.1; // default is 1 

Three.js R.87