使用 Balder 开源引擎进行WP7 3D程序的开发

       Balder是北欧的主神Odin与其妻Frigga最喜爱的儿子,他是光辉美丽的光明,春天与喜悦之神,全身发出比白雪还耀目的光辉,

金发比阳光还美,双眸比天空还明澈清亮,因此人们把世上最美最白的花朵,称为「Balder的额头」。

      Balder 团队用这个名字命名,足可以说明其这款产品,在开发过程中对视觉效果的追求。最早的这个项目是真对SliverLight 制作的

一款3d渲染引擎,通过各种光学的原理在Sliverlight上将物体呈现出3维的效果。而在WP7 开发中,有一种模式就是Sliverlight 模式,

因此Balder 团队,即在原有的基础上制作了Balder for WP7

Balder 可以到http://balder.codeplex.com/ 下载,下载后的压缩包包括三个版本的动态库SliverLight3SliverLight4WP7

每一个版本下面都包含两个动态库Balder.DllNinject.Dll

其中Balder.DllBalder的主要库,而Ninject.Dll 则是为了简化框架而使用到的另一个项目,这里我们不做介绍。

   说了这么久下面,我们就来进行真正的开发吧!我们将在windows Phone 7 上实现一个3D的盒子。

   首先,我们创建一个Sliverlight for windows phone windows phone application 命名为Box3D

 

 

添加Balder.dll 引用

 

将其中的MainPage.xaml修改为如下内容

 

ExpandedBlockStart.gif 代码
< phone:PhoneApplicationPage 
    x:Class
= " Box3D.MainPage "
    xmlns
= " http://schemas.microsoft.com/winfx/2006/xaml/presentation "
    xmlns:x
= " http://schemas.microsoft.com/winfx/2006/xaml "
    xmlns:phone
= " clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone "
    xmlns:shell
= " clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone "
    xmlns:d
= " http://schemas.microsoft.com/expression/blend/2008 "
    xmlns:mc
= " http://schemas.openxmlformats.org/markup-compatibility/2006 "
    xmlns:Execution
= " clr-namespace:Balder.Execution;assembly=Balder "  
    xmlns:Geometries
= " clr-namespace:Balder.Objects.Geometries;assembly=Balder "  
    xmlns:View
= " clr-namespace:Balder.View;assembly=Balder "  
    xmlns:Lighting
= " clr-namespace:Balder.Lighting;assembly=Balder "  
    xmlns:Animation
= " clr-namespace:Balder.Animation.Silverlight;assembly=Balder "  
    xmlns:Materials
= " clr-namespace:Balder.Materials;assembly=Balder "
    mc:Ignorable
= " d "  d:DesignWidth = " 480 "  d:DesignHeight = " 768 "
    FontFamily
= " {StaticResource PhoneFontFamilyNormal} "
    FontSize
= " {StaticResource PhoneFontSizeNormal} "
    Foreground
= " {StaticResource PhoneForegroundBrush} "
    SupportedOrientations
= " Portrait "  Orientation = " Portrait "
    shell:SystemTray.IsVisible
= " True " >

    
<!-- LayoutRoot  is  the root grid  where  all page content  is  placed -->
    
< Grid x:Name = " LayoutRoot "  Background = " Transparent " >
        
< Execution:Game Width = " 480 "  Height = " 768 " >
            
< Execution:Game.Camera >
                
< View:Camera Position = " 0,30,-60 "  Target = " 0,0,0 " />
            
</ Execution:Game.Camera >

            
< Lighting:OmniLight Position = " -100,100,0 "  Diffuse = " Gray " />

            
< Geometries:Box x:Name = " Box "  Dimension = " 20,20,20 "  Color = " Red "  InteractionEnabled = " true " />
        
</ Execution:Game >


    
</ Grid >
 
    
<!-- Sample code showing usage of ApplicationBar -->
    
<!--< phone:PhoneApplicationPage.ApplicationBar >
        
< shell:ApplicationBar IsVisible = " True "  IsMenuEnabled = " True " >
            
< shell:ApplicationBarIconButton IconUri = " /Images/appbar_button1.png "  Text = " Button 1 " />
            
< shell:ApplicationBarIconButton IconUri = " /Images/appbar_button2.png "  Text = " Button 2 " />
            
< shell:ApplicationBar.MenuItems >
                
< shell:ApplicationBarMenuItem Text = " MenuItem 1 " />
                
< shell:ApplicationBarMenuItem Text = " MenuItem 2 " />
            
</ shell:ApplicationBar.MenuItems >
        
</ shell:ApplicationBar >
    
</ phone:PhoneApplicationPage.ApplicationBar >-->

</ phone:PhoneApplicationPage >

 

 

点击编译,当程序启动不久就会出现如下异常

 

怎么解决这个异常?这是我用了很久才解决的问题,这也是我写这篇文章的主要目的。

解决这个异常,需要在App.,xaml.cs中的方法public App()中增加如下语句:

          Balder.Display.WP7.Display.Initialize();

再次点击即可正常运行如图:

 

更多的Balder 使用例子可以参考

http://www.ingebrigtsen.info/Balder/SampleBrowser/TestPage.html

 

 

       

 

 

转载于:https://www.cnblogs.com/wangmiao/archive/2010/10/26/1861439.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值