下部にある質問の更新....
Ruby でカスタムの SketchUp エクスポート プラグインを作成しています。次に、エクスポートされたデータを使用して、Three.js でジオメトリを再作成します。
一部のコンポーネント/グループの変換で問題が発生し、ミラーリング、または一部の軸に「フリップアロング」が適用されたジオメトリまで追跡しました。簡単に言えば、裏返しは尊重されません。特定のエンティティにこの反転が適用されているかどうかを調べるための SU Ruby メソッドが見つかりません。
変換行列を取得して変換することはできますが (この質問の方法を参照してください)、これらの反転されたオブジェクトでは機能しません。結果の例を次に示します。モデルの残りの部分は問題ありませんが、ボートは明らかにボートの半分を反転して作成されており、この写真ではそれらがいたるところに表示されています。
これらの反転したジオメトリを適切に考慮するにはどうすればよいですか? SU Ruby には別のマトリックスやエンティティ フラグがありますか?
注 1) 組み込みの SketchUp Collada エクスポータ (Three.js ColladaLoader でロードする場合) で同様のバグのある動作を観察しました。
注 2) これは SketchUp Ruby API の問題だと思いますが、ミラーリングとマトリックスに関して明らかな不足がある場合に備えて、Three.js でタグ付けしました。
注 3) 形状が反転/反転ツールの代わりにスケール ツールを使用して反転/ミラー化されている場合 (実質的に同じ結果)、それらは正しく機能します。
アップデート:
この情報を適用するのにまだ苦労していますが、この情報に基づいて近づいています。
更新#2:
Thomthom のおかげで、回転していないオブジェクトに対して正しい反転を検出して適用することができました。単純な回転/スケーリング/反転していないコンポーネントの場合、マトリックスは次のとおりです。
1.0, 0.0, 0.0
0.0, 1.0, 0.0
0.0, 0.0, 1.0
反転 (ミラーリング) コンポーネントの場合、マトリックスは次のようになります。
-1.0, 0.0, 0.0
0.0, 1.0, 0.0
0.0, 0.0, 1.0
そのため、その反転を簡単に検出でき、すべて問題ありません。
しかし、同じコンポーネント (反転していない) をいくつかの軸で任意に回転させると、マトリックスは次のようになります。
-0.33, -0.58, 0,74
0.87, -0.50, 0,00
0.37, 0.64, 0,67
これは私のエクスポーター/インポーターで正しく機能し、Three.js 側でこのマトリックスを再適用できます。
しかし、すでに回転したコンポーネントもミラーリングされている場合、マトリックスは次のようになります。
0.33, 0.58, -0.74
0.87, -0.50, 0.00
0.37, 0.64, 0.67
このマトリックスを Three.js で正しく動作させることができず、コンポーネントがミラーリングされないため、図に示されている動作が発生します。
だから、私は何をすべきかわからない。object.scale.x = object.scale.x * -1;
より単純なケース (反転のみ、回転またはスケーリングなし) を検出し、そのようなコンポーネントに対してたとえば Three.js を設定することで、正しい結果を得ることができました。しかし、反転されているか、回転またはスケーリングされているアイテムの解決策はありません:(