1

今日、WPFでいくつかの3Dを学び始め、いくつかの簡単な例(平面)をXAMLにコピーしましたが、それらはすべて機能しました。しかし、自分のニーズに合わせてカメラと飛行機の座標を調整すると、常に何も表示されません。

何が間違っているのかわかりません。また、データを検証するために(非常に単純な)3Dシーンもスケッチしましたが、すべて正しいようです。

誰かが次のXAMLをチェックして、私が間違っていることを教えてもらえますか?xz平面に平面を作成したいだけです。つまり、カメラを上から見下ろした、ある種の「床」です。

<Viewport3D>
    <Viewport3D.Camera>
        <PerspectiveCamera Position="0 1 0"
                           LookDirection="0 -1 0"
                           FieldOfView="60"/>
    </Viewport3D.Camera>
    <Viewport3D.Children>
        <ModelVisual3D>
            <ModelVisual3D.Content>
                <AmbientLight Color="White"/>
            </ModelVisual3D.Content>
        </ModelVisual3D>
        <ModelVisual3D>
            <ModelVisual3D.Content>
                <GeometryModel3D>
                    <GeometryModel3D.Geometry>
                        <MeshGeometry3D>
                            <MeshGeometry3D.Positions>
                                <Point3D X="-1" Y="0"   Z="1"/>
                                <Point3D X="1"  Y="0"   Z="1"/>
                                <Point3D X="1"  Y="0"   Z="-1"/>
                                <Point3D X="-1" Y="0"   Z="-1"/>
                            </MeshGeometry3D.Positions>
                            <MeshGeometry3D.TriangleIndices>
                                0 1 2  0 2 3
                            </MeshGeometry3D.TriangleIndices>
                            <MeshGeometry3D.Normals>
                                <Vector3D X="0" Y="1" Z="0"/>
                                <Vector3D X="0" Y="1" Z="0"/>
                                <Vector3D X="0" Y="1" Z="0"/>
                                <Vector3D X="0" Y="1" Z="0"/>
                                <Vector3D X="0" Y="1" Z="0"/>
                                <Vector3D X="0" Y="1" Z="0"/>
                            </MeshGeometry3D.Normals>
                        </MeshGeometry3D>
                    </GeometryModel3D.Geometry>
                    <GeometryModel3D.Material>
                        <MaterialGroup>
                            <DiffuseMaterial>
                                <DiffuseMaterial.Brush>
                                    <SolidColorBrush Color="Red" Opacity="0.75"/>
                                </DiffuseMaterial.Brush>
                            </DiffuseMaterial>
                        </MaterialGroup>
                    </GeometryModel3D.Material>

                </GeometryModel3D>
            </ModelVisual3D.Content>
        </ModelVisual3D>
    </Viewport3D.Children>

</Viewport3D>

編集:カメラのPositionとLookDirectionを試したところ、LookDirectionを平面に垂直にならないように変更したときに、最終的に何かが表示されました。たとえば、次のようになります。

<PerspectiveCamera Position="0 2 0"
                   LookDirection="0 -2 1"
                   FieldOfView="60"/>

これは正常な動作ですか?

どうもありがとう!

gehho。

4

1 に答える 1

2

カメラを向けるときは、上向きのベクトルと見ている方向に注意することが重要です。

この問題は、Upベクトル(PerspectiveCamera.UpDirection)のデフォルト値である[0,1,0]に起因します。カメラのルックアップベクトルとアップベクトルは平行であってはなりません。その場合、どちらの方向が上かを判断することが不可能になるためです。

モデルはXZ平面にあり、モデルを見下ろしたいので、UpDirectionを[0,0,1]または[1,0,0]に設定するだけで、上向きがいずれかの方向を指すようになります。それぞれZ軸またはX軸。ただし、カメラがすべての方向を向くようにすることを計画している場合は、アップベクトルにも注意を払う必要があります。

于 2010-03-10T21:39:19.497 に答える