【问题标题】:Three.js load a single .obj model , how to show vertex colors三.js加载单个.obj模型,如何显示顶点颜色
【发布时间】:2020-03-31 17:43:21
【问题描述】:

我是 Three.js (3D) 的新手,有一个简单的问题。我有以下代码可以正常工作,但我认为结果失去了颜色,因为我用 3D Buidler(WIN10)打开 test.obj 文件,模型表面有很多颜色。为什么?

代码

var loader = new THREE.OBJLoader()
loader.load( 'test.obj', function ( object ) {
    object.position.y = 0;
    scene.add( object );                
} );

我认为是顶点颜色,如何显示它的顶点颜色?

var loader = new THREE.OBJLoader2()
loader.load( 'test.obj', function ( object ) {
    object.position.y = 0;
    scene.add( object );                
} );

我尝试过 OBJLoader2.js ,但它不起作用,需要一些设置吗?

Three.js 加载的结果:

3D Builder 加载的结果:

The obj file

【问题讨论】:

  • 您可能需要检查材料在被ObjLoader 加载后是如何解释的。而且您可能需要为材质分配一些值。
  • 谢谢,但是我用3D Builder打开.obj文件时什么也没做,而且没有.mtl文件,所以不知道怎么解决这个问题
  • 如前所述,OBJLoader 可能丢失了一些材质参数,因此您必须通过代码重新分配材质值。可以上传原贴图吗?
  • 我刚刚上传了obj文件(只有一个.obj文件,对不起文件链接,因为我没有足够的声誉。TT)
  • @sensen 改用OBJLoader2.js,您应该会看到顶点颜色。

标签: colors three.js .obj


【解决方案1】:

将 .mtl 文件与 .obj 文件一起使用。

var onProgress = function ( xhr ) {
                if ( xhr.lengthComputable ) {
                    var percentComplete = xhr.loaded / xhr.total * 100;
                    console.log( Math.round(percentComplete, 2) + '% downloaded' );
                }
            };

            var onError = function ( xhr ) { };

            THREE.Loader.Handlers.add( /\.dds$/i, new THREE.DDSLoader() );

            //Car model
            var mtlLoader = new THREE.MTLLoader();
            mtlLoader.setPath( '../materials/car/' );
            mtlLoader.load( 'car.mtl', function( materials ) {

                materials.preload();

                var objLoader = new THREE.OBJLoader();
                objLoader.setMaterials( materials );
                objLoader.setPath( '../materials/car/' );
                objLoader.load( 'car.obj', carObject, onProgress, onError );

            });

            function carObject(object){
                object.rotation.y = 1.55;
                object.position.z = 105;
                object.position.y = 1.15;

                object.scale.x = object.scale.y = object.scale.z = 0.15;
                    //object.rotation.x = 6.5;
                    //object.position.z = 50;

                scene.add( object );
            }
            //end car model

【讨论】:

【解决方案2】:

最后我发现了: 我将 OBJLoader2.js 的版本更改为 1.3.0。

【讨论】:

    猜你喜欢
    • 2020-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 2021-07-31
    • 1970-01-01
    • 2016-12-26
    相关资源
    最近更新 更多