2014-10-14 8 views
2

정사각형 카메라로 ViewPort3D를 사용하는 경우 아래의 두 번째 링크에서 볼 수 있듯이 3D 모델이 클리핑됩니다. 보기가 원근 카메라를 기반으로하고, 정사각형 카메라를 사용하더라도 그 뒤에 무엇이 보이지 않는 것과 같습니다.정사각형 카메라 클리핑이있는 Viewport3D

View of the entire 3D model

Perspective view & Orthographic view

는이 문제를 해결하는 방법에 대한 아이디어를

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> 

위의 그림을 생성하는 코드를 사용?

감사합니다,

편집 : 나는이 같은 문제가 있었다

<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> 
+0

무엇을 기대합니까? 코드와 동작에 어떤 문제가 있는지 알 수 없습니다. 하나의 GeometryModel3D를 사용하면 두 카메라 유형이 모두 만들어집니다. – AgentFire

+0

아래 그림과 같이 전체 모델 (노란색 부분)을 볼 것으로 예상했습니다. [전망보기 및 직교보기] (http://i.stack.imgur.com/fslLG.png). 하지만 괜찮습니다. 해결책을 찾았습니다 (위의 편집 된 질문 참조). – Loris

+0

그런 다음 카메라를 멀리 옮깁니다. – AgentFire

답변

1

: 나는 실제로 해결책을 발견, 당신은 단지, -Infinity에 직교 카메라의 NearPlaneDistance 설정 아래 코드를 볼 필요가 당신. 마지막으로 여러 솔루션을 테스트하여 솔루션을 찾을 수있었습니다.

당신은 증가에 있거나 PerspectiveCameraFarPlaneDistance 속성을 정의합니다.

행운을 빕니다