javascript - Three.js - 鼠标悬停效果不恢复以前的颜色

标签 javascript three.js

我在 Three.js 中创建一个图案,每当用户使用 mouse hover 与其中一张脸相交时,它应该变成灰色并且当鼠标移动时远离它,它应该恢复到原来的颜色(浅蓝色)。不幸的是,这不会发生。这是我认为有问题的代码部分:

if (intersects.length > 0) {
    if (intersects[0].object != INTERSECTED) {
        if (INTERSECTED) {
            INTERSECTED.face.color.setRGB(INTERSECTED.currentRGB);
        }
        INTERSECTED = intersects[0];
        INTERSECTED.object.currentHex = INTERSECTED.object.material.color.getHex();
        INTERSECTED.face.color.setHex(0x777777);
        INTERSECTED.object.geometry.colorsNeedUpdate = true;
    }
} else {
    if (INTERSECTED) {
        INTERSECTED.material.color.setRGB( INTERSECTED.currentRGB );
    }
    INTERSECTED = null;
}

我认为它的问题在于 targetList = [] 内部,因为使用 console.log() 我发现其中没有存储任何内容。 在 this fiddle ,你可以找到完整的代码。你是否偶然知道我做错了什么?

预先感谢您的回复!

最佳答案

代码中的一些问题:

  1. 您似乎使用 INTERSECTED.currentRGB 来恢复以前的颜色。但是您永远不会将之前的颜色保存到其中(也许 object.currentHex 应该已经完成​​了?)

  2. THREE.Color.setRGB 接受 3 个参数:(r, g, b)。即使您将 [r,g,b] 保存到 currentRGB,您的代码也不会工作,因为没有 THREE.Color.getRGB,您不能这样做。在这种情况下,最好使用 Hex。 (三色.getHex 和三色.setHex)

这里是固定的部分代码,我修改的行有注释

if (intersects.length > 0) {

    if (intersects[0].object != INTERSECTED) {

        if (INTERSECTED) {
            // Use hex rather than RGB (setRGB uses 3 arguments, hex one)
            INTERSECTED.face.color.setHex(INTERSECTED.currentHex);
        }

        INTERSECTED = intersects[0];
        // Save actual color so we can restore it later
        INTERSECTED.currentHex = INTERSECTED.face.color.getHex();
        INTERSECTED.face.color.setHex(0x777777);
        INTERSECTED.object.geometry.colorsNeedUpdate = true;

    }

} else {

    if (INTERSECTED) {
        // Use hex rather than RGB (setRGB uses 3 arguments, hex one)
        INTERSECTED.face.color.setHex( INTERSECTED.currentHex );
    }

    INTERSECTED = null;
}

你可以看到它在这里工作:https://jsfiddle.net/ord2rjw5/3/

关于javascript - Three.js - 鼠标悬停效果不恢复以前的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35944752/

相关文章:

javascript - 高架相机观察点

javascript - Three.js 在删除和创建对象后变得非常慢

javascript - 创建对象 DOM twitter bootstrap 模式而不覆盖

javascript - 每第二次运行都会抛出 : MongoError: Topology was destroyed

javascript - 在 webRTC 中切换摄像头

javascript - 将 d3-force-3d 计算插入 3D 图形渲染器

javascript - 多个 webRTC 连接

JavaScript 在每个父 div 之后插入 href 值

three.js - 如何在沿 z 轴的某个高度创建 PlaneGeometry 对象?

javascript - 我们如何在不修改场景树结构或几何形状的情况下更改 Three.js 对象的旋转原点(枢轴点)?