2

私は、ユーザーが家と煙突のモデル (およびその他) のいくつかのバリエーションを選択できるデモに取り組んでいます。どんな家もどんな煙突とも組み合わせることができます。煙突は家の固定位置にありますが、どちらも動的にスケーリングできます。

これは、煙突の「世界」の位置が家の位置と規模に依存することを意味します。

glTFモデルを使用してCesium内でこの機能を作成するにはどうすればよいでしょうか? glTF は、別の glTF モデルを持つことができるノードをサポートしていますか? それとも、目的の機能を実現するために Cesium の modelMatrixes を使用する必要がありますか?

任意のポインタをいただければ幸いです。

4

2 に答える 2

1

glTF モデル構造をたどってジオメトリのサブセットを別のモデルに抽出できるかどうか、または少なくともモデル ジオメトリのブランチに異なる変換を適用できるかどうかはわかりません。しかし、glTF モデルが高度に最適化されているため、これが可能であるとは思えません。私はセシウムについてよく知らないので、これを最終的な回答と見なさないでください。

現時点では、アセット パイプラインの早い段階でジオメトリを分離し、それぞれのローカル座標系を中心とする個別のモデルをロードすることで、これを解決しています。私は手動で 1 つのオブジェクトの座標と向きを追跡し、手動で計算を行います。

var house = createModel("house", 'house/hull-lp.glb');
var chimney = createModel("chimney", 'models/chimney.glb');

そして、煙突を配置するには、...

var chimneyRelativePosition = new Cesium.Cartesian3(0, 10, 0);  // The position of the chimney relative to the origin of the house
var chimneyRelativePositionScaled = Cesium.Cartesian3.multiplyByScalar(chimneyRelativePosition, houseScaleFactor, chimneyRelativePositionScaled);
var localCoords = Cesium.Matrix3.fromQuaternion(house.orientation.getValue(), new Cesium.Matrix3());
var chimneyPosition = Cesium.Matrix3.multiplyByVector(localCoords, chimneyRelativePositionScaled, new Cesium.Cartesian3());

chimney.position = chimneyPosition;

編集:glTFはノード階層を保持するように設計されているため、フォーマットで許可されています。ただし、ノードとその変換を操作する方法はわかりません:(。

于 2016-06-12T15:29:16.637 に答える