ColladaLoader2.js - 随机颜色覆盖 .dae 文件设置 (three.js)

Posted

技术标签:

【中文标题】ColladaLoader2.js - 随机颜色覆盖 .dae 文件设置 (three.js)【英文标题】:ColladaLoader2.js - random colors are overwriting .dae file settings (three.js) 【发布时间】:2016-04-15 09:46:25 【问题描述】:

我正在使用 Three.js (r73) - 基于 ColladaLoader.js 中的一个错误,我转换到 ColladaLoader2.js。但是,当我使用 ColladaLoader2.js 加载 .dae 文件时,它不会采用 .dae 文件中定义的颜色,而是应用随机颜色。每次刷新页面时,对象的颜色都会随机变化。另外,我注意到灯光的阴影不再适用。

这里有两个例子来说明这个问题。这两个示例之间的唯一区别是一个使用 ColladaLoader.js,另一个使用 ColladaLoader2.js。其他一切都一样。

Ex 1 - ColladaLoader.js - .dae 文件加载并按预期显示(与 Blender 中的外观相同,这是 .dae 文件的导出位置) http://ngndev.com/share/three/cl.html

Ex 2 - ColladaLoader.js - 注意颜色和没有阴影?这是同一个 .dae 文件。尝试刷新页面。颜色每次都会变成一些随机的颜色。 http://ngndev.com/share/three/cl-2.html

有没有人遇到过这种情况或有解决方案?

下面是示例的摘录,展示了我如何添加 .dae。我实际上是在打开 .dae,遍历然后将其添加到场景中(如果它按名称匹配)。

var loader = new THREE.ColladaLoader();
    loader.options.convertUpAxis = true;

//Load in the part
loader.load('e3d-ppppp7.dae', function (collada)
    voxel = collada.scene;
    voxel.traverse(function (child)
        if (child.name.match("^e3d-")) 
            scene.add( child );
        
    );
); 

【问题讨论】:

ColladaLoader2 正在开发中。在 r.74dev 分支中尝试更新版本。如果你发现了一个bug,那么你可以在three.js网站上报告这个bug。 谢谢@WestLangley - 我被定向到更新的 ColladaLoader2.js 文件,这解决了问题。不幸的是,我的“向上”轴现在被扔掉了(如果您刷新上面的示例 #2,您将看到)。我尝试添加和删除“loader.options.convertUpAxis = true;”但这并没有解决问题。 作为一种解决方法,请尝试在加载程序回调中旋转几何图形。 mesh.geometry.rotateX( - Math.PI / 2 ). 我实施了这个变通办法,它成功了。如果它对其他人有用 - 我正在导入无数的“THREE.Group”和“THREE.Mesh”对象,所以我必须调整解决方法以适用于这两种情况(“几何”进一步嵌套在“集团”情况)。感谢@WestLangley 的快速回复 【参考方案1】:

ColladaLoader2 正在开发中以取代 ColladaLoader。试试three.js开发版(本例为r.74dev)

如果您在新加载程序中发现错误,请报告它会有所帮助。请参阅three.js guidelines 了解如何报告错误。

three.js r.73

【讨论】:

以上是关于ColladaLoader2.js - 随机颜色覆盖 .dae 文件设置 (three.js)的主要内容,如果未能解决你的问题,请参考以下文章

在HTML+CSS中如何实现上一个div覆盖下一个div的border-top部分?

[ javascript 创建随机颜色 ] 多种方式来创建随机颜色

我将如何阻止随机颜色随机选择两次相同的颜色[重复]

如何生成特定颜色的随机阴影列表? (例如橙色的随机阴影)

如何随机着色gridview(每行随机颜色)

使用事件侦听器(Javascript、jQuery)将 BG 颜色更改为随机颜色?