三维交互开发(1)-Quest3D与程序的通信

来源:互联网 发布:淘宝贷款骗局揭秘 编辑:程序博客网 时间:2024/04/30 10:58

这两年来一直的都开发关于三维交互的CS程序(期间也开发其它的CS方面的程序),接触了quest3DDxStudio两个三维引擎。原本以为回广东另找工作后,不会再从事这方面工作了,所以不准备写这类的文章来显丑。结果现在回来之后还是从事差不多一样的事,还是使用dxstudio。这一系列会主要讲到的是dxStudio这个引擎,只是近日刚好被以前同事问到quest3D与程序通信和问题。就添加了这一节介绍一下(首先声明,本人没有从事过quest的开发,只是不小心看了一点点这方面帮助文档)

 

一开始接触的是Quest3D,对它就了解了一下,没有真正的去学过,以前公司有一个人对这个比较精通,所以的交互动作都是他来做的,我们之间的接口就是通过Quest中的activeX dataactiveX Event这两个控件,来与程序(我使用VS 2005 C#)进行通信。安装了Quest3Dviewer后,在.net中的COM组件中会有Quest3D的控件,直接引用它就行了,这个控件有get_ChannelValue(参数,参数)set_ChannelValue(参数,参数)方法和OnEvent事件。引擎与程序之间的通信基本都通过这个。所以之间的接口的定义也都在这个上面。很多做quest3D的都不知道如何来做接口的这部分工作。我可能知道的皮毛都算不上,但还是希望对你有所帮助。本来想做一个,简单点击模型,通过事件通知程序点击的模型名称的。不过实在是忘了太多了,现在没法做了,只有做一些简单只关于通信的例子了。

例子做的是。鼠标右击会发出事件,和可以获取/设置相机的X轴坐标

准备工作:

1.使用quest3D打开了一个新场景,拉一个walkthrough Scene并连上Start

2.拉一个ChannelCaller,连上Start

3.拉一个IfActive data,连到ChannelCaller

 

首先先做一个能向程序触发事件做法。

 拉入UserInput设成鼠标右击true为数值1(其实其它也可以)

 拉入Value,设置默认值为1

  拉入active event,把三个都连上if

如图显示

 

此时,如果发布出去的话,这个quest3D已经有了一个鼠标右击时触发的事件(后面再说在程序是怎么表显出来的)

 

接着来做一个,程序通过get_channelValue来获取quest3D的相关信息。(本例实现的时,取得相机的X坐标),在准备工作中,已经把active data控件拉了进去

 在我们拉入walkthrough Scene时,已经存在了一个相机,在最下面有一个相机的位置属性“Out: Movement Position”,在它下级连着的是相机的X,Y,Z.现在我们在X这个创建出一个快捷方式(最好将其改成合适的channel name,调用方法时会使用到这个名称,本例改为了CameraX),然后把这个快捷方式连到ActiveData中。(项目名称现默认为StartGroup,调用方法时会使用到)

  到这里,通过程序来获取quest3D相机的X坐标也完成了。发布就好了。。

 

 

下面程序说一下,程序是怎么来使用定义好的这些事件和方法的。

1.    vs2005vs2008VS2010不知道能不能用,没有试过)新建一个项目。

2.    在工具箱中添加,quest3D viewer控件

 

3.    将这个控件,拉到Form里面去,再放两个labal控件(用于显示信息)、一个textBox和一个button用来设置信息

4.    在窗口加载事件中把q3d路径赋给axQuest3DCtrl41控件。

5.    添加axQuest3DCtrl41onEvent(双击那个控件默认就是onEvent事件)在里面添加代码

label1.Text = "这个通过鼠标右击触发到程序来的事件" + System.DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");

  label2.Text = "现在相机的X轴坐标为:" + axQuest3DCtrl41.get_ChannelValue("StartGroup", "CameraX");//startGroupquest3d里面的项目名称(左下角的project tree那可以看到),CameraX为之间设定那个的channel name(忘了回头看看这个文档,呵呵)

6.    button1onClick事件中添加代码

   

7.    ,全部完成,按F5运行就OK了。VS这部分最好请教一下会.net编程的人(记得让先安装上webviewer哦),你没有使用VS的话,做起来会比较不熟练。下面是运行起来的效果图。

 

后注:

1、现把VSquest3D的工程都发上来,Code文件夹为quest3D的工程文件,发布后文件在VS项目下的bin/Debug/Quest3D文件夹里。

2、上面的例子没有做get_ChannelTextset_ChannelText,但原理是一样的,把Text连到activeX data就行了.

 

quest3D确实了解很少,就只能说到这不对之处请原谅和指出,谢谢。之后主要说的会是DxStudio

作者:qgj1655

源代码下载地址:http://download.csdn.net/source/2626572