3

Viewport3d を使用し、継承された UIElement3D クラスを使用して 3D 要素を表示します...ビューポートのさまざまな画像 (さまざまなビュー) を作成したいと考えています。つまり、実行時に新しい viewport3d を作成し、その画像に特定のビューを適用する必要があります..

次のコードを参照してください。

' Start creating Image
Dim bitmap As New RenderTargetBitmap(800,
                                     800,
                                     96,
                                     96,
                                     PixelFormats.Default)

'--------------------
'Render xamlViewport works perfect
bitmap.Render(xamlViewport)

Using stream As FileStream = New FileStream("C:\\temp\\test_xamlviewport.png", FileMode.Create)
  Dim encoder As New PngBitmapEncoder
  encoder.Frames.Add(BitmapFrame.Create(bitmap))
  encoder.Save(stream)
End Using


'---------------------
'Render local Viewport don't work
Dim oViewport As New Viewport3D

oViewport.Height = 800
oViewport.Width = 800

oViewport.Children.Add(New C3DCuboid())
oViewport.Camera = New PerspectiveCamera(New Point3D(4, 7, 6), New Vector3D(-4, -7, -6), New Vector3D(0, 1, 0), 45)

Dim oVisual As New ModelVisual3D
oVisual.Content = New DirectionalLight(Colors.White, New Vector3D(-1, -2, -3))

oViewport.Children.Add(oVisual)
oViewport.Measure(New Size(800, 800))
oViewport.Arrange(New Rect(New Size(800, 800)))

bitmap = New RenderTargetBitmap(800,
                                 800,
                                 96,
                                 96,
                                 PixelFormats.Default)

bitmap.Render(oViewport)

Using stream As FileStream = New FileStream("C:\\temp\\test_localviewport.png", FileMode.Create)
  Dim encoder As New PngBitmapEncoder
  encoder.Frames.Add(BitmapFrame.Create(bitmap))
  encoder.Save(stream)
End Using

最初の画像 (test_xamlviewport.png) は正しく表示されていますが、独自の Viewport3D オブジェクトを作成して印刷した 2 番目の画像 (test_localviewport.png) は空です。

UIElement3D オブジェクトを強制的にレンダリングするにはどうすればよいですか? または、新しいビューポートを作成して既存の XAML ビューポート インスタンスを印刷すると機能しないのはなぜですか?

ここで、私の問題を再現するサンプル ソリューションを見つけます http://cid-df67ca3f85229bd1.office.live.com/self.aspx/Development/WpfApplication2.zip

よろしくローランド

4

0 に答える 0