Three.js - 可以使用JSON声明对象吗?

时间:2013-08-06 09:54:07

标签: json three.js scenejs

我正在为我的项目决定最好的Javascript 3D库。

我比Three.js更喜欢Scene.js,,但Scene.js的编码风格似乎更有效,因为我需要动态创建大约100个对象,这意味着声明数百个变量Three.js

Three.js中,似乎对于每个不同的对象,您需要定义变量并将它们添加到场景中,如下所示:

var renderer = new THREE.WebGLRenderer();
var camera =
  new THREE.PerspectiveCamera(
    VIEW_ANGLE,
    ASPECT,
    NEAR,
    FAR);

var scene = new THREE.Scene();

var sphere = new THREE.Mesh(

  new THREE.SphereGeometry(
    50,
    16,
    16),

  sphereMaterial);

scene.add(sphere);

Scene.js中,对象是以类似JSON的结构创建的,如下所示:

var scene = SceneJS.createScene({
    nodes:[
        {
            type:"material",
            color: { r: 0.3, g: 0.3, b: 1.0 },

            nodes:[
                {
                    type: "rotate",
                    id: "myRotate",
                    y: 1.0,
                    angle: 0,

                    nodes: [
                        {
                            type:"geometry",
                            source:{
                                type:"teapot"
                            }
                        }
                    ]
                }
            ]
        }
    ]
});

现在我的问题是,如果可以在Three.js中使用更类似JSON的编码风格吗?

我已经发现了THREE.JSONLoader,但由于Three.js没有很好的文档,我发现很难发现这是否适合我。它似乎更多地针对3D软件的转换模型,但我真的需要自己构建对象。

2 个答案:

答案 0 :(得分:3)

是的,您可以使用JSON在Three.js中定义几何。您可以像这样直接解析JSON(未经测试,但至少有想法):

    var json = { .... }; // your JSON geometry, not as string but already parsed object 
    var loader = new THREE.JSONLoader();
var result = loader.parse(json, texturePath);
    var mesh = new THREE.Mesh(result.geometry, result.materials);

这可用于仅定义几何(和材质)。

我同意文档很少。幸运的是,所有Three.js JSON格式都具有人类可读性。您可以查看现有的示例模型,或者查看https://github.com/mrdoob/three.js/wiki/JSON-Model-format-3.1几何JSON格式以与JSONLoader一起使用。

对于复杂的场景层次结构(多个几何图形,灯光等),您可以使用明显未记录的ObjectLoader JSON格式,其方式与JSONLoader格式类似。为了检查ObjectLoader JSON格式,我建议在src / loaders / ObjectLoader.js上阅读源代码和/或使用http://threejs.org/editor/生成样本文件(文件 - >导出场景/对象)

答案 1 :(得分:0)

你可以看一下GLGE'快速记谱法':http://www.glge.org/(我还没有深入研究BTW,所以我不确定如果它符合你的需要)。

如果您使用SceneJS,请确保其功能首先满足您的要求,因为它具有比THREE.js更窄的功能集,更适用于高细节可视化而非广泛的渲染效果。

如果我是你,我会跳进来为THREE.js编写你自己的开源JSON层,从你需要的开始。我相信你很快就能让参与者填补其余部分。