繁体   English   中英

如何将程序生成的广告牌添加到螺旋3D中

[英]How to add a proceduaraly generated billboard to helix 3D

我有一组程序图像,我想将其作为广告牌添加到我的螺旋3D应用程序中。

目前我的应用程序如下:

public partial class _3DControl
{
    HelixViewport3D hVp3D;
    public _3DControl()
    {
        InitializeComponent();
        createView();
    }

    public void createView()
    {
        hVp3D = new HelixViewport3D();
        var lights = new SunLight();
        lights.Altitude=40;
        lights.Ambient=0.4;
        this.Content = hVp3D;
        hVp3D.Children.Add(lights);
        this.Show();
    }

    public void  UploadBillboard(BitmapImage im, System.Windows.Media.Media3D.Point3D position,double width,double height)
    { 
        //create material 
        var mat = MaterialHelper.CreateImageMaterial(im, 0);
        var bboard = new BillboardVisual3D();
        bboard.Material = mat;

        //set coordinates 
        bboard.Position = position;
        bboard.Width = width;
        bboard.Height = height;

        //add the billboard 
        hVp3D.Children.Add(bboard);
    }

但是当我调用函数添加一个广告牌时:

           HelixLinker.GetHelix().UploadBillboard(((Bitmap)e).bitmapToBitmapImage(), 
new System.Windows.Media.Media3D.Point3D(0, 0, 0), 100, 100);

然后我看到没有添加任何东西,知道我做错了什么?

我也尝试过使用RectangleVisual3D类。

public void UploadRect(BitmapImage im, System.Windows.Media.Media3D.Point3D position, double width, double height)
        {
            var mat = MaterialHelper.CreateImageMaterial(im, 0);
            var bboard = new RectangleVisual3D ();
            bboard.Material = mat;
            bboard.Width = width;

            hVp3D.Children.Add(bboard);
        }

如果以相同的方式执行,则会产生(有希望的)图像 在此输入图像描述 但是在这种情况下,材料似乎没有正确设置。

注意:我希望BillboardVisual3D是正确的类,我正在研究一些可以让我把图像“放在地板上”的东西,可以这么说,我希望有一个没有深度的平面图像并允许transparancy。

为什么将不透明度设置为0? 然后你什么也看不见。

试试这个:

//create material 
var mat = MaterialHelper.CreateImageMaterial(im);

请参阅文档

编辑:

对不起,我的字符串坏了。 但这对我有用:

码:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        CreateBilboard();
    }

    private void CreateBilboard()
    {
        BitmapImage im = new BitmapImage(new System.Uri(@"C:\Users\Public\Pictures\Sample Pictures\Lighthouse.jpg"));

        var mat = MaterialHelper.CreateImageMaterial(im, 1);
        var bboard = new BillboardVisual3D();
        bboard.Material = mat;

        var position = new System.Windows.Media.Media3D.Point3D(0, 0, 0);
        var width = 100;
        var height = 100;


        //set coordinates 
        bboard.Position = position;
        bboard.Width = width;
        bboard.Height = height;

        //add the billboard 
        viewPort.Children.Add(bboard);
    }
}

XAML:

<Window x:Class="BillboardImageMaterialDemo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:ht="clr-namespace:HelixToolkit.Wpf;assembly=HelixToolkit.Wpf" 
        Title="BillboardImageMaterialDemo" Height="480" Width="640">
    <Grid>
        <ht:HelixViewport3D x:Name="viewPort" ZoomExtentsWhenLoaded="True">
            <!-- Remember to add some lights -->
            <ht:SunLight/>
        </ht:HelixViewport3D>
    </Grid>
</Window>

结果:

与灯塔的Bildboard

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM