2016-05-18 18 views
4

Ich habe eine Reihe von prozeduralen Bildern, die ich als meine helix 3D-Anwendung als Werbetafeln hinzufügen möchte.Wie fügt man eine procedarally generated billboard Helix 3D

Derzeit meine Anwendung sieht wie folgt:

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); 
    } 

Allerdings, wenn ich die Funktion aufrufen, eine Plakatwand hinzuzufügen:

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

Dann sehe ich nichts hinzugefügt wird, eine Idee, was ich tue‘ falsch?

Ich habe auch mit der RectangleVisual3D Klasse versucht.

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); 
     } 

die in der gleichen Art und Weise führt zu einem (viel versprechend) Bild enter image description here jedoch in diesem Fall das Material nicht, wenn execuded erscheint richtig eingestellt werden.

Hinweis: Ich hoffe, dass die BillboardVisual3D die richtige Klasse ist, ich arbeite an etwas, das mir erlauben wird, Bild "auf den Boden" sozusagen zu legen, ich möchte flache Bilder, die keine haben Tiefe und Transparenz ermöglichen.

+0

Irgendwelche Ideen für weitere Informationen sprechen Sie uns bitte (dies ist das erste, was ich mit Helix mache und als solches habe ich keine Ahnung, welche Informationen wichtig sind. – Thijser

Antwort

3

Warum setzen Sie die Opazität auf 0? Dann wirst du nichts mehr sehen.

Try this:

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

bearbeiten documentation

Siehe:

Sorry, mein schlecht mit der Zeichenfolge. Aber das ist für mich arbeiten:

Code:

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> 

Ergebnis:

Bildboard with the lighthouse

+0

var mat = MaterialHelper.CreateImageMaterial (im); funktioniert nicht, da es keine Zeichenfolge ist. Das Einstellen der Deckkraft auf 1 hat auch nicht funktioniert (dasselbe Ergebnis) – Thijser