やあみんな、私はwpf 3dで作業しています、私は現在、画面の左から右に3Dタイルを作成するプログラムを書いていますが、X、Y、つまり(-x-0)(0- x +)だから、タイルの別の行をいつ開始するかがわかります。私の最初の考えは、ピクセルから画面座標に移動するための複雑なアルゴリズムを理解しようとしていますが、もっと簡単な方法があるはずです。
1 に答える
私があなたのことを正しく理解していれば、Viewport3DVisual を介してどの範囲の 3D 座標が表示されるかを知りたがっています。
この質問の答えは 1 つではありません。その理由を理解するには、キッチンのテーブルに座って朝食を食べているときに、たまたま窓から外を見ていると想像してみてください。見える水平範囲は?ええと、遠くに約 5 マイル離れた青い山が見えますが、バック フェンスは 30 フィートしか見えません。つまり、可視領域は四角柱ではなく、ピラミッド型です。
肝心なのは、ビューポートを通して見える水平および垂直範囲が意味を持つ前に、関連する距離を指定する必要があるということです。
距離を指定したら、すべての計算を自分で行うことなく、ビューポートを特定の平面上の 3D ポイントにマッピングする方法を次に示します。
- 同じカメラ設定を使用して、別の Viewport3dVisual でモデルを作成しますが、モデルは目的の距離にある単一の大きな長方形のみで構成されます。
- ヒット テストを使用してビューポートの各コーナーをテストし、ヒット テスト結果のコールバックを受け取ります。
- ヒット テストの結果から四角形の座標を抽出し、それらを計算に使用します。
この手法には、カメラが向いている場所ならどこでも確実に機能するという利点があり、アニメートされたカメラなどでも機能します。
注: 質問を誤解していて、3D コンテンツを含む 2D でタイルの行をレイアウトすることについて単に質問している場合は、WrapPanel を使用するだけで説明した効果を得ることができます。データをバインドする場合は、WrapPanel の ItemPanelTemplate で ItemsControl または ListBox を使用します。