将 envMap 添加到 model.json 材料
Add envMap to model.json materials
我已经使用 blender 将对象导出为 .json 格式以使用 three.js 显示,一切顺利,我手动将所有地图添加到导出文件(导出器不包括但一旦在搅拌机中映射好,手动添加很容易)
model.json:
"materials":[{
"DbgColor":15658734,
"DbgIndex":0,
"DbgName":"FrontCol",
"blending":"NormalBlending",
"shading":"phong",
"colorDiffuse":[1.0,1.0,1.0],
"mapDiffuse" : "model_d.png",
"mapDiffuseWrap" : ["repeat", "repeat"],
"colorSpecular":[0.8,0.4,0.0],
"mapSpecular" : "model_s.jpg",
"mapBump" : "model_b.jpg",
"mapBumpScale" : 4
}
我需要应用 environmap 以获得更丰富的反射,通常很容易用 three.js 定义并添加
index.html:
var material = new THREE.MeshPhongMaterial( {
envMap: mapEnvironment
} );
这能做到吗?如果是,怎么做?
我正在努力解决类似的问题,虽然我无法直接在 JSON 中加载它,但这里的解决方法是在导入期间为所有网格分配它。然后,根据你的 material 反射率,你会在 material 上看到它,或者看不到它:
var objectLoader = new THREE.ObjectLoader();
objectLoader.load( "file.json" , function ( obj ) {
obj.traverse( function ( child ) {
if ( child instanceof THREE.Mesh ) {
child.material.envMap = mapEnvironment;
}
});
这会保留 JSON 中的 material 属性,只需在顶部添加此 属性。
编辑:这是 JSONLoader 的版本:
var loader = new THREE.JSONLoader();
loader.load( 'file.json', function ( geometry, materials ) {
for ( var k in materials ) {
materials[k].envMap = mapEnvironment;
}
mesh = new THREE.Mesh(geometry, new THREE.MultiMaterial(materials));
scene.add( mesh );
});
我已经使用 blender 将对象导出为 .json 格式以使用 three.js 显示,一切顺利,我手动将所有地图添加到导出文件(导出器不包括但一旦在搅拌机中映射好,手动添加很容易)
model.json:
"materials":[{
"DbgColor":15658734,
"DbgIndex":0,
"DbgName":"FrontCol",
"blending":"NormalBlending",
"shading":"phong",
"colorDiffuse":[1.0,1.0,1.0],
"mapDiffuse" : "model_d.png",
"mapDiffuseWrap" : ["repeat", "repeat"],
"colorSpecular":[0.8,0.4,0.0],
"mapSpecular" : "model_s.jpg",
"mapBump" : "model_b.jpg",
"mapBumpScale" : 4
}
我需要应用 environmap 以获得更丰富的反射,通常很容易用 three.js 定义并添加
index.html:
var material = new THREE.MeshPhongMaterial( {
envMap: mapEnvironment
} );
这能做到吗?如果是,怎么做?
我正在努力解决类似的问题,虽然我无法直接在 JSON 中加载它,但这里的解决方法是在导入期间为所有网格分配它。然后,根据你的 material 反射率,你会在 material 上看到它,或者看不到它:
var objectLoader = new THREE.ObjectLoader();
objectLoader.load( "file.json" , function ( obj ) {
obj.traverse( function ( child ) {
if ( child instanceof THREE.Mesh ) {
child.material.envMap = mapEnvironment;
}
});
这会保留 JSON 中的 material 属性,只需在顶部添加此 属性。
编辑:这是 JSONLoader 的版本:
var loader = new THREE.JSONLoader();
loader.load( 'file.json', function ( geometry, materials ) {
for ( var k in materials ) {
materials[k].envMap = mapEnvironment;
}
mesh = new THREE.Mesh(geometry, new THREE.MultiMaterial(materials));
scene.add( mesh );
});