®版权声明:本文为博主原创文章,未经博主允许不得转载。

一.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#演示(一)的更多相关文章

  1. html5游戏引擎-Pharse.js学习笔记(一)

    1.前言 前几天随着flappy bird这样的小游戏的火爆,使我这种也曾了解过html5技术的js业余爱好者也开始关注游戏开发.研究过两个个比较成熟的html5游戏引擎,感觉用引擎还是要方便一些.所 ...

  2. Java模板引擎之Freemarker 学习笔记 一

    什么是Freemarker Freemarker是模板引擎,不是Web框架,只是视图层的组件,官网是 https://freemarker.apache.org/ Freemarker原理 数据模型+ ...

  3. javascript模板引擎之artTemplate 学习笔记

    <div id="content"></div><div id="content1"></div><h1& ...

  4. 系列文章--Node.js学习笔记系列

    Node.js学习笔记系列总索引 Nodejs学习笔记(一)--- 简介及安装Node.js开发环境 Nodejs学习笔记(二)--- 事件模块 Nodejs学习笔记(三)--- 模块 Nodejs学 ...

  5. JVM学习笔记:字节码执行引擎

    JVM学习笔记:字节码执行引擎 移步大神贴:http://rednaxelafx.iteye.com/blog/492667  

  6. Apache OFBiz 学习笔记 之 服务引擎 二

    加载服务定义文件   ofbiz-component.xml:所有的服务定义文件在每个组件的ofbi-component.xml文件中   加载服务定义 例:framework/common/ofbi ...

  7. [Firefly引擎][学习笔记一][已完结]带用户验证的聊天室

    原地址:http://bbs.9miao.com/thread-44571-1-1.html 前言:早在群里看到大鸡蛋分享他们团队的Firefly引擎,但一直没有时间去仔细看看,恰好最近需要开发一个棋 ...

  8. NVelocity模板引擎学习笔记

    NVelocity模板引擎学习笔记 学习模板引擎有一段时间现在做一些总结

  9. 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 ...

随机推荐

  1. gitlab的安装和基本维护

    基本介绍 GitLab是一个自托管的Git项目仓库,可以自己搭建个人代码管理的仓库,功能与github类似. 安装 操作系统:CentOS6.5 gitlab官网下载安装地址:https://abou ...

  2. ARC介绍

    从Ray Wenderlich的教程中截取了一小段作为对objective c中ARC的介绍,讲得比较清晰,原文有丰富的例子,见此 它是怎么工作的 你大概已经熟悉如何手工管理内存了, 就像这样:如果你 ...

  3. 使用java启动mybatis generator

    1.java工程目录结构: |src/main/java |com.leslie.mybatis.generator |MybatisGeneratorUtil.java |src/main/reso ...

  4. 配置nginx.config 报错:connect() failed (111: Connection refused) while connecting to upstream解决

    php-fpm没有运行 执行如下命令查看是否启动了php-fpm,如果没有则启动你的php-fpm即可 查看: netstat -ant | grep 9000 执行 /usr/local/php/s ...

  5. Centos7.3.1611安装mysql5.7.18 rpm教程 并设置datadir

    一.卸载MariaDB CentOS7默认安装MariaDB而不是MySQL,而且yum服务器上也移除了mysql相关的软件包.因为MariaDB和MySQL可能会冲突,故先卸载MariaDB. 1. ...

  6. 关于redis连接池

    1.redis-py不需要显式使用连接池. 在幕后,redispy使用一个连接池来管理与Redis服务器的连接.默认情况下,每个Redis实例将依次创建自己的连接池.您可以通过将已创建的连接池实例传递 ...

  7. iOS: 解决某些第三方库因为ARC不能使用的问题

    1.在target下面的build phases下有一个compile source,下面有很多待编译文件.可以看到一个compile flag,可以针对某些文件进行arc设置.这样,某些框架不能使用 ...

  8. JQuery难点备忘

    1 jquery绑定事件如何传递参数 $("#btn").bind("click",{"id":"111"," ...

  9. 5 -- Hibernate的基本用法 --1 3 流行的ORM框架简介

    ⊙ JPA : JPA本身只是一种ORM规范,并不是ORM产品.它是Java EE规范制定者向开源世界学习的结果.JPA实体与Hibernate PO十分相似,甚至JPA实体完全可作为Hibernat ...

  10. 联想一体机u盘启动设置

    开机启动按f12键,进入后,到最后一项exit把OS Optimized Defaults(操作系统优化的缺省值)改成Disabled(关闭). 再进入到Startup这一项,选择UEFI/Legac ...