我正在为我的项目决定最好的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软件的转换模型,但我真的需要自己构建对象。
答案 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层,从你需要的开始。我相信你很快就能让参与者填补其余部分。