从 Three.js 编辑器导出场景并导入

use*_*129 5 javascript import export editor three.js

我使用在本地工作的three.js 的编辑器制作了一个简单的场景。完成场景后,我将转到“文件”->“导出场景”,编辑器生成 JSON 对象/场景。现在我将复制并粘贴此代码并像 .js 一样保存?我如何在我的项目中导入这个场景以保留纹理?

谢谢 !

小智 5

Develotecca 的回答显示了如何从 JSON 文件加载基本的 THREE.geometry。但是,根据我的经验,three.js 编辑器导出的几何图形属于 BufferGeometry 类型(比基本几何图形更有效),因此需要使用 THREE.BufferGeometryLoader 而不是 THREE.JSONLoader 加载它们。

此外,问题是关于保存和加载场景,而不是几何图形。JSONLoader 仅用于加载基本几何体,几何体仅包含单个模型的每顶点和每面信息(其中包括用于索引到 MeshfaceMatrial 的材料编号,但没有其他材料信息,因此需要结合使用前的材料)。如果您尝试使用 JSONLoader 加载整个场景,而不仅仅是场景中一个对象的一部分,加载器应该发现这一点并传递消息

THREE.JSONLoader:似乎是一个场景。使用 THREE.SceneLoader 代替。

到控制台日志。这为正确的处理方式提供了重要线索。

场景加载器记录在http://threejs.org/docs/#Reference/Loaders/SceneLoader(尽管文档目前不完整),其源代码位于https://github.com/mrdoob/three.js /blob/master/src/loaders/SceneLoader.js及其使用示例位于http://threejs.org/examples/webgl_loader_scene.html

所有这一切都需要经历很多。我自己还没有真正使用过 SceneLoader,虽然我打算很快使用,但从我目前所读到的内容来看,它看起来类似于 BufferGeometryLoader 或 JSONLoader,只是因为你正在加载整个场景而不是你所拥有的场景的一部分

scene = loaded.scene
Run Code Online (Sandbox Code Playgroud)

而不是

scene.add()
Run Code Online (Sandbox Code Playgroud)

并且您可能需要为您的场景使用的任何特殊几何图形包含其他加载器和处理程序,例如

<script src="js/loaders/ColladaLoader.js"></script>
..
loader.addHierarchyHandler( "dae", THREE.ColladaLoader );
Run Code Online (Sandbox Code Playgroud)

对于科拉达。


小智 2

加载 JSON 数据:

var jsonLoader = new THREE.JSONLoader();
jsonLoader.load("models/object.json", addModelToScene);

function addModelToScene(geometry, materials) {
    var material = new THREE.MeshFaceMaterial(materials);
    var object = new THREE.Mesh(geometry, material);
    object.scale.set(10, 10, 10);
    scene.add(object);
}
Run Code Online (Sandbox Code Playgroud)

示例: http: //stemkoski.github.io/Three.js/Model.html

其他示例: http: //all.develoteca.com/builder/