首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有正射相机剪辑的Viewport3D

带有正射相机剪辑的Viewport3D
EN

Stack Overflow用户
提问于 2014-10-14 11:15:37
回答 1查看 3K关注 0票数 2

当使用ViewPort3D与一个正交相机,三维模型是剪裁,如你可以看到在下面的第二个链接。这就像视图是基于透视相机而不是显示它背后的东西,即使它使用的是正射相机。

整个3D模型的视图

透视视图与正射视图

用于生成上面图片的代码

代码语言:javascript
运行
复制
Used code to generate pictures above (toggling Orthographic to True/False)

<Window x:Class="HelixToolkitTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:helix="http://helix-toolkit.org/wpf"
    Title="MainWindow" Height="350" Width="525">
<Window.Resources>
    <GeometryModel3D x:Key="GeometryModel">

                <GeometryModel3D.Geometry>
                    <MeshGeometry3D
                 TriangleIndices="0,1,2 3,4,5 "
                 Normals="0,0,1 0,0,1 0,0,1 0,0,1 0,0,1 0,0,1 "
                 TextureCoordinates="0,0 1,0 1,1 1,1 0,1 0,0 "
                 Positions="-0.5,-0.5,0.5 0.5,-0.5,0.5 0.5,0.5,0.5 0.5,0.5,0.5 -0.5,0.5,0.5 -0.5,-0.5,0.5 " />
                </GeometryModel3D.Geometry>

                <GeometryModel3D.Material>
                    <MaterialGroup>
                        <DiffuseMaterial>
                            <DiffuseMaterial.Brush>
                                <LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5">
                                    <LinearGradientBrush.GradientStops>
                                        <GradientStop Color="Yellow" Offset="0" />
                                        <GradientStop Color="Red" Offset="0.25" />
                                        <GradientStop Color="Blue" Offset="0.75" />
                                        <GradientStop Color="LimeGreen" Offset="1" />
                                    </LinearGradientBrush.GradientStops>
                                </LinearGradientBrush>
                            </DiffuseMaterial.Brush>
                        </DiffuseMaterial>
                    </MaterialGroup>
                </GeometryModel3D.Material>

                <GeometryModel3D.Transform>
                    <ScaleTransform3D ScaleX="50" ScaleY="1" ScaleZ="1"/>
                </GeometryModel3D.Transform>
            </GeometryModel3D>
    <DirectionalLight x:Key="DirectionalLight" Color="#FFFFFF" Direction="-0.612372,-0.5,-0.612372" />
</Window.Resources>
<UniformGrid Columns="3">
    <GroupBox Header="Perspective camera">
        <Viewport3D>
            <Viewport3D.Camera>
                <PerspectiveCamera FarPlaneDistance="Infinity" NearPlaneDistance="0.1" LookDirection="12.064,-1.167,-0.831" UpDirection="-0.73,0.071,0.679"
                            Position="-12.064,1.167,0.831"/>
            </Viewport3D.Camera>
            <ModelVisual3D Content="{StaticResource DirectionalLight}"/>
            <ModelVisual3D Content="{StaticResource GeometryModel}"/>
        </Viewport3D>
    </GroupBox>
    <GroupBox Header="Orthographic camera">
        <Viewport3D>
            <Viewport3D.Camera>
                <OrthographicCamera FarPlaneDistance="Infinity" NearPlaneDistance="0.1" LookDirection="12.064,-1.167,-0.831" UpDirection="-0.73,0.071,0.679"
                            Position="-12.064,1.167,0.831" Width="9.313"/>
            </Viewport3D.Camera>
            <ModelVisual3D Content="{StaticResource DirectionalLight}"/>
            <ModelVisual3D Content="{StaticResource GeometryModel}"/>
        </Viewport3D>
    </GroupBox>

对如何解决这个问题有什么想法吗?

谢谢,

编辑:我实际上找到了解决方案,您只需将正交相机的NearPlaneDistance设置为-Infinity,请参见下面的代码:

代码语言:javascript
运行
复制
<Window x:Class="HelixToolkitTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:helix="http://helix-toolkit.org/wpf"
    Title="MainWindow" Height="350" Width="525">
<Window.Resources>
    <GeometryModel3D x:Key="GeometryModel">

                <GeometryModel3D.Geometry>
                    <MeshGeometry3D
                 TriangleIndices="0,1,2 3,4,5 "
                 Normals="0,0,1 0,0,1 0,0,1 0,0,1 0,0,1 0,0,1 "
                 TextureCoordinates="0,0 1,0 1,1 1,1 0,1 0,0 "
                 Positions="-0.5,-0.5,0.5 0.5,-0.5,0.5 0.5,0.5,0.5 0.5,0.5,0.5 -0.5,0.5,0.5 -0.5,-0.5,0.5 " />
                </GeometryModel3D.Geometry>

                <GeometryModel3D.Material>
                    <MaterialGroup>
                        <DiffuseMaterial>
                            <DiffuseMaterial.Brush>
                                <LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5">
                                    <LinearGradientBrush.GradientStops>
                                        <GradientStop Color="Yellow" Offset="0" />
                                        <GradientStop Color="Red" Offset="0.25" />
                                        <GradientStop Color="Blue" Offset="0.75" />
                                        <GradientStop Color="LimeGreen" Offset="1" />
                                    </LinearGradientBrush.GradientStops>
                                </LinearGradientBrush>
                            </DiffuseMaterial.Brush>
                        </DiffuseMaterial>
                    </MaterialGroup>
                </GeometryModel3D.Material>

                <GeometryModel3D.Transform>
                    <ScaleTransform3D ScaleX="50" ScaleY="1" ScaleZ="1"/>
                </GeometryModel3D.Transform>
            </GeometryModel3D>
    <DirectionalLight x:Key="DirectionalLight" Color="#FFFFFF" Direction="-0.612372,-0.5,-0.612372" />
</Window.Resources>
<UniformGrid Columns="3">
    <GroupBox Header="Perspective camera">
        <Viewport3D>
            <Viewport3D.Camera>
                <PerspectiveCamera FarPlaneDistance="Infinity" NearPlaneDistance="0.1" LookDirection="12.064,-1.167,-0.831" UpDirection="-0.73,0.071,0.679"
                            Position="-12.064,1.167,0.831"/>
            </Viewport3D.Camera>
            <ModelVisual3D Content="{StaticResource DirectionalLight}"/>
            <ModelVisual3D Content="{StaticResource GeometryModel}"/>
        </Viewport3D>
    </GroupBox>
    <GroupBox Header="Orthographic camera">
        <Viewport3D>
            <Viewport3D.Camera>
                <OrthographicCamera FarPlaneDistance="Infinity" NearPlaneDistance="-Infinity" LookDirection="12.064,-1.167,-0.831" UpDirection="-0.73,0.071,0.679"
                            Position="-12.064,1.167,0.831" Width="9.313"/>
            </Viewport3D.Camera>
            <ModelVisual3D Content="{StaticResource DirectionalLight}"/>
            <ModelVisual3D Content="{StaticResource GeometryModel}"/>
        </Viewport3D>
    </GroupBox>
EN

回答 1

Stack Overflow用户

发布于 2014-12-02 18:50:18

我和你有同样的问题。对几个解决方案进行了测试,最后我找到了解决方案。

您必须使用FarPlaneDistance增加或定义PerspectiveCamera.的属性

祝好运

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26359489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档