您好我需要将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/
由于
答案 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 );
} );