Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 针对缓冲几何体线3JS的光线投射_Javascript_Three.js_Buffer Geometry - Fatal编程技术网

Javascript 针对缓冲几何体线3JS的光线投射

Javascript 针对缓冲几何体线3JS的光线投射,javascript,three.js,buffer-geometry,Javascript,Three.js,Buffer Geometry,我正在尝试对使用BufferGeometry创建的线进行光线投射。但它似乎不支持光线投射 如图所示启动BufferGeometry时,光线投射在此对象上不起作用 但是当我用Geometry替换BufferGeometry时,光线投射效果很好 var geometry = new THREE.Geometry(); var lines = new THREE.Object3D(); for ( var i = 0; i <array.length; i++) { x = ( Math

我正在尝试对使用
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);
var geometry=new THREE.geometry();
var lines=new THREE.Object3D();
对于(var i=0;i


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

material.originalColor=material.color;
//线
lines=new THREE.Object3D();
直线=新的三条直线(几何、材料);
行。添加(行);
场景。添加(行);
document.onmousemove=函数(事件){
mousePosition.x=2*(event.clientX/window.innerWidth)-1;
mousePosition.y=1-2*(event.clientY/window.innerHeight);
鼠标位置。取消投影(相机);
var raycaster=new THREE.raycaster(camera.position,mousePosition.sub(camera.position.normalize());
console.log(line.children);
var crossions=raycaster.intersectObjects(lines.children);
控制台日志(交叉点);
line.children.forEach(函数(子函数){
child.material.color=child.material.originalColor;
});
对于(var j=0;j
你能提供一把小提琴来演示这个问题吗?@WestLangley在使用小提琴时,我发现它不是由
缓冲几何体造成的。我的线太小了,我无法用光线击中它。所以问题解决了,谢谢你的评论!我错了,它不太小。它只是总是相交,可能是一个错误谢谢,但正如我在评论中所说的,我的也可以工作(请参阅提供的fiddles)。但同样的东西(在fiddle中工作)在我的绘图应用程序中不起作用,因为某处有一个bug。。。
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");
    }
};