Three.JS Environment MAP THREE.JSONLoader()

时间:2018-02-24 04:03:57

标签: javascript three.js

您好我需要将jpg文件(env.jpg)中的环境贴图加载到使用THREE.JSONLoader()加载的对象上,(我无法使用maya导出此贴图,因此需要像这样添加)我怎样才能做到这一点?我的代码吼叫。

谢谢

        loader.load(
            // resource URL
            'assets/alexander_test.json',

            // onLoad callback
            function ( geometry, materials ) {
                //new THREE.MeshNormalMaterial()
                var material = materials[ 0 ];
                console.log(material.normalMap);
                var object = new THREE.Mesh( geometry, material );
                object.castShadow = true;
                object.receiveShadow = true;
                object.traverse( function ( child ) {
                    if ( child instanceof THREE.Mesh ) {
                           child.receiveShadow = true;
                           child.castShadow = true;
                    }
                });

                scene.add( object );
            },

            // onProgress callback
            function ( xhr ) {
                console.log( (xhr.loaded / xhr.total * 100) + '% loaded' );
            },

            // onError callback
            function( err ) {
                console.log( 'An error happened' );
            }
        );

编辑:

这是在线示例:http://a3d.joladev2.com/webgl-env-map/index.html 这是环境地图:http://a3d.joladev2.com/webgl-env-map/assets/env.jpg

编辑:

这是一个工作小提琴:https://jsfiddle.net/xk12n88z/4/

由于

1 个答案:

答案 0 :(得分:0)

解决了,

所以在我的情况下(我不知道这是否正确),

OBJ和MTL加载器不会加载法线贴图或环境贴图,所以我不得不切换到json loader,它确实加载了法线贴图但不加载环境贴图。然后我切换到FBX加载器,它已经加载了所有东西

这是工作示例:http://a3d.joladev2.com/evironment-map-done/index.html

这是我使用的代码:

            var loader = new THREE.FBXLoader();
            loader.load( 'assets/6507T_webgl_nolights.fbx', function ( object ) {

                object.traverse( function ( child ) {

                    if ( child.isMesh ) {

                        child.castShadow = true;
                        child.receiveShadow = true;

                    }

                } );

                scene.add( object );

            } );