2010-03-06 11 views
2

코드에서 Viewport3D에 Viewport2DVisual3D를 추가하려고하는데 시각적 효과가 나타나지 않습니다. 그 이유를 이해하는 데 도움이 될 것입니다. 다음은 메인 윈도우의 코드입니다.코드에서 Viewport2DVisual3D를 추가 할 때 문제가 발생했습니다.

Viewport3D의 하위 항목에 Viewport2DVisual3D를 추가하면 렌더링하기에 충분합니까?

public partial class Window1 : System.Windows.Window 
{ 

    public Window1() 
    { 
     InitializeComponent(); 

     this.Loaded += new RoutedEventHandler(temp); 
    } 


    public void temp(object sender, RoutedEventArgs e) 
    { 
     Viewport2DVisual3D test = new Viewport2DVisual3D(); 
     MeshGeometry3D testGeometry = new MeshGeometry3D(); 

     Vector3D CameraLookDirection = Main_Target_CameraOR20.LookDirection; 

     // Calculate the Positions based on the Camera 
     Point3DCollection myPoint3DCollection = new Point3DCollection(); 
     myPoint3DCollection.Add(new Point3D(-1, 1, 0)); 
     myPoint3DCollection.Add(new Point3D(-1, -1, 0)); 
     myPoint3DCollection.Add(new Point3D(1, -1, 0)); 
     myPoint3DCollection.Add(new Point3D(1, 1, 0)); 
     testGeometry.Positions = myPoint3DCollection; 

     PointCollection myPointCollection = new PointCollection(); 
     myPointCollection.Add(new Point(0, 0)); 
     myPointCollection.Add(new Point(0, 1)); 
     myPointCollection.Add(new Point(1, 1)); 
     myPointCollection.Add(new Point(1, 0)); 
     testGeometry.TextureCoordinates = myPointCollection; 

     Int32Collection triangleIndicesCollection = new Int32Collection(); 
     triangleIndicesCollection.Add(0); 
     triangleIndicesCollection.Add(1); 
     triangleIndicesCollection.Add(2); 
     triangleIndicesCollection.Add(2); 
     triangleIndicesCollection.Add(3); 
     triangleIndicesCollection.Add(0); 
     testGeometry.TriangleIndices = triangleIndicesCollection; 


     DiffuseMaterial myDiffuseMaterial = new DiffuseMaterial(Brushes.White); 
     Viewport2DVisual3D.SetIsVisualHostMaterial(myDiffuseMaterial, true); 

     Transform3DGroup myTransform3DGroup = new Transform3DGroup(); 
     ScaleTransform3D myScaleTransform3D = new ScaleTransform3D(); 
     myScaleTransform3D.ScaleX = 2; 
     myScaleTransform3D.ScaleY = 2; 
     myScaleTransform3D.ScaleZ = 2; 

     TranslateTransform3D myTranslateTransform3D = new TranslateTransform3D(); 

     myTranslateTransform3D.OffsetX = -27; 
     myTranslateTransform3D.OffsetY = 13; 
     myTranslateTransform3D.OffsetZ = 6; 


     RotateTransform3D rotateTransform = new RotateTransform3D() 
     { 
      Rotation = new AxisAngleRotation3D 
      { 
       Angle = -50, 
       Axis = new Vector3D(0, 1, 0) 
      } 
     }; 

     myTransform3DGroup.Children.Add(myTranslateTransform3D); 
     myTransform3DGroup.Children.Add(myScaleTransform3D); 
     myTransform3DGroup.Children.Add(rotateTransform); 
     test.Transform = myTransform3DGroup; 

     Button myButton = new Button(); 
     myButton.Content = "Test Button"; 

     test.Material = myDiffuseMaterial; 
     test.Geometry = testGeometry; 
     test.Visual = myButton; 

     ZAM3DViewport3D.Children.Add(test); 
    } 
} 

답변

0

문제는 오프셋 값이었습니다. 따라서 렌더링 할 수 있도록 Viewport3D에 자식을 추가하는 것으로 충분합니다. 건배

관련 문제