문제

나는 오늘 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>

편집하다: 방금 카메라의 위치와 룩 방향을 실험했고 마침내 룩 방향을 변경했을 때 무언가를 보았습니다. 수직이 아닙니다 예를 들어 비행기에 :

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

이것이 정상적인 행동입니까?

많은 감사합니다!

Gehho.

도움이 되었습니까?

해결책

카메라를 가리키면 조심하는 것이 중요합니다. 위 벡터 외모 방향뿐만 아니라.

문제는 UP 벡터의 기본값에서 비롯됩니다 (PerspectiveCamera.UpDirection), [0,1,0]. 카메라의 외관과 벡터는 평행하지 않아야합니다.이 경우 어떤 방식으로 상승하는지 말하기는 불가능하기 때문입니다.

모델이 XZ 평면에 있고 그것을 내려다보고 싶기 때문에, 당신은 단순히 [0,0,1] 또는 [1,0,0]로 업데이트를 설정하여 각각 z 또는 x 축. 그러나 카메라가 모든 방향으로 볼 수 있도록 할 계획이라면 UP 벡터도 처리해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top