【问题标题】:Why color of mesh does not change (using three.js)?为什么网格的颜色不会改变(使用three.js)?
【发布时间】:2016-03-04 11:14:51
【问题描述】:

我正在使用three.js来创建一些对象:

    // it probably does not matter where geom1 or geom2 comes from
    var materials = [
        new THREE.MeshLambertMaterial( { opacity: 0.2, color: 0x000000, transparent:false, side: THREE.DoubleSide } ),
        new THREE.MeshBasicMaterial( { color: 0x445555, wireframe: true } )

    ];
    mesh2 = THREE.SceneUtils.createMultiMaterialObject(geom2,materials);

    var material = new THREE.MeshBasicMaterial( {color: 0xEEEEEB, transparent:false, side: THREE.DoubleSide } );
    mesh1 = new THREE.Mesh(geom1,material);
    mesh1.material.color.setHex( 0xEEEEEB );

从代码中可以看出,我尝试以两种方式创建材料。在这两种情况下,我给颜色参数赋予什么值都没有关系,颜色永远不会改变(它总是灰色)。除非我调整不透明度,否则它当然会变得更暗或更亮。我在这里想念什么?

【问题讨论】:

  • color 0xEEEEEB 是灰色.. 十六进制是红色,绿色,蓝色 0xRRGGBB 所以 0xff0000 是红色,mesh1 = new THREE.Mesh(geom1,m); - m 是未定义的,如果你在创建后更改材质的颜色设置material.needsUpdate = true
  • 哦,那个米。我忘了把它的名字改成材料。 mesh1.material.needsUpdate = true 工作!再次感谢@Derte Trdelnik:)。但仍然:为什么即使在我的 MeshLamberMaterial 对象上放置 '0x33cc33' 而不是 '0x000000' 后,mesh2 仍然是灰色的,而当我将颜色更改为 '0x33cc33' 行'new THREE.MeshBasicMaterial({颜色:0x445555,线框:真} )' 它改变了。

标签: colors three.js mesh


【解决方案1】:

在其声明之外更新颜色后,设置 needsUpdate 参数

material.needsUpdate = true;

因为

new THREE.MeshLambertMaterial( {  color: 0x33cc33, side: THREE.DoubleSide } )

显示为灰色/灰色阴影,您可能在场景中没有任何灯光,添加一个尝试

scene.add(new THREE.AmbientLight(0xffffff))

或设置 LambertMaterial 的自发光颜色

new THREE.MeshLambertMaterial({color: 0x33cc33, side: THREE.DoubleSide, emissive: 0x33cc33})

让它发出颜色

【讨论】:

  • 奇怪的事情。 1) 我有 SpotLight 和 AmbientLight,将 emissive: 0x33cc33 添加到 MeshLambertMaterial 不会改变任何东西。 2)当我将 MeshLambertMaterial 更改为 BasicMeshMaterial 时,一切正常你帮助我看到了我的错误并解决了问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-23
  • 1970-01-01
  • 1970-01-01
  • 2020-11-08
  • 1970-01-01
  • 2020-11-01
相关资源
最近更新 更多