1

Sketchupを使用すると、コンポーネントを作成してジオメトリの再利用を容易にすることができます。たとえば、車のホイールをコンポーネントにすることができ、コンポーネントの4つのインスタンスを車の4つのホイールに使用できます。

問題は、再利用された各コンポーネントを独自の個別のTHREE.Object3dインスタンスに配置する方法です(その後、回転、配置、...つまり個別に制御できます)

つまり、車の4つの車輪のそれぞれを4つの別々のTHREE.Object3Dインスタンスとして取得する方法です。

これを行うために、sketchupからDAEをエクスポートし、Three.jsColladaLoaderを使用してロードしました。ただし、グループ化されたジオメトリはThree.jsではレンダリングされません。同じdae内のグループ化されていないジオメトリは、問題なくレンダリングされます。

daeをbelnderにインポートし、さらにthree.jsブレンダーエクスポーターを使用して.objとJSONにエクスポートするなど、いくつかの回避策を試しました。これらの回避策では、グループ化情報が失われます。

ColladaLoader.jsコードを掘り下げて、解決策がそこにあるかどうかを確認しようとしています。

このstackoverflowの質問は似ているようで(sketchupではなくblenderの場合)、1つの答えがありますが、答えは私が探しているものではありません。

ところで、DAEのグループ化されたジオメトリとグループ化されていないジオメトリの例は、次のスニペットに示されています。

<library_visual_scenes>
    <visual_scene id="ID1">
        <node name="SketchUp">
            <instance_geometry url="#ID19"> <!-- UN-GROUPED GEOMETRY -->
                <bind_material>
                    <technique_common>
                        <instance_material symbol="Material2" target="#ID6">
                            <bind_vertex_input semantic="UVSET0" input_semantic="TEXCOORD" input_set="0" />
                        </instance_material>
                    </technique_common>
                </bind_material>
            </instance_geometry>
            <node id="ID2" name="wheel1">  <!-- A RE-USE OF A COMPONENT -->
                <matrix>1.0000000 0.0000000 0.0000000 7.0639700 0.0000000 1.0000000 0.0000000 0.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000 0.0000000 0.0000000 1.0000000</matrix>
                <instance_node url="#ID3" />
            </node>
        </node>
    </visual_scene>
</library_visual_scenes>

上記のDAEスニペットは、コンポーネントの再利用のみを示しています。コンポーネントの実際のジオメトリは、の下のdaeに表示され<library_nodes>ます。

</library_visual_scenes>
<library_nodes>
    <node id="ID3" name="WheelComponent">
        <instance_geometry url="#ID4"> <!-- GEOMETRY OF A GROUP (COMPONENT) -->
            <bind_material>
                <technique_common>
                ...

助けていただければ幸いです。

4

1 に答える 1

0

問題は解決された。何が起こっていたかは次のとおりです。

ロードされたシーン(collada.scene.children [0])内のオブジェクトは、0.025倍にスケーリングされているようです。つまり、縮小されます。正しいズームやカメラの距離などを設定するとオブジェクトが表示されるため、これは問題ではありません。

この時点で、Sketchupオブジェクト(Sketchupコンポーネントではないオブジェクト)は表示されますが、Sketchupコンポーネントは表示されません。

その理由は、スケッチアップコンポーネントとグループが同じ係数0.025でさらにスケーリングされるためです。つまり、コンポーネントは、コンポーネントではないオブジェクトと比較して、係数0.025でスケーリングされます。

これは、コンポーネントが非コンポーネントと比較してサイズがはるかに小さくレンダリングされたことを意味します。

解決策は簡単です。

Colladaがロードされたら、すべてのコンポーネントと非コンポーネントを繰り返し処理し、それらのスケールを1に設定します。まだやるべきことがもう1つあります。この時点でコンポーネントは表示されていますが、正しい位置に表示されていません。これは、スケールアップしたのと同じ比率で位置を乗算することで解決されます。つまり、コンポーネント内のすべてのオブジェクトの位置に(1 / 0.025)を掛けます。

于 2013-03-17T05:21:53.890 に答える