【发布时间】:2014-03-01 05:57:31
【问题描述】:
我正在尝试从 Maya 导入一个对象,这是 json 文件
{
"metadata" :
{
"formatVersion" : 3.1,
"sourceFile" : "myobj.obj",
"generatedBy" : "OBJConverter",
"vertices" : 22470,
"faces" : 42837,
"normals" : 128511,
"colors" : 0,
"uvs" : 52126,
"materials" : 1
},
"scale" : 1.000000,
"materials": [ {
"DbgColor" : 15658734,
"DbgIndex" : 0,
"DbgName" : "lambert2SG",
"colorAmbient" : [0.0, 0.0, 0.0],
"colorDiffuse" : [0.0, 0.0, 0.0],
"illumination" : 4,
"mapDiffuse" : "mytexture.tga",
"opticalDensity" : 1.0
}],
"vertices": [...] //Omitted because there are too many
"morphTargets": [],
"morphColors": [],
"normals": [...],
"colors": [],
"uvs": [...],
"faces": [...]
}
这是我加载 JSON 文件的方式:
这是我如何初始化场景并加载 json 文件。我有一个很大的远点,因为物体很大:
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 100000);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
var controls = new THREE.OrbitControls(camera);
document.body.appendChild(renderer.domElement);
var jsonLoader = new THREE.JSONLoader();
var mesh;
var render = function () {
stats.update();
controls.update();
requestAnimationFrame(render);
renderer.render(scene, camera);
}
jsonLoader.load("Mesh/myobj.js", function(geometry, materials){
console.log(materials); // This prints an array, whose first element is a MeshLambertMaterial.
mesh = new THREE.Mesh(geometry, new THREE.MeshLambertMaterial( materials ));
// If I remove the second parameter,
//the object renders correctly without texture.
//Otherwise the screen shows nothing.
console.log(geometry);
scene.add(mesh);
});
render();
camera.position.y = 10000;
对不起,如果我做了一些愚蠢的事情。我是three.js的新手。 如果我将纹理应用于对象,屏幕将不显示任何内容。我已经尝试了我能找到的一切。请帮忙!
【问题讨论】:
-
试试
new THREE.MeshFaceMaterial( materials )。 -
@WestLangley 那没用。对不起:(
-
three.js 不支持 .tga 文件。将文件转换为 .png。
-
@WestLangley 我刚试过。没有。但我发现,如果它们附有材料,甚至是基本的蓝色立方体,它们都不会出现。可能我错过了一些东西。我正在用更多代码更新帖子。
-
我想我已经找到了问题(经过 6 小时的反复试验)。出于某种原因,我不能直接从 JSONLoader 应用材料。我必须使用 ImageUtils 从文件中手动加载纹理。 :(