使用Blender导出Three.js的JSON格式

4
使用three.js插件将Blender中的一些obj模型导出为json格式,在我的网页上会导致JavaScript错误。错误通常是像这样的:

TypeError:vertices未定义

在Three.js中,该错误位于以下行:

zLength = vertices.length;

json文件似乎格式不正确,需要进行什么更改?如何创建正确的obj文件?

json文件的格式非常不同,节点“vertices”不作为根节点出现,而是出现在嵌入节点内部:

"embeds" :
{
"emb___9903__30_1 __9903__30_1_8.002": {    "scale" : 1.000000,

"materials" : [],

"vertices" : [...]}

这种格式似乎不正确,但我不知道在导出为JSON或创建OBJ文件时该怎么做。

HTML / JS网页似乎正常工作,因为某些文件在浏览器中正确打开。

基本上我做的是:

function init()
{
...
var jsonLoader = new THREE.JSONLoader();
jsonLoader.load( "models/model.js", addModelToScene );
...
}

function addModelToScene( geometry, materials ) 
{
    var material = new THREE.MeshFaceMaterial( materials );
    modeltd = new THREE.Mesh( geometry, material );
    modeltd.scale.set(1,1,1);
    scene.add( modeltd );
}

部分解决: 问题出在导出时的“嵌入网格”标志,我已经取消选择,现在格式已经正确了。 不过我看到有人使用这种格式与“嵌入”节点,如何获取相关信息? - Gulp
1个回答

0
我曾经遇到了和你描述的完全一样的问题。以下是对我有效的解决方法(尽管我的输出目标可能不同):我获取了最新的导出器和three.js代码的开发分支,通过zip文件加载导出器而不是仅仅复制文件。(我提到这些可能有关系,但我怀疑解决方案如下)我将导出选项设置如下:
  • 场景:勾选场景;
  • 几何体:勾选顶点和面;
  • 材质:勾选面材质;
  • 所有其他项目都未被勾选或保留原始值。

导入器代码:

var loader = new THREE.JSONLoader();
loader.load(path /*<--not file system but url*/, doLoad );
console.log("success");
doLoad = function(g) {
    mesh = new THREE.Mesh(g, new THREEMeshBasicMaterial(someVal));
    mesh.scale.set(3,3,3); //perhaps the mesh is loaded but off the screen?
    scene.add(mesh);
}

另外,在调试时,知道我能够完全删除加载器并获得相同的错误可能会有所帮助。其中 g = ({/*json blob here*/})


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接