动力学仿真引擎ODE的学习笔记,C#演示(一)
®版权声明:本文为博主原创文章,未经博主允许不得转载。
一.ODE介绍与平台搭建.
接触到动力学仿真引擎, 是因为笔者的一款PLC仿真软件需要3D仿真.我需要达到的效果是,以3D方式构建出工控行业中常见的元件,比如感应器,气缸,机械手,拉带.这些元件在场景中通过用户的组合摆放,设置好相关的属性后,可以通过我的PLC仿真器程序的输入输出与其进行交互,产生机器动作的3D仿真效果.
比如这样一个场景:
机械手把产品放置在拉带上,PLC输出信号让拉带正方向转动,拉带带动产品移动,如果产品类型为NG,PLC在指定位置会输出信号让气缸推出,把产品推到NG盒子里.如果为OK品,产品走到拉带尾部,自由落体到OK盒子里.
笔者参考了一些3d仿真软件,在处理上面场景的时候,是使用的固定算法处理产品和机器机构动作间的交互,也就是说,并非是基于真实物理上的模拟.这样编程比较容易,缺点是,每一种场景都要编写固定的交互代码.如果需要增加新的场景,就必须编写配套的场景交互代码,通用性差.
我设想中的效果应该是像组态软件一样,每种元件,都可以设置自己的属性和事件,甚至是脚本代码.用户只需要把这些元件组合起来,就能生成自己想要的场景,再用PLC的程序对这个场景加以控制.只是目前见过的组态软件的元件都是2D的,不是我设想的3D效果.实际上我设想的效果其实是一种3D效果的组态软件.
如果要让这些3D元件任意组合后,也可以相互作用,就必须引入动力学仿真引擎.回到上面笔者设想的场景.机器手把产品放置到拉带上,这是一种关节运动.产品跟随着拉带一起走,这个可以通过向产品施加固定的力来实现.产品在拉带上不会因为引力穿透拉带往下沉,是因为产品与拉带都是刚体,它们之间有相互力的作用的原因.产品走到拉带尾部,应该是以自由落体方式掉下去.当掉到OK产品盒子里时,因为盒子是个凹体的刚性容器,两者产生碰撞,产品不会穿透盒子沉下去.
动力学仿真引擎比较有名气的是ODE(Open Dynamics Engine) ,貌似是款日本人的开源且免费的仿真引擎.听说有几款游戏也使用它做物理仿真.
当然这个不是笔者关注它的主要原因.由于笔者使用的开发语言是C#,而其名的C#的 OPENGL框架taoframework里面是刚好有一个ODE的库.因此才正中重笔者下怀,决定开始研究ODE,至于其它的动力学引擎,再优秀也不予考虑了.
OpenGL和动力学仿真方面的应用,果真不是C#善长的东西,百度一下这方面的资料,都是C++的天下,基本上没太多C#相关的代码供参考,你能做的,就是把C++的东西转换过来,对于我来说,c++就是恶梦.笔者是从事工业控制行业的软件工程师,前几年,手里有一款激光测厚仪的代码,因为是前任工程师的产物,我维护了它几年,毛病不断.可怜啊,因为它往珠海那家工厂跑了无数次,做梦都诅咒那破代码,说起来都是泪呀.
对于工控行业来说,对比诸多语言,c#开发效率算是不错的,能让你能愉快的玩耍,还有一点很重要,就是它能装B,因为它是门语法优雅的语言.^_^
笔者计划把ODE的研究结果,写成一个系列的教程,心里面感觉也算是给使用C#做同样工作的朋友的做了点小小的贡献吧.
接下来说下平台的搭建:
首先下载最新的ode,地址为 :http://ode.org/download.html
解压,打开ode根目录下的build文件夹,里面有个premake4.exe.
打开命令行,在命令行中打开至build文件夹,输入:premake4 --help,可以查看premake4的一些可选参数,
此处我只需要带demo编译,于是输入 premake4 --with-demos vs2010
这样,在build文件夹下面就生成了一个文件夹,vs2010,打开vs2010文件夹,里面就生成了demo的项目文件和解决方案文件,打开ode.sln编译就可以了。
生成的demo例程,共有40个,不过都是C++写的,你得确保你的vs2010安装有C++哦.
如果不想看c++代码也没关系,因为笔者主要的任务就是能让这些代码能在C#里面跑起来.各位C#的同志可以很容易派生继承.^_^
笔者跑几个demo,截图给大家欣赏一下,看到效果确实让人有那么一点小激动,让我想起了3dsmax中的rector(反应堆动力学).
这是刚体碰撞,大大小小的球随机落下来,因为质量不同,砸下来时,球与球之间的受到的力不同.地板上还有摩擦力,因此球最终会静止.
三个轮子的小车,轮子还可以转方向,还可以爬坡.这让我想起了3dsmax中rector中的toyCar,两者模拟的都是可以跑动的小车.我记得当时最喜欢做的事,就是让小车爬坡和撞墙,或者尾巴上拉根线,绑定一个茶壶拖着跑,呵呵.
其它的还需要下载一个C#用的OpenGL库:
http://www.opengl.org/resources/bindings/ 选择The Tao Framework+.net 2.0
前面我提过,这个库主要的功能是让C#支持OpenGl, 另外它还带有一些非常有用的库,除了ODE,还有一个支持大部分图片格式的处理纹理的库.
还有一个C#用的OpenGL库,叫SharpGL,它做为我们以后教程中主要的OpenGL开发环境来使用,我们会把ODE中的3D绘图环境库drawstuff的功能移值到SharpGL中去.
http://www.oschina.net/p/sharpgl
总结一下: ODE源代码,仅供参考,以及观看下demo的效果
The Tao Framework+.net 2.0 我们只是用它里面的ODE库,和其它的一些辅助库
SharpGL + Vs2010 C# 构成我们的 3D绘图与语言开发环境
未完待续.....
原创文章,出处 : http://www.cnblogs.com/hackpig/
动力学仿真引擎ODE的学习笔记,C#演示(一)的更多相关文章
- html5游戏引擎-Pharse.js学习笔记(一)
1.前言 前几天随着flappy bird这样的小游戏的火爆,使我这种也曾了解过html5技术的js业余爱好者也开始关注游戏开发.研究过两个个比较成熟的html5游戏引擎,感觉用引擎还是要方便一些.所 ...
- Java模板引擎之Freemarker 学习笔记 一
什么是Freemarker Freemarker是模板引擎,不是Web框架,只是视图层的组件,官网是 https://freemarker.apache.org/ Freemarker原理 数据模型+ ...
- javascript模板引擎之artTemplate 学习笔记
<div id="content"></div><div id="content1"></div><h1& ...
- 系列文章--Node.js学习笔记系列
Node.js学习笔记系列总索引 Nodejs学习笔记(一)--- 简介及安装Node.js开发环境 Nodejs学习笔记(二)--- 事件模块 Nodejs学习笔记(三)--- 模块 Nodejs学 ...
- JVM学习笔记:字节码执行引擎
JVM学习笔记:字节码执行引擎 移步大神贴:http://rednaxelafx.iteye.com/blog/492667
- Apache OFBiz 学习笔记 之 服务引擎 二
加载服务定义文件 ofbiz-component.xml:所有的服务定义文件在每个组件的ofbi-component.xml文件中 加载服务定义 例:framework/common/ofbi ...
- [Firefly引擎][学习笔记一][已完结]带用户验证的聊天室
原地址:http://bbs.9miao.com/thread-44571-1-1.html 前言:早在群里看到大鸡蛋分享他们团队的Firefly引擎,但一直没有时间去仔细看看,恰好最近需要开发一个棋 ...
- NVelocity模板引擎学习笔记
NVelocity模板引擎学习笔记 学习模板引擎有一段时间现在做一些总结
- cocos2d-x入门学习笔记,主要介绍cocos2d-x的基本结构,并且介绍引擎自带的示例
cocos2d-x 3.0 制作横版格斗游戏 http://philon.cn/post/cocos2d-x-3.0-zhi-zuo-heng-ban-ge-dou-you-xi http://blo ...
随机推荐
- IPhone手机页面中点击文本输入框,弹出键盘,网页会放大,如何解决
在head标签中加入以上meta声明.具体属性可以谷歌/百度. <meta name="viewport" content="width=device-width, ...
- asp.net 局域网中获取 client的机器名
//获取客户端计算机名称 System.Net.IPAddress clientIP = System.Net.IPAddress.Parse(Request.UserHostAddress);//根 ...
- 7款HTML5精美应用教程 让你立即爱上HTML5
你喜欢HTML5吗?我想下面的这7个HTML5应用一定会让你爱上HTML5的,不信就一起来看看吧. 1.HTML5/jQuery雷达动画图表 图表配置十分简单 之前我们介绍过不少形形色色的HTML5图 ...
- zookeeper入门系列讲解
zookeeper可谓是目前使用最广泛的分布式组件了.其功能和职责单一,但却非常重要. 在现今这个年代,介绍zookeeper的书和文章可谓多如牛毛,本人不才,试图通过自己的理解来介绍zooke ...
- LINUX下安装软件方法命令方法
1.通常Linux应用软件的安装包有三种: 1) tar包,如software-1.2.3-1.tar.gz.它是使用UNIX系统的打包工具tar打包的. 2) rpm包,如software-1.2. ...
- cmd.exe启动参数详解
https://blog.csdn.net/moonhillcity/article/details/53039763 各个系统中打开文件的命令 "windows系统: cmd " ...
- [web] spring boot 整合MyBatis
1.maven依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...
- JavaScript 词法、静态、动态作用域初级理解
开始之前 由于本人也是JavaScript初学者,记录学习经过,怕以后会忘记. 对于JavaScript 初学者来说,最难的不是代码部分,而是对很多书籍中的术语的理解,大多时候想要理解一段JavaSc ...
- Postman模拟Request Payload发送请求
Postman模拟Request Payload发送请求,如下图所示:
- create a cocos2d-x-3.0 project in Xcode
STEP1: Open Terminal SETP2: Run setup.py SETP3: Run source /Users/your_user/.bash_profile( so that e ...