Three.js - можно ли использовать JSON для объявления объектов?
Я пытаюсь выбрать лучшую библиотеку 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"
}
}
]
}
]
}
]
});
Теперь мой вопрос: возможно ли использовать более JSON-подобный стиль кодирования с Three.js
также?
Я уже узнал о THREE.JSONLoader
, но поскольку Three.js не имеет очень хорошей документации, мне очень трудно понять, будет ли это правильным для меня. Кажется, он больше нацелен на преобразованные модели из 3D-программного обеспечения, но мне действительно нужно создавать объекты самостоятельно.
2 ответа
Да, вы можете использовать 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. Для проверки формата JSON ObjectLoader я предлагаю прочитать исходный код в src / loaders / ObjectLoader.js и / или создать примеры файлов с помощью http://threejs.org/editor/ (File-> Export Scene / Object)
Вы можете взглянуть на "Краткую нотацию" GLGE: http://www.glge.org/ (я не слишком углублялся в этот BTW, поэтому не уверен, подходит ли он вашим потребностям).
Если вы используете SceneJS, сначала убедитесь, что его функции соответствуют вашим требованиям, поскольку он имеет более узкий набор функций, чем THREE.js, и предназначен больше для визуализации с высокой детализацией, а не для широкого спектра эффектов рендеринга.
Хотя на вашем месте я бы запрыгнул и написал ваш собственный JSON-слой с открытым исходным кодом для THREE.js, начиная с того, что вам нужно. Я уверен, что вы получите вкладчиков, заполняющих остальные достаточно скоро.