2012-04-03 1 views
2

직사각형 큐브의 모서리 나 변만을 그리지 만 WPF를 사용하여 성공하지 못합니다. 그것은 윈도우 폼 (C#) 응용 프로그램에 표시하고자하는 사용자 정의 컨트롤 안에 있습니다. 내가 본 것처럼 WPF의 3D 객체는 삼각형을 사용하여 만들어 지므로 직사각형의 너비가 작거나 (큐브의 가장자리 또는 측면으로 인식되기에 충분할 정도로) 직사각형을 사용하여 선을 그려 보려고했지만 표시되지 않습니다. 바르게. OpenGL은 나 GDI +와 같은 다른 그래픽 라이브러리를 시도직사각형 큐브의 모서리를 WPF로 그려야하지만 성공하지 못했습니다.

<UserControl x:Class="Spatial_and_Temporal_Research.BoundingBoxes" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" DataContext="{Binding}" Height="509" Width="739" FontFamily="Times New Roman"> 
     <Grid> 

      <!-- Place a Label control at the top of the view. --> 
      <Label 
        HorizontalAlignment="Center" 
        TextBlock.TextAlignment="Center" 
        FontSize="20" 
        Foreground="Red" 
        Content="Model: Cone"/> 

      <!-- Viewport3D is the rendering surface. --> 
      <Viewport3D Name="myViewport" > 

       <!-- Add a camera. --> 
       <Viewport3D.Camera> 
        <PerspectiveCamera 
          FarPlaneDistance="20" 
          LookDirection="-6, -5, -4" 
          UpDirection="0,1,0" 
          NearPlaneDistance="1" 
          Position="6 5 4" 
          FieldOfView="45" /> 

       </Viewport3D.Camera> 

       <!-- Add models. --> 
       <Viewport3D.Children> 

        <ModelVisual3D> 
         <ModelVisual3D.Content> 

          <Model3DGroup > 
           <Model3DGroup.Children> 

            <!-- Lights, MeshGeometry3D and DiffuseMaterial objects are added to the ModelVisual3D. --> 
            <AmbientLight Color="White" /> 

            <!-- Define a red cone. --> 
            <GeometryModel3D> 

             <GeometryModel3D.Geometry> 
              <MeshGeometry3D 
     Positions="-0.55 -0.5 -0.5 -0.45 -0.5 -0.5 -0.55 -0.5 0.5 -0.45 -0.5 0.5 -0.55 0.5 -0.5 -0.45 0.5 -0.5 -0.55 0.5 0.5 -0.45 0.5 0.5 0.45 -0.5 -0.5 0.55 -0.5 -0.5 0.45 -0.5 0.5 0.55 -0.5 0.5 -0.5 -0.55 -0.5 -0.5 -0.45 -0.5 0.5 -0.55 -0.5 0.5 -0.45 -0.5 -0.5 -0.55 0.5 -0.5 -0.45 0.5 0.5 -0.55 0.5 0.5 -0.45 0.5 0.45 0.5 -0.5 0.55 0.5 -0.5 0.45 0.5 0.5 0.55 0.5 0.5 -0.5 0.45 -0.5 -0.5 0.55 -0.5 0.5 0.45 -0.5 0.5 0.55 -0.5 -0.5 0.45 0.5 -0.5 0.55 0.5 0.5 0.45 0.5 0.5 0.55 0.5" 

     TriangleIndices="0 2 3 3 1 0 4 6 7 7 5 4 1 0 4 4 5 1 3 2 6 6 7 3 8 10 11 11 9 8 13 12 14 14 15 13 17 16 18 18 19 17 20 22 23 23 21 20 17 16 20 20 21 17 19 18 22 22 23 19 25 24 26 26 27 25 29 28 30 30 31 29"          
      > 

              </MeshGeometry3D> 
             </GeometryModel3D.Geometry> 

             <GeometryModel3D.Material> 
              <DiffuseMaterial> 
               <DiffuseMaterial.Brush> 
                <SolidColorBrush 
           Color="Red" 
           Opacity="1.0"/> 
               </DiffuseMaterial.Brush> 
              </DiffuseMaterial> 
             </GeometryModel3D.Material>        

            </GeometryModel3D> 

           </Model3DGroup.Children> 
          </Model3DGroup> 

         </ModelVisual3D.Content> 

        </ModelVisual3D> 

       </Viewport3D.Children> 

      </Viewport3D> 
     </Grid> 

</UserControl> 

I'am 생각 : 여기 내가 사용하고있는 코드입니다. wpf에서 3D 선을 그리는 방법을 알고 있다면 예제로 설명하십시오. 어떤 도움을 주시면 감사하겠습니다. 미리 감사드립니다.

+0

직사각형 큐브? 직사각형 프리즘을 의미합니까? – bouvierr

+0

개체의 와이어 프레임을 그리는 중입니까? – ChrisF

+0

게시물을 편집했습니다. 내가보고 싶은 물체의 가장자리 나 옆면 만. 나는 완전한 객체를 그리거나 얼굴이 보일 수있는 곳을 그리지 않고, 객체의 테두리 나 가장자리/측면만을 그리기를 원하지 않는다. – mj1261829

답변

0

무엇을 그리든간에 WPF는 본질적으로 삼각형을 그리기 때문에 테셀레이션해야합니다.

줄을 테셀레이션 된 표면 세트로 모델링하려면 먼저 라인을 고체 또는 더 자세하게 작은 단면의 긴 직사각형 프리즘으로 생각하십시오. 이 방법으로 라인을 생각하면 6면의 솔리드 (원하는 경우에는 라인의 두 "끝 마개"포함)가 있으며, 적절한 삼각형을 정의하면 WPF가이를 잘 렌더링합니다.

다소 번거롭지만 확실히 할 수 있습니다.

WPF에서이 작업을 수행하는 더 좋은 방법이 있다면 나는 그것에 대해 듣고 싶습니다.

행운을 빈다.

0

3D 개체의 메쉬를 렌더링하려면 Helix 툴킷이 추가되는 일부 개체를 렌더링하십시오. 그러나이 추가에 포함 된 "linevisual3D"는 꽤 절름발이입니다 ... 3D 프리즘 (SlimsGhost에서 말한 것과 같은)이 아니라 2D 사각형으로 생각하고 backmaterial 속성을 사용하여 두 가지 모두를 볼 수있게하는 것이 좋습니다. ^^ 나는이 코딩했습니다 그리고 내가 이미지를 추가하고 싶었다

(나선 Linevisual3D보다) 매우 잘 작동,하지만 난 내 "10 명성 포인트"를하지 않아도 할 수 없기 때문에 :

추신 : 정말 관심을 제기하는 경우 다른 전용 스레드에서 메서드를 게시 할 수 있습니다.

감사합니다.