动力学仿真引擎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 ...
随机推荐
- /var/log/messages Logging not working on Centos 7
This was the solution, not permanent, though: rm -f /var/lib/rsyslog/imjournal.state systemctl resta ...
- Python:查看矩阵大小,查看列表大小
对于Python3.5 查看矩阵大小 >>>import numpy as np >>>from numpy import random >>>m ...
- MATLAB出现:错误使用 xlsread (line 251)
背景: matlab 2015b和Excel2003 方法: 改Excel的Com加载项 步骤: 1 2 3 4
- 前端Table数据导出Excel使用HSSFWorkbook(Java)
一.实现原理: 1. 前端查询列表数据并渲染至table(<table>...</table>)表格 2. 表格html代码传输至后台 3. 后台把html转成Excel输出流 ...
- RabbitMQ学习笔记(二):基础概念
前言 上一篇已经通过springboot对rabbitmq的简单封装实现了消息的发送和消费,虽然功能简单,但已经大概了解了它的使用方法.接下来陆续介绍RabbitMQ中的几个核心概念:Queue,Ex ...
- JAVA中的数字运算+号与字符串+号
(1)当“+”两边是非数值类型,“+”就被看作连接符. (2)当“+”两边都是数值类型,“+”就被看作算术运算中的加号. (3)当“+”一边是非数值,一边是数值类型,“+”就被看作连接符.
- 用外部物理路由器时与外部dhcp服务时怎样使用metadata服务(by quqi99)
作者:张华 发表于:2015-12-31版权声明:能够随意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.csdn.net/quqi99 ) 用外部 ...
- Scripting.FileSystemObject对象的详细技巧指南
Scripting.FileSystemObject对象的详细技巧指南 FileSystemObject对象提供对计算机文件系统的访问: powered by 25175.net 在代码内操作文本文件 ...
- 《HTTP权威指南》学习笔记——HTTP概述
1.HTTP--因特网的多媒体信使 HTTP使用的是可靠的数据传输协议,能确保数据在传输过程中不会损坏或混乱. 2.Web客户端和服务器 Web服务器(HTTP服务器)根据客户端的请求返回服务端的数据 ...
- struts2危险漏洞解决方法
原创,bgy编写.2013-07-24 前文: 随着苹果开发者网站的沦陷,已经曝光一周的Apache Struts2漏洞再次成为热门话题,今天有消息称由于该漏洞被利用,淘宝的数据库已经被盗,尽管淘宝官 ...