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

标签 javascript three.js raycasting

我试图让 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);

最佳答案

Could someone please explain the difference between intersectObject() and intersectObjects() as I think that this is involved in the issue.

documentation 中所述在 THREE.Raycaster 中,intersectObject() 需要一个对象,而 intersectObjects() 需要一个对象数组作为第一个参数。但是,这与您的问题无关。

问题在于您设置 Material 的方式。如果您想为每张脸都设置颜色,则必须将 THREE.Material.vertexColors 设置为 THREE.FaceColor。请记住,此方法仅适用于 THREE.Geometry

演示:https://jsfiddle.net/sv05rwny/

three.js R101

关于javascript - 单击时使用 Raycaster 更改 Box 面的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54829003/

相关文章:

javascript - 如何使用 Three.js 在点击到达特定位置后停止相机动画

javascript - 有哪些技术可用于在浏览器中进行 P2P?

javascript - 变量提升的意义是什么?

javascript - Handlebars - 子串

javascript - 三.CurvePath和自定义标记

javascript - Threejs - 如何进行光线转换并获取网格中三 Angular 形的重心坐标?

raytracing - 光线追踪 : Bresenham's vs Siddon's algorithm

c# - OnPointerEnter 和 OnPointerExit 没有被触发 Unity

javascript - 为什么我的光线转换引擎鱼眼校正会导致凹墙?

javascript - d3 selectAll 困惑