【问题标题】:PerspectiveCamera WPF looking downwardsPerspectiveCamera WPF 向下看
【发布时间】:2012-12-21 10:54:47
【问题描述】:

我真的对 WPF 中的透视相机感到沮丧,它会做各种奇怪的事情,而且我在互联网上可以找到的所有解决方案都不适合我。

目前我有这个代码:

<Window x:Class="projectv1.Views.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525" Name="MainWin">
<Grid HorizontalAlignment="Stretch" >
    <Viewport3D Name="viewport3D1" >
        <Viewport3D.Camera>

            <PerspectiveCamera x:Name="camMain"  Position="-500 -10 300" LookDirection="0 -0.2 -1" UpDirection="0 1 0" FarPlaneDistance="10000" NearPlaneDistance="1" />

        </Viewport3D.Camera>
        <ModelVisual3D>
            <ModelVisual3D.Content>
                <DirectionalLight x:Name="dirLightMain" Direction="-1,-1,-1">
                </DirectionalLight>
            </ModelVisual3D.Content>
        </ModelVisual3D>

        <ModelVisual3D>
            <ModelVisual3D.Content>
                <GeometryModel3D>
                    <GeometryModel3D.Geometry>
                        <MeshGeometry3D x:Name="meshMain"
                            Positions="-800,0,-1000 -200,0,-1000 -500,0,-100"
                            TriangleIndices="0,1,2" >
                        </MeshGeometry3D>
                    </GeometryModel3D.Geometry>
                    <GeometryModel3D.Material>
                        <DiffuseMaterial x:Name="matDiffuseMain">
                            <DiffuseMaterial.Brush>
                                <SolidColorBrush Color="Red"/>
                            </DiffuseMaterial.Brush>
                        </DiffuseMaterial>
                    </GeometryModel3D.Material>
                </GeometryModel3D>
            </ModelVisual3D.Content>
        </ModelVisual3D>
    </Viewport3D>

</Grid>

所以我有一个三角形,我从下面看它......但现在我想从顶部看它,所以我将相机的 Y 参数的位置更改为任何大于 0 的值,但随后突然间我什么都看不见了。例如Position ="-500 -1 300" 有效,但 Position="-500 1 300" 不再有效。我用 updirection 变量玩了很多,但我无法解决这个问题....

【问题讨论】:

    标签: wpf 3d perspectivecamera


    【解决方案1】:

    您需要更改LookDirection 以及位置。

    您所做的是将相机从对象的一侧移动到另一侧,但保持其朝向同一方向:

    ----- <-- object
    
      ^
      |
      Camera
    

    像这样:

      ^
      |
      Camera
    
    ----- <-- object
    

    如果你也翻转相机方向,你会得到正确的结果:

      Camera
      |
      V
    
    ----- <-- object
    

    【讨论】:

    • 谢谢你的回答我明白你的意思但是还是有一些奇怪的现象: 这行得通,我在屏幕顶部完全看到了三角形,所以当我将相机的 Y 位置更改为 1.0 时,你会期望看到屏幕底部的三角形对吗?但这不会发生
    • hmm 这个问题还没有解决,我还是遇到了我之前评论中提到的同样的问题。直观地说,当我将透视相机设置更改为 Position="-500 1.0 -300" LookDirection="0.001 -1.0 0.0001" 时,我应该看到三角形的一部分,但我什么都看不到......
    【解决方案2】:

    您可能需要更改三角形索引的顺序。看看 http://www.codeproject.com/Articles/23332/WPF-3D-Primer ,更具体地说是“第 4 步”。

    简而言之,定义顶点的顺序也定义了三角形可见的方向。三角形的背面是不可见的。

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多