代码改变世界

MOGRE学习(二) MOGRE在WPF下的输出

2011-11-24 10:35  石头、  阅读(646)  评论(0编辑  收藏  举报
在上面我闪已经介绍了Mogre是个什么样的生物,也瞧了一下它本身自带的Demo,算养了下眼。全部过完眼之后,我们会发现,它不仅有在控制台环境下运行的例子,也有在Winfrom下运行的,这也算顾及到用winform环境的童鞋们。也许我们用WPF的帅哥靓姐们会抱怨了,那我们呢?好,别急,下面我们就建立一个在WPF下运行的Mogre项目。

在建立WPF之前,我们先看一下在Winform下是怎么实现的。打开源码,我们可以看到里面有一个自己的实现类OgreWindow ,而在OgreWindow的构造函数中有两个参数,一个是位置(Point类型),别外一个是显示面板的句柄。在这里,它是用Panel来作为承载窗器,调用Panel的Handle属性获得句柄,引用对象,即可实现;还有一个注意的是,它在Winform的Paint(重绘事件)中调用类的Paint。这样子,一个Mogre即在Winform上显示了。

看了Winform的代码后,下面我们开始建立个WPF。

1.建立WPF程序,然后在引用 WindowsFormsIntegration和System.Windows.Forms。

2. 在WPF的xaml的顶级节点加上下面代码

   xmlns:wfi ="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"

         xmlns:wf ="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" 

然后在页面写入下面代码,建立Panel

 

 

<wfi:WindowsFormsHost>
            <wf:Panel x:Name="myPanel"   Width="1024" Height="768" ></wf:Panel>
</wfi:WindowsFormsHost>

  

3.把Winform示例中的OgreWindow 类复制过来。

4.因为在WPF中没有Panit(重绘事件),所以在这里我们用CompositionTarget 来代替。直接用CompositionTarget

的Rendering 事件来输出,所以在事件中写上mogreWin.Paint()就可以了。这样,Mogre就在WPF中显示了。

结语:WPF中显示Mogre中,最主要要解决的是Panel的实现与Panit中的重绘。因为WPF中没有Panel,所以要借助Winfrom的控件;因为WPF中没有重绘事件,所以要用CompositionTarget 来代替;