【问题标题】:ThreeJS MeshPhongMaterial renders black (MeshLambertMaterial renders correctly)ThreeJS MeshPhongMaterial 呈现黑色(MeshLambertMaterial 呈现正确)
【发布时间】:2016-04-14 02:17:29
【问题描述】:

这个问题有解决办法吗?如果我将 materialdefinition 从 MeshPhone 更改为 MeshLambert,一切都会按预期工作,否则就不会(但仅在某些计算机上,我的开发机器工作正常)。

http://peppr-configurator.herokuapp.com/#/

“MaterialConfService”中的“loadDefaultMaterialForObject”函数是加载它的地方。

var threeMaterial = new THREE.MeshPhongMaterial({
    specular: material.properties.specular,
    emissive: material.properties.emissive,
    shininess: material.properties.shininess,
});

将 'MeshPhongMaterial' 换成 'MeshLambertMaterial' 是可行的,但我需要 phong 来获得高光。

有人知道这里可能发生了什么吗?

【问题讨论】:

  • 您希望我们如何调试缩小的代码?
  • 我很抱歉。我已经上传了一个带有未缩小源代码的版本(确实将它们全部放在一个文件中)。在第 560 行的“MaterialConfService”中,它建立了材料。如果我将 'MeshPhongMaterial' 换成 'MeshLambertMaterial',一切都会按预期进行。现在,一切都变成黑色了。
  • 它在呈现黑色的机器上是否有任何错误?
  • 渲染循环出错,提示 Three.ShadowMapPlugin 的点光源设置有问题。我无法对其进行堆栈跟踪,因为打开调试器会使 chrome 崩溃;渲染循环在每一帧都遇到这个错误。相关地,看起来黑色的meshlambert 和meshphong 材料没有被灯光照亮。他们需要一个正常工作的灯来计算他们的视觉效果。某些浏览器可能无法像其他浏览器一样处理观察到的错误。我会切换到定向灯,看看问题是否仍然存在。小提琴也会有帮助。

标签: three.js


【解决方案1】:

无法重现错误,但我将从这里开始:

尝试注释掉 light.castShadow = true:

  var pLight = new THREE.PointLight(0xffffff,0.25);
  //pLight.castShadow = true;
  pLight.position.set(50,100,50);
  _this.scene.add(pLight);

  var pLight02 = new THREE.PointLight(0xefeeeee,0.2);
  //pLight02.castShadow = true;
  pLight02.position.set(-50,100,50);
  _this.scene.add(pLight02);

  var pLight03 = new THREE.PointLight(0xffffff,0.2);
  //pLight03.castShadow = true;
  pLight03.position.set(0,75,-75);
  _this.scene.add(pLight03);  

THREE.PointLight 无法投射阴影并导致错误

更多信息见https://github.com/mrdoob/three.js/issues/1192

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-12
    • 2017-09-10
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    相关资源
    最近更新 更多