从Model3DGroup渲染图像到位图失败

5
我正在使用C# WPF,尝试从3D模型中渲染2D视图,以便将其用作UI项的预览图像。为了实现这一目标,我正在尝试正确使用RenderTargetBitmap类(链接1)。以下是我的使用方式:Irrelevant since update。
public void SetModelImage()
    {
        RenderTargetBitmap bmp = new RenderTargetBitmap(200, 200, 96, 96, PixelFormats.Pbgra32);
        PngBitmapEncoder png = new PngBitmapEncoder();
        Viewport3D myViewport3d = new Viewport3D();
        ModelVisual3D myModelVisual3D = new ModelVisual3D();
        Model3DGroup myModel3DGroup = new Model3DGroup();
        GeometryModel3D myGeometryModel = new GeometryModel3D();
        this.previewModel = new PngBitmapEncoder();
        PerspectiveCamera myPCamera = new PerspectiveCamera();

        myModel3DGroup.Children.Add(this.content);// ajoute le modele
        myModelVisual3D.Content = myModel3DGroup;
        myModelVisual3D.Content = this.content;
        myViewport3d.Children.Add(myModelVisual3D);
        bmp.Render(myViewport3d);

        this.previewModel.Frames.Add(BitmapFrame.Create(bmp));

        string filepath = "C:\\Users\\Remi\\Desktop\\toto.png";
        using (Stream stm = File.Create(filepath))
        {

            this.previewModel.Save(stm);

        }

    }

问题在于生成的位图完全是黑色的。
完整的文件pastbin: http://paste.isomorphis.me/jgz 感谢您的时间! :)
更新: 由于一位顾问的建议,我已经纠正了使用“measure”、“arrange”和“InvalidateVisual”初始化布局的方式,但我仍然生成了一个黑色的位图。 enter image description here

1
你找到如何从3D模型创建非黑色的.png文件了吗? - oRole
1个回答

1
你需要调用 Viewport3D 元素的 MeasureArrange 方法来运行初始布局。你可能还需要调用 InvalidateVisual
myViewport3d.Children.Add(myModelVisual3D);
myViewport3d.Measure(new Size(200, 200));
myViewport3d.Arrange(new Rect(0, 0, 200, 200));
myViewport3d.InvalidateVisual();
bmp.Render(myViewport3d);

仍未使用InvalidateVisual()。已更新帖子和屏幕截图,谢谢! - Folder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接