【问题标题】:Simply assign a Material to loaded .OBJ - ThreeJS只需将材质分配给加载的 .OBJ - ThreeJS
【发布时间】:2018-08-30 18:24:35
【问题描述】:

这三个小时以来,我一直在用这个来打击自己。 我的问题是,是否有人愿意以这样的方式重新组织我的示例,使我加载的对象带有颜色,任何颜色

                var loader = new THREE.OBJLoader()
                loader.load( 'learning/exported1.obj', function ( object ) 
                {
                    object.traverse( function (child)
                    {
                        if ( child instanceof THREE.Mesh )
                        {
                            child.material.color.setHex( 0xffffff );
                        }
                    }
                    var OBJBoundingBox = new THREE.Box3().setFromObject(object);
                    OBJBoundingBox.center(object.position);
                    object.position.multiplyScalar(-1);
                    object.position.x = object.position.x;
                    object.position.y = object.position.y;
                    object.position.z = object.position.z;
                    scene.add( object );

                }, onProgress, onError );

如果我将遍历部分扔掉,则对象已成功加载,但为简单的白色,使用它,对象不会出现在我的屏幕上...

        <script src="../build/three.js"></script>

    <script src="js/loaders/OBJLoader.js"></script>

    <script src="js/controls/OrbitControls.js"></script>

    <script src="js/shaders/CopyShader.js"></script>
    <script src="js/shaders/SMAAShader.js"></script>

    <script src="js/postprocessing/EffectComposer.js"></script>
    <script src="js/postprocessing/SMAAPass.js"></script>
    <script src="js/postprocessing/RenderPass.js"></script>
    <script src="js/postprocessing/MaskPass.js"></script>
    <script src="js/postprocessing/ShaderPass.js"></script>

    <script src="js/libs/dat.gui.min.js"></script>  

如果您认为问题出在此处,这些是我的导入

提前非常感谢,这是一个我正在独立开发的项目,如果我能让它工作,我会很高兴的!

【问题讨论】:

  • 您是否正在执行所有这些后处理效果?也许他们正在洗掉你的颜色。您是否尝试过在场景中添加一个简单的 THREE.BoxGeometry() 以查看是否出现?可能是您的相机朝向错误的方向。也许您正在使用 .multiplyScalar(-1);... 将对象移出视线范围,这可能是数百种东西。你在看什么?
  • 嗨,是的,我将这些导入用于 AntiAlias 我的对象。当然,我可能不需要所有这些...问题是,当我删除代码的 object.traverse 部分时-因此其余代码以 var OBJBoundingBox 开头-我将对象很好地放置在我的屏幕中间但是是有光泽的白色。应用颜色的方式有问题,就像我加载背景的遍历功能一样,但没有加载对象……老实说,我在这里放弃了,我想知道为什么简单地分配材质这么难…… .object.material.color.set 有人吗? :P

标签: three.js loader .obj


【解决方案1】:

我觉得自己像个白痴,但我缺少的是

);

在object.traverse函数的末尾

var loader = new THREE.OBJLoader()
            loader.load( 'learning/exported1.obj', function ( object ) 
            {
                object.traverse( function (child)
                {
                    if ( child instanceof THREE.Mesh )
                    {
                        child.material.color.setHex( 0xffffff );
                    }
                });
                // ^This over here^
                var OBJBoundingBox = new THREE.Box3().setFromObject(object);
                OBJBoundingBox.center(object.position);
                object.position.multiplyScalar(-1);
                object.position.x = object.position.x;
                object.position.y = object.position.y;
                object.position.z = object.position.z;
                scene.add( object );

            }, onProgress, onError );

现在可以使用此代码完美地分配材料。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多