1

如果我修改示例 webgl_loader_ctm.html 并在例程 callbackModel() 中添加以下代码行:

     if (geometry instanceof THREE.Object3D) alert("THREE.Object3D");
else if (geometry instanceof THREE.Geometry) alert("THREE.Geometry");
else alert("Unknown instanceof geometry");

我期待第二个警报被激活,但我得到了第三个。由于我的代码取决于 instanceof 是否正确,有人知道我必须在加载程序中更改什么才能解决此问题吗?

4

1 回答 1

3

CTMLoader 内置了两种主要的加载方法: 根据 useBuffers 参数,它创建 BufferGeometry 或 Geometry。您可能还想先检查 BufferGeometry(它不是 Geometry 的子类),或者将 useBuffers 参数设置为 false(我不熟悉 CTM,所以我不知道缓冲与普通的)。

无论如何,Three.js 对类的处理可能有点难以跟踪,并且一些相关的类可能不共享父类。你可能同意也可能不同意,但我可能会做一个检查“如果它看起来像一只鸭子,它就是一只鸭子”的实例- 样式。所以检查一些只存在于 Object3D 或类似对象中的属性:

if (geometry.lookAt) {
  alert("Looks like Object3D, I know what to do with this");
} else if (geometry.vertices) {
  alert("Looks like Geometry with some vertices, I know what to do with this");
} else {
  alert("I dont know how to handle this object");
}
于 2013-01-26T13:23:41.997 回答