javascript - Three.js:更改网格颜色导致只有 1 个面受到更改的影响
问题描述
所以我有一个 GLB 格式的模型(来自 CAD 的组件),其中包含许多部件、层次结构等。我想要完成的是在鼠标悬停时突出显示一个对象(特别是组件的一部分)。
所以这样做的主要代码是:
raycaster.setFromCamera( pointer, camera );
const intersects = raycaster.intersectObjects(scene.children, true);
if ( intersects.length > 0 ) {
if ( INTERSECTED != intersects[ 0 ].object ) {
if ( INTERSECTED ) INTERSECTED.material.color.set( INTERSECTED.currentColor );
INTERSECTED = intersects[ 0 ].object;
INTERSECTED.currentColor = INTERSECTED.material.color.getHex();
INTERSECTED.material = INTERSECTED.material.clone();
INTERSECTED.material.color.setHex( 0xffb300 );
}
} else {
if ( INTERSECTED ) INTERSECTED.material.color.set( INTERSECTED.currentColor );
INTERSECTED = null;
}
但不幸的是,我得到的结果是只有 1 个面发生了颜色变化,其余的网格没有。我已经尝试了很多东西,但我在three.js上是个新手,所以基本上我不知道
解决方案
对于将来遇到同样问题的任何人:出于某种原因,step->glb 转换为每个对象面创建了一个独立的网格。因此,为了突出整个部分,我必须更改 object.parent.children 中每个对象的材质
推荐阅读
- typescript - 创建具有名称和类型属性的类型值的对象
- reactjs - 通过 remember_token 进行身份验证
- xml - 如何使用 xslt 更改单个标签?
- algorithm - 删除包含无效元素的矩阵的行或列,保持 PCA 的最大有效元素不变
- windows - 无法在 Windows cmd 中将“^”作为命令行参数传递
- c# - 获取 Azure 弹性池中的数据库数量
- ms-access - 从 Ms Access 2010 的报告中隐藏零值余额行
- ssl - 使用 tls_client_method 时使用的是什么 TLS/SSL 协议?
- laravel - laravel vapor schedule 作业未按计划运行
- neo4j - Neo4j 检查创建结果最佳实践