Three.js 如何使用InstancedBufferGeometry在ThreeJS中进行光线投射?

Three.js 如何使用InstancedBufferGeometry在ThreeJS中进行光线投射?,three.js,Three.js,有,但是如何使用InstancedBufferGeometry进行光线投射 例如,是否将光线投射功能添加到此演示中? 从未实现对具有InstancedBufferGeometry的网格的光线投射支持。但是,您可以使用与R109一起添加的新类,该类支持光线投射。查看以下示例以查看此功能的实际使用情况: 重要的光线投射代码部分如下所示: var intersection = raycaster.intersectObject( mesh ); // mesh is type of Instanced

有,但是如何使用InstancedBufferGeometry进行光线投射

例如,是否将光线投射功能添加到此演示中?

从未实现对具有InstancedBufferGeometry的网格的光线投射支持。但是,您可以使用与R109一起添加的新类,该类支持光线投射。查看以下示例以查看此功能的实际使用情况:

重要的光线投射代码部分如下所示:

var intersection = raycaster.intersectObject( mesh ); // mesh is type of InstancedMesh

if ( intersection.length > 0 ) {

    var instanceId = intersection[ 0 ].instanceId;

    mesh.getMatrixAt( instanceId, instanceMatrix ); // get local transformation matrix of the instance
    matrix.multiplyMatrices( instanceMatrix, rotationMatrix ); // modify it
    mesh.setMatrixAt( instanceId, matrix ); // write it back

    mesh.instanceMatrix.needsUpdate = true;

}

three.js R113

从未实现对具有InstancedBufferGeometry的网格的光线投射支持。但是,您可以使用与R109一起添加的新类,该类支持光线投射。查看以下示例以查看此功能的实际使用情况:

重要的光线投射代码部分如下所示:

var intersection = raycaster.intersectObject( mesh ); // mesh is type of InstancedMesh

if ( intersection.length > 0 ) {

    var instanceId = intersection[ 0 ].instanceId;

    mesh.getMatrixAt( instanceId, instanceMatrix ); // get local transformation matrix of the instance
    matrix.multiplyMatrices( instanceMatrix, rotationMatrix ); // modify it
    mesh.setMatrixAt( instanceId, matrix ); // write it back

    mesh.instanceMatrix.needsUpdate = true;

}

three.js R113

InstancedBufferGeometry和InstancedMesh的不同用途是什么?我有点困惑,因为我看到它们一起使用,而且是分开使用的。例如:examples/webgl\u buffergeometry\u instanced\u interleaved.html它们一起使用。InstancedBufferGeometry是three.js中用于实例化渲染的第一个API。但是,由于用户总是需要自己增强着色器代码,因此使用起来有点低级且复杂。因此,引入了InstancedMesh,以便可以对普通几何体和内置材质使用实例化渲染。仅当要使用实例化变换矩阵旁边的自定义实例化属性时,才需要组合。但如果使用InstancedMesh,则看起来只能使用一种材质,例如场景中所有对象的颜色。这是正确的吗?如果我想使用不同的颜色,InstancedBufferGeometry是唯一的选择。我的理解正确吗?正如我在前面的评论中提到的,您可以合并这两个类。这样,光线投射就可以工作了,您不必担心每个实例的实际变换。InstancedBufferGeometry和InstancedMesh的不同用途是什么?我有点困惑,因为我看到它们一起使用,而且是分开使用的。例如:examples/webgl\u buffergeometry\u instanced\u interleaved.html它们一起使用。InstancedBufferGeometry是three.js中用于实例化渲染的第一个API。但是,由于用户总是需要自己增强着色器代码,因此使用起来有点低级且复杂。因此,引入了InstancedMesh,以便可以对普通几何体和内置材质使用实例化渲染。仅当要使用实例化变换矩阵旁边的自定义实例化属性时,才需要组合。但如果使用InstancedMesh,则看起来只能使用一种材质,例如场景中所有对象的颜色。这是正确的吗?如果我想使用不同的颜色,InstancedBufferGeometry是唯一的选择。我的理解正确吗?正如我在前面的评论中提到的,您可以合并这两个类。通过这种方式,光线投射将起作用,您不必担心每个实例的实际转换。