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");

2番目のアラートがアクティブになることを期待していましたが、代わりに3番目のアラートを受け取りました。私のコードはinstanceofが正しいかどうかに依存しているので、これを修正するためにローダーで何を変更する必要があるかを誰かが知っていますか?

4

1 に答える 1

3

CTMLoader に組み込まれている 2 つの主な読み込み方法があります。 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 に答える