在Three.Dart中加载对象

时间:2015-03-06 13:42:23

标签: object model three.js dart

我试图使用移植的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?。但那之后没有运气。

关于我如何进行的任何评论?你在加载代码中看到任何问题吗?如果不是,我可以提供整个代码库的要点。

2 个答案:

答案 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。

相关问题