我试图使用移植的Three.JS for DART(Three.dart)并加载位于我的项目根目录中的目标文件,在root中我也有index.html和main.dart文件。
基本上我一直在关注在https://github.com/threeDart/three.dart/tree/master/example/web_gl_loader_stl找到的演示,那里没有OBJLoader类的演示,但是由于这些例子已经写好,所以已经实现了。
我用来尝试加载对象的代码如下:
loader = new OBJLoader();
loader.load('zergling.obj').then((object) {
var geometry = object.geometry;
var mesh = new Mesh(geometry, material);
mesh.position.setValues(0.0, -0.37, -0.6);
mesh.rotation.setValues(-Math.PI / 2, 0.0, 0.0);
mesh.scale.setValues(2.0, 2.0, 2.0);
mesh.castShadow = true;
mesh.receiveShadow = true;
scene.add(mesh);
});
对象是一个简单的小狗。我稍后在代码中渲染场景,但它似乎无法工作。
我也看过这个帖子How to load obj model via three.dart?。但那之后没有运气。
关于我如何进行的任何评论?你在加载代码中看到任何问题吗?如果不是,我可以提供整个代码库的要点。
答案 0 :(得分:1)
我没有使用Three.dart,我只是简单地看了一下你的代码,但我认为你的代码错过了在调用异步代码时用.then((..) ...)
链接后续代码
loader.load('zergling.obj').then((object) {
...
}).then((x) {
// here the result is available
renderer = new WebGLRenderer(antialias: true, alpha: false);
renderer.setSize(window.innerWidth, window.innerHeight);
...
});
// here no result has yet been loaded
当您所有的异步方法(如load
(返回未来))时,只会注册一个回调并执行以下代码(在});
之后)。当此同步线程结束时已注册的回调队列是一个接一个地注册的。
新的async / await功能可以更轻松地使用此类代码
Future someFunc() async {
// here the result is available
var object = await loader.load('zergling.obj');
var geometry = object.geometry;
var mesh = new Mesh(geometry, material);
mesh.position.setValues(0.0, -0.37, -0.6);
mesh.rotation.setValues(-Math.PI / 2, 0.0, 0.0);
mesh.scale.setValues(2.0, 2.0, 2.0);
mesh.castShadow = true;
mesh.receiveShadow = true;
scene.add(mesh);
}
您需要一个开发频道Dart版本(1.9.0-dev ...)才能使用此新功能。 使用async / await不会改变执行,它只会改变代码的样式。
见
答案 1 :(得分:0)
loader = new OBJLoader();
loader.load('zergling.obj').then((object) {
var mesh = object;
mesh.position.setValues(0.0, -0.37, -0.6);
mesh.rotation.setValues(-Math.PI / 2, 0.0, 0.0);
mesh.scale.setValues(2.0, 2.0, 2.0);
mesh.castShadow = true;
mesh.receiveShadow = true;
scene.add(mesh);
});
这对我有用。 object
是一个Object3D。