Three.js raycaster 与 sprite 的交点完全偏向左侧

Three.js raycaster intersection with sprites is completely off to the left

我在屏幕上有带有文字的 sprite,以球形图案放置,我想让用户点击单个单词并突出显示它们。

现在的问题是,当我进行光线投射并执行 raycaster.intersectObjects() 时,returns 精灵在发生点击的地方完全不同(通常它会突出显示左侧的单词点击的话)。出于调试目的,我实际上从 raycaster 对象中绘制了光线,它们几乎穿过我点击的单词。

这张图我点了"emma"、"universe"和"inspector legrasse",但是高亮的字是红色的,我也旋转了镜头所以大家可以看到线。

相关代码如下:

精灵创建:

var canvas = document.createElement('canvas');
var context = canvas.getContext('2d');
canvas.height = 256;
canvas.width = 1024;
...
context.fillStyle = "rgba(0, 0, 0, 1.0)";
context.fillText(message, borderThickness, fontsize + borderThickness);
var texture = new THREE.Texture(canvas);
texture.needsUpdate = true;
var spriteMaterial = new THREE.SpriteMaterial({map: texture});
var sprite = new THREE.Sprite(spriteMaterial);
sprite.scale.set(400, 100, 1.0);

然后将单个精灵添加到 "sprites" 数组,然后添加到场景中。

点击检测:

function clickOnSprite(event) {
    mouse.x = ( event.clientX / renderer.domElement.clientWidth ) * 2 - 1;
    mouse.y = -( event.clientY / renderer.domElement.clientHeight ) * 2 + 1;
    raycaster.setFromCamera(mouse, camera);

    drawRaycastLine(raycaster);

    var intersects = raycaster.intersectObjects(sprites);
    if (intersects.length > 0) {
        intersects[0].object.material.color.set(0xff0000);
        console.log(intersects[0]);
    }
}

我正在使用带轨道控制的透视相机。

我得出的结论是,目前不能用精灵来完成(至少目前不能)。

正如评论中所建议的,我最终使用了平面几何体而不是精灵。