我知道这个问题已经被问到了。如果用鼠标选中,我希望能够改变对象的颜色。我自己尝试编写代码,但似乎没有用,所以我想我错过了一些东西。这基本上就是剧本:
<script>
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera( 75, window.innerWidth/window.innerHeight, 0.1, 1000 );
var renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth/2, window.innerHeight/2 );
renderer.setClearColor( 0xcccccc, 1 );
document.body.appendChild( renderer.domElement );
scene.add(camera);
var geometry = new THREE.Geometry();
geometry.vertices.push(
new THREE.Vector3( -5, 5, 0 ),
new THREE.Vector3( -5, -5, 0 ),
new THREE.Vector3( 5, -5, 0 )
);
var face = new THREE.Face3(0, 1, 2);
geometry.faces.push(face);
var material = new THREE.MeshBasicMaterial({color: 0x3300ff});
var triangle = new THREE.Mesh(geometry, material);
scene.add(triangle);
camera.position.z = 10;
document.addEventListener( 'mousedown', onDocumentMouseDown );
function onDocumentMouseDown( event ) {
event.preventDefault();
var mouse3D = new THREE.Vector3( ( event.clientX / window.innerWidth ) * 2 - 1,
-( event.clientY / window.innerHeight ) * 2 + 1,
0.5 );
var projector = new THREE.Projector();
var raycaster = projector.pickingRay( mouse3D.clone(), camera );
var intersects = raycaster.intersectObjects( objects );
if ( intersects.length > 0 ) {
intersects[ 0 ].object.material.color.setHex( Math.random() * 0xffffff );
}
}
var render = function () {
requestAnimationFrame( render );
camera.lookAt( scene.position );
renderer.render( scene, camera );
};
render();
</script>
如果有人可以帮助我,我会很感激。
答案 0 :(得分:1)
更新了您的代码并制作了jsfiddle
在onDocumentMouseDown中添加了
var raycaster = new THREE.Raycaster();
raycaster.setFromCamera( mouse3D, camera );
而不是
var projector = new THREE.Projector();
var raycaster = projector.pickingRay( mouse3D.clone(), camera );
向对象数组添加三角形网格和渲染器的更新大小。 我建议你开始使用Console并做一些调试。您可以自己轻松找到这些错误。