针对BufferGeometry线三维的光线投射

Raycasting against BufferGeometry Line threejs

本文关键字:光线投射 三维 BufferGeometry 针对      更新时间:2023-09-26

我正试图对BufferGeometry创建的线进行光线投射。但它似乎不支持光线投射?

当启动BufferGeometry时,如这里所示,光线投射在这个物体上不起作用。

但是当我用Geometry代替BufferGeometry时,光线投射工作良好。

var geometry = new THREE.Geometry();
var lines = new THREE.Object3D();
for ( var i = 0; i <array.length; i++) {
   x = ( Math.random() - 0.5 ) * 30;
   y = ( Math.random() - 0.5 ) * 30;
   z = ( Math.random() - 0.5 ) * 30;
   geometry.vertices.push(new THREE.Vector3(x,y,z));
}
var line = new THREE.Line( geometry, new THREE.LineBasicMaterial( { color: 0x9999FF, opacity: 0.5 } ) );
lines.add(line);
scene.add(lines);

我也试过把BufferGeometry包装到Object3D,不影响结果。如何对BufferGeometry线进行光线投射?

编辑

设置BufferGeometry

我在你的BufferGeometry示例上做了一些工作,现在它可以工作了

http://jsfiddle.net/eviltoad/s9fsds19/11/

material.originalColor = material.color;
// line
lines = new THREE.Object3D();
line = new THREE.Line( geometry,  material );
lines.add(line);
scene.add(lines);
document.onmousemove = function(event){
    mousePosition.x = 2 * (event.clientX / window.innerWidth) - 1;
    mousePosition.y = 1 - 2 * ( event.clientY / window.innerHeight);
    mousePosition.unproject(camera);
    var raycaster = new THREE.Raycaster(camera.position,mousePosition.sub(camera.position).normalize());
    console.log(lines.children);
    var intersections = raycaster.intersectObjects(lines.children);
    console.log(intersections);
    lines.children.forEach(function( child ) {
        child.material.color = child.material.originalColor;
    });
    for( var j = 0; j < intersections.length;j++ ) {
        var intersection = intersections[j];
        var object = intersection.object;
        object.material.color = new THREE.Color("#FFFFFF");
    }
};