正在 Three.Dart 中加载一个对象
Loading an object in Three.Dart
我正在尝试为 DART (Three.dart) 使用移植的 Three.JS 并加载位于我的项目根目录中的目标文件,在根目录中我也有 index.html 和 main.dart 个文件。
基本上我一直在关注 https://github.com/threeDart/three.dart/tree/master/example/web_gl_loader_stl 上的一个演示,那里没有用于 OBJLoader class 的演示,但是自从编写了这些示例后,它就已经实现了。
我用来尝试加载对象的代码如下:
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?。但是之后就没有运气了。
关于我如何进行的任何评论?你在加载代码中看到任何问题吗?如果没有,我可以提供整个代码库的要点。
我不使用 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
这样的异步方法(returns 未来)时,只注册一个回调并执行以下代码(在你的情况下 });
之后。当这个同步线程结束后,注册回调队列一个接一个注册。
新的 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 不会改变执行,它只会改变代码的外观。
见
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。
我正在尝试为 DART (Three.dart) 使用移植的 Three.JS 并加载位于我的项目根目录中的目标文件,在根目录中我也有 index.html 和 main.dart 个文件。
基本上我一直在关注 https://github.com/threeDart/three.dart/tree/master/example/web_gl_loader_stl 上的一个演示,那里没有用于 OBJLoader class 的演示,但是自从编写了这些示例后,它就已经实现了。
我用来尝试加载对象的代码如下:
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?。但是之后就没有运气了。
关于我如何进行的任何评论?你在加载代码中看到任何问题吗?如果没有,我可以提供整个代码库的要点。
我不使用 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
这样的异步方法(returns 未来)时,只注册一个回调并执行以下代码(在你的情况下 });
之后。当这个同步线程结束后,注册回调队列一个接一个注册。
新的 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 不会改变执行,它只会改变代码的外观。
见
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。