如果我修改示例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是正确的,有没有人知道我需要在加载器中更改什么才能解决这个问题?
答案 0 :(得分:3)
CTMLoader内置了两种主要的加载方法:根据useBuffers参数,它创建BufferGeometry或Geometry。您可能希望首先检查BufferGeometry(它不是Geometry的子类),或者将useBuffers参数设置为false(我不熟悉CTM,所以我不知道缓冲vs的文件格式是否不同正常)。
无论如何,Three.js类的处理可能有点难以跟踪,并且一些相关的类可能不共享父类。你可能会或可能不会同意,但我可能会做检查"if it looks like a duck, it is a duck"式的实例。因此,检查仅存在于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");
}