2016-05-18 21 views
4

我有一套程序图像,我想将其作为广告牌添加到我的螺旋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); 
     } 
其中如果在这种情况下execuded以同样的方式导致了(有前途)图像 enter image description here但似乎没有材料

要正确设置。

注意:我希望BillboardVisual3D是正确的课程,我正在研究一些可以让我把图像“放在地板上”的东西,可以这么说,我想要有没有图像的平面图像深度和透明度。

+0

获得进一步的信息,随便问任何想法(这是我用Helix做的第一件事,因此我不知道什么信息是重要的)。 – Thijser

回答

3

为什么你将不透明度设置为0?那么你不会看到任何东西。

试试这个:

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

documentation

编辑:

对不起,是我不好用字符串。但是,这IST为我工作:

代码:

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 with the lighthouse

+0

var mat = MaterialHelper.CreateImageMaterial(im);不起作用,因为我不是一个字符串。将不透明度设置为1也不起作用(相同的结果) – Thijser

相关问题