2016-05-18 11 views
4

ヘリックス3Dアプリケーションにビルボードとして追加したい一連の手続き画像があります。ヘリックス3Dにproceduaralyで生成されたビルボードを追加する方法

現在、私のアプリケーションは、次のようになります。私は看板を追加するための関数を呼び出すとき

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

その後、私は何も添加していないされている参照、私は」何を任意のアイデアがやっmは違う?

また、私はRectangleVisual3Dクラスを試しました。

(有望)画像 enter image description hereしかし、この場合には材料が適切に設定されていないように同じ方法結果にexecuded場合
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が適切なクラスであることを願っています。私はイメージを「床に」置くことを可能にする何かに取り組んでいます。深みと透明性を可能にします。

+0

futher情報のための任意のアイデアお気軽に(この私がHelixを使ってやっている最初のことで、どんな情報が重要か分かりません)。 – Thijser

答えて

3

なぜ不透明度を0に設定しますか?あなたは何も見ません。

はこれを試してみてください:文字列と

申し訳ありませんが、私の悪い:

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

documentation

編集を参照してください。しかし、このイストは私のために働い:

コード:

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

関連する問題