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

Three.js-可以使用JSON声明对象吗?,json,three.js,scenejs,Json,Three.js,Scenejs,我正在为我的项目选择最好的Javascript 3D库 我喜欢thire.js比Scene.js有点多,但是Scene.js的编码风格似乎更有效,因为我需要动态创建大约100个对象,这意味着用thire.js声明数百个变量 在Three.js中,似乎需要为每个不同的对象定义变量并将其添加到场景中,如下所示: var renderer = new THREE.WebGLRenderer(); var camera = new THREE.PerspectiveCamera( VIEW_

我正在为我的项目选择最好的Javascript 3D库

我喜欢
thire.js
Scene.js有点多,
但是
Scene.js
的编码风格似乎更有效,因为我需要动态创建大约100个对象,这意味着用
thire.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);
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"
                            }
                        }
                    ]
                }
            ]
        }
    ]
});
Scene.js
中,对象以类似JSON的结构创建,如下所示:

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);
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软件转换模型,但我真的需要自己构建对象。

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

这只能用于定义几何图形(和材质)

我同意文件是稀疏的。幸运的是,这三种.JSON格式几乎都是人类可读的。您可以检查现有的示例模型,或者查看JSONLoader使用的几何JSON格式


对于复杂的场景层次(多个几何体、灯光等),您可以使用明显未记录的ObjectLoader JSON格式,其方式与JSONLoader格式非常相似。对于检查ObjectLoader JSON格式,我建议阅读src/loaders/ObjectLoader.js上的源代码和/或使用(文件->导出场景/对象)生成示例文件。

您可以看看GLGE的“快速表示法”:(顺便说一句,我还没有深入研究该代码,所以我不确定它是否适合您的需要)

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


如果我是你,我会跳进去为THREE.js编写你自己的开源JSON层,从你需要的开始。我相信你会很快让贡献者填写剩下的内容。

也许我不是人类,但我认为这种JSON格式根本不可读。我正在寻找一种简单的方法,以类似JSON的方式构造多个对象,这在Scene.js中很常见(请参阅我问题中的示例)。我不想关心法线、顶点等,只关心基本的形状和材质。