three.js BufferGeometry与几何光线投射性能

时间:2014-06-02 05:41:49

标签: javascript three.js

我有一个 three.js 项目,我需要能够在大约200,000 - 300,000个三角形的网格上移动鼠标时选择单个面孔。

我正在使用这样的函数:

function raycast (x, y) {
    //transform mouse coords relative to main window and normalize
    var normalized = normalizeCoordinates(x, y);

    // create a Ray with origin at the mouse position and direction into the scene (camera direction)
    var vector = new THREE.Vector3( normalized.x, normalized.y, 1 );
    projector.unprojectVector( vector, camera );
    raycaster.set( camera.position, vector.sub( camera.position ).normalize() );

    // create an array containing all objects in the list with which the ray intersects
    return raycaster.intersectObject(mesh);
}

其中 normalizeCoordinates 只是将鼠标页面坐标转换为规范化设备坐标。

mesh 使用THREE.Geometry时,它是可行的,尽管有点慢。出于各种原因,我决定尝试使用BufferGeometry。这在整个项目的其他方面都看到了很好的结果,但是光线投射变得太慢了。当 mesh 使用THREE.BufferGeometry(非索引)时,intersectObject方法需要大约4.5倍的时间来完成。

首先,这是使用BufferGeometry的预期行为,其次是我可以做些什么来改善一般的光线投射性能(无论是Geometry还是BufferGeometry)?我对着色器相对较新,但特别是我想知道使用着色器执行加速光线投射是否可行。

0 个答案:

没有答案