0

実装の選択に問題があります。私が望むことをしている多くの異なる例を見つけましたが、実際にはそれをうまく機能させることができません。私は主にこの例に従いました

基本的に、シーンにいくつかのメッシュがあり、それらのいずれかをダブルクリックして、選択したメッシュの色を変更したいと考えています。シーンには、常に選択されている 3 つの小さな立方体と、選択されていないことが多い複雑なメッシュがいくつかあります。キューブを選択できる場合、他のキューブを選択できないことが多い理由を理解するのを手伝ってくれる人がいるかどうか知りたいです。

クリックされたメッシュを検出するために使用したコードは次のとおりです。

var projector = new THREE.Projector();

var vector = new THREE.Vector3( ( event.clientX / window.innerWidth ) * 2 - 1, - ( event.clientY / window.innerHeight ) * 2 + 1, 0.5 );

projector.unprojectVector( vector, camera );

var ray = new THREE.Ray( camera.position, vector.subSelf( camera.position ).normalize() );

var intersects = ray.intersectObjects( scene.children, true );

if ( intersects.length > 0 ) 
{
    intersects[ 0 ].object.material.color.setHex( Math.random() * 0xffffff );
}
4

1 に答える 1

1

ray.intersectObject()によって呼び出されるray.intersectObjects()には、顔の重心が必要です。

mesh.geometry.computeCentroids();

これは、独自のカスタム ジオメトリを作成する場合に重要です。

three.js r.51

r54 以降、これは不要になりました。WestLangley からのコメントを参照してください

于 2012-10-08T20:03:15.723 に答える