WPF

2014-12-30 2 views
4

내가 WPF에서 3D 선을 그리하려고 내가이 XAML 코드가의 차원에서 선 그리기 :WPF

<Grid> 
    <Viewport3D x:Name="ViewerViewport" 
       RenderOptions.BitmapScalingMode="HighQuality" 
       Focusable="True" Grid.RowSpan="2"> 

     <ModelVisual3D x:Name="Model"> 

     </ModelVisual3D> 

     <!-- Camera --> 
     <Viewport3D.Camera> 
      <PerspectiveCamera x:Name="Camera" 
           Position="0,0,0" 
           LookDirection="0,1,0" 
           UpDirection="0,0,1" 
           FieldOfView="100" 
           FarPlaneDistance="10" 
           NearPlaneDistance="0.1"/> 
     </Viewport3D.Camera> 

    </Viewport3D> 

</Grid> 

이 C# 코드 :

public MainWindow() 
{ 
     InitializeComponent(); 
     var ModelsGroup = new Model3DGroup(); 
     ModelsGroup.Children.Add(this.AddLine(new Point3D(0, 0, 100), new Point3D(0, 100, 100),"line 1)")); 
     ModelsGroup.Children.Add(new AmbientLight(Colors.White)); 
     Model.Content = ModelsGroup; 
} 

라인 생성 코드를 :

private Model3D AddLine(Point3D startPoint, Point3D EndPoint, string name) 
    { 
     SolidColorBrush brush = new SolidColorBrush(Colors.Black); 
     var material = new DiffuseMaterial(brush); 
     var mesh = new MeshGeometry3D(); 
     mesh.Positions.Add(startPoint); 
     mesh.Positions.Add(EndPoint); 
     mesh.TriangleIndices.Add(0); 
     mesh.TriangleIndices.Add(1); 
     mesh.TriangleIndices.Add(0); 
     return new GeometryModel3D(mesh, material); 
    } 

그러나 출력에 어떤 줄이 보이지 않습니까?

무엇이 문제입니까?

나는 쉽게 할 수있는 몇 가지 차원 라이브러리가 있다는 것을 알고 있지만 나는 WPF에서 할 다음 왜 당신을

+0

FarClip ('FarPlaneDistance')을 높게 설정하십시오. 10시에 그림을 자르고 약 100에 선을 그리는 것처럼 보입니다. 1000으로 설정하십시오. – Samuel

+0

@ Samuel 제안 해 주셔서 감사 드리며, 아무런 성공없이 시도해보십시오. 여전히 선을 볼 수 없습니다! – mans

+1

카메라를 추가로 만듭니다. 'Position = "50,0,0", LookDirection = "- 1,0,0"'및 파면 및 근거리 판 거리와 위 방향을 제거합니다. 0으로 줄을 그리거나 위치를 지정하려면 [link] (http://stackoverflow.com/questions/30690348/make-camera-lookdirection-look-front-face) –

답변

1

(예 : helix3d로)이 사용하는 라이브러리를 수행하는 방법을 조사하는 방법을 배우고 싶은 그냥 선 그리기를 원해. 3D에서는 대개 삼각형이 필요합니다. 삼각형이 있다면 normals을 결정할 수 있습니다. 조명과 텍스처링에 사용되는 삼각형의 대칭을 정의하는 데 사용됩니다.

카메라 설정
일반적인 카메라 Position는 (어떤 0, 0, 2, 5, 0, 20 등), LookDirection 벡터 0, 0, -1 UpDirection 벡터가 0 인 양의 Z 좌표 어딘가에 이 경우 축은 일반적으로 (양의 y 축은 위로 가고 양의 x 축은 오른쪽으로) 위치해야합니다.
UpDirection을 1, 0, 0으로 변경하면 양수 x 축이 y 축이 아닌 위로 이동합니다.
Position을 음의 z 좌표 (0, 0, -5)로 변경하고 LookDirection을 0, 0, 1로 변경하면 "뒤"에서 sceen을 보게되므로 양의 x 축이 왼쪽으로 이동합니다 (오른쪽이 아님) y 축은 여전히 ​​올라갑니다.

설정에서 카메라가 원점에서 양의 y 수를 가리키고 z 축이 위로 올라갑니다. X 축은 여전히 ​​오른쪽으로 이동합니다. 코드에 세 번째 점을 추가하면됩니다. 포인트 100, 0, 100, 당신은 작은 검은 색 삼각형을 볼 수 있습니다.

mesh.Positions.Add(startPoint); 
mesh.Positions.Add(endPoint); 
mesh.Positions.Add(new Point3D(100, 0, 100)); 
mesh.TriangleIndices.Add(0); 
mesh.TriangleIndices.Add(1); 
mesh.TriangleIndices.Add(2); 

이 삼각형 때문에 카메라에서 거리의 작은 - @Samuels 코멘트에서 말한대로 100 그래서 설정에서 다른 오류가 FarPlaneDistance="10"입니다.

+0

'LookDirection = "0,0,1"'그리고 그것이 작동합니다. –

3

두 개의 모서리가 동일한 점에있는 삼각형을 만듭니다. 즉, 어떤 각도에서도 볼 수 없도록 영역이 0 인 삼각형입니다. WPF는 영역이있는 삼각형 만 사용합니다.

선을 만들려면 선의 길이와 너비를 사각형으로 만들고 대각선으로 분할하여 두 개의 좁은 삼각형을 만들어야합니다. 따라서 "0 1 2 0 1 3"과 같이 네 개의 위치와 두 개의 삼각형이 필요합니다. 그런 다음이 직사각형의 방향이 카메라를 향하도록해야합니다.

나만의 헬리콥터 도구 상자는 WPF에서 3D를위한 훌륭한 유틸리티 라이브러리입니다. 유용한 헬퍼 기능을 찾을 수 있습니다.

0

당신은 두께가없는 선을 만들고 있습니다 .... 실제로이 픽셀 색소는 WPF의 2 가지 가장 중요한 문제입니다. 사각형을 만들 필요가있는 선을 그리려면 (2 개의 연결 삼각형), 더 똑똑 해지고 더 적은 수의 삼각형을 가지려면 다른 트릭을 사용할 수 있습니다 (나는 그것에 대해 생각하게 할 것입니다. ^^하지만 주어진 메쉬에 대해 사각형과 동일한 삼각형을 갖는 와이어 프레임을 가질 수 있습니다.