单击时使用Raycaster更改Box面部的颜色

问题描述 投票:1回答:1

我试图让raycaster能够选择一个已创建的立方体面,然后更改已单击的面部颜色。我已经能够使用整个对象而不是单个对象的对象。

有人可以解释一下intersectObject()和intersectObjects()之间的区别,因为我认为这涉及到这个问题。

以下是选择立方体面的尝试代码,当点击立方体的面时,该面会加载但不执行任何操作

function onDocumentMouseDown( event ){ 
    event.preventDefault();

    mouse.x = (event.clientX / renderer.domElement.width ) * 2 - 1;
    mouse.y = - (event.clientY / renderer.domElement.height ) * 2 + 1;

    raycaster.setFromCamera( mouse, camera );

    var intersects = raycaster.intersectObject( mesh );

    for (var i = 0; i < intersects.length; i++){
        intersects[ i ].face.color.setHex( 0xDDC2A3 );
        mesh.geometry.colorsNeedUpdating = true;
    }
    renderer.render(scene, camera);
   }

}

这里是我场景中的立方体

var cubeGeometry2 = new THREE.BoxGeometry(5, 5, 5);
var cubeMaterial2 = new THREE.MeshLambertMaterial({color:0xffff00});
var cube2 = new THREE.Mesh(cubeGeometry2, cubeMaterial2);
//Cube position to sit on top of the plane, allow to cast shadows and add
cube2.position.x = -5;
cube2.position.y = -5;
cube2.position.z = -5;
scene.add(cube2);
javascript three.js raycasting
1个回答
1
投票

有人可以解释一下intersectObject()和intersectObjects()之间的区别,因为我认为这涉及到这个问题。

就像在documentationTHREE.Raycaster中提到的那样,intersectObject()期望单个对象,而intersectObjects()期望一组对象作为第一个参数。但是,它与您的问题无关。

问题是您如何设置材料。如果你想为每张脸都有颜色,你必须将THREE.Material.vertexColors设置为THREE.FaceColor。请记住,此方法仅适用于THREE.Geometry

但是:Kua zxsw指出

https://jsfiddle.net/sv05rwny/

© www.soinside.com 2019 - 2024. All rights reserved.