三维交互开发(1)-Quest3D与程序的通信
来源:互联网 发布:淘宝贷款骗局揭秘 编辑:程序博客网 时间:2024/04/30 10:58
这两年来一直的都开发关于三维交互的CS程序(期间也开发其它的CS方面的程序),接触了quest3D和DxStudio两个三维引擎。原本以为回广东另找工作后,不会再从事这方面工作了,所以不准备写这类的文章来显丑。结果现在回来之后还是从事差不多一样的事,还是使用dxstudio。这一系列会主要讲到的是dxStudio这个引擎,只是近日刚好被以前同事问到quest3D与程序通信和问题。就添加了这一节介绍一下(首先声明,本人没有从事过quest的开发,只是不小心看了一点点这方面帮助文档)
一开始接触的是Quest3D,对它就了解了一下,没有真正的去学过,以前公司有一个人对这个比较精通,所以的交互动作都是他来做的,我们之间的接口就是通过Quest中的activeX data和activeX Event这两个控件,来与程序(我使用VS 2005 C#)进行通信。安装了Quest3D的viewer后,在.net中的COM组件中会有Quest3D的控件,直接引用它就行了,这个控件有get_ChannelValue(参数,参数)、set_ChannelValue(参数,参数)方法和OnEvent事件。引擎与程序之间的通信基本都通过这个。所以之间的接口的定义也都在这个上面。很多做quest3D的都不知道如何来做接口的这部分工作。我可能知道的皮毛都算不上,但还是希望对你有所帮助。本来想做一个,简单点击模型,通过事件通知程序点击的模型名称的。不过实在是忘了太多了,现在没法做了,只有做一些简单只关于通信的例子了。
例子做的是。鼠标右击会发出事件,和可以获取/设置相机的X轴坐标
准备工作:
1.使用quest3D打开了一个新场景,拉一个walkthrough Scene并连上Start
2.拉一个ChannelCaller,连上Start
3.拉一个If和Active 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. 在vs2005或vs2008(VS2010不知道能不能用,没有试过)新建一个项目。
2. 在工具箱中添加,quest3D viewer控件
3. 将这个控件,拉到Form里面去,再放两个labal控件(用于显示信息)、一个textBox和一个button用来设置信息
4. 在窗口加载事件中把q3d路径赋给axQuest3DCtrl41控件。
5. 添加axQuest3DCtrl41的onEvent(双击那个控件默认就是onEvent事件)在里面添加代码
label1.Text = "这个通过鼠标右击触发到程序来的事件" + System.DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
label2.Text = "现在相机的X轴坐标为:" + axQuest3DCtrl41.get_ChannelValue("StartGroup", "CameraX");//startGroup为quest3d里面的项目名称(左下角的project tree那可以看到),CameraX为之间设定那个的channel name(忘了回头看看这个文档,呵呵)
6. 在button1的onClick事件中添加代码
7. 好,全部完成,按F5运行就OK了。VS这部分最好请教一下会.net编程的人(记得让先安装上webviewer哦),你没有使用VS的话,做起来会比较不熟练。下面是运行起来的效果图。
后注:
1、现把VS和quest3D的工程都发上来,Code文件夹为quest3D的工程文件,发布后文件在VS项目下的bin/Debug/Quest3D文件夹里。
2、上面的例子没有做get_ChannelText和set_ChannelText,但原理是一样的,把Text连到activeX data就行了.
对quest3D确实了解很少,就只能说到这不对之处请原谅和指出,谢谢。之后主要说的会是DxStudio。
作者:qgj1655
源代码下载地址:http://download.csdn.net/source/2626572
- 三维交互开发(1)-Quest3D与程序的通信
- quest3D学习小记(1)
- 三维交互开发(2)-DxStudio的hello world
- 三维交互开发(3)-使用脚本
- 用Socket实现程序之间的交互(通信)
- Quest3d的项目管理
- ArcGIS Engine开发的三维小程序
- QNX驱动开发—APP应用与resource manger的交互通信,进程间通信
- QNX驱动开发—APP应用与resource manger的交互通信,进程间通信
- 解决workshop开发的服务器端与axis开发的客户端之间的交互通信问题
- 小白学分布式程序开发2-分布式架构下系统间交互的5种通信模式
- 写给VR手游开发小白的教程:(五)Cardboard插件与Android之间的通信交互
- Android程序:使用Http的Post方式与网络交互通信
- Flex与Java的交互通信
- android端与服务器端的通信交互
- angularjs与PHP的交互通信问题
- Fragment与Fragment的通信交互Demo
- quest3d q.LoadChannelGroupDQ的详解
- 我们在黑暗中舞蹈
- socket fuction
- 鲜花插在石头上了 、
- java读写文件大全
- 程序页面读取权限验证的一个小技巧
- 三维交互开发(1)-Quest3D与程序的通信
- jsp学习的一些记录心得
- 发现httpsqs是一个学习unix下c编程的很好的范例
- nginx rewrite 参数和例子
- Google的十个核心技术
- indy10发送网页
- JS如何获取A标签里面的链接属性
- tomcat安全验证
- XP下Virtualbox虚拟Ubuntu共享文件夹设置