C#应用视频教程2.1 OPENGL虚拟仿真介绍
OPENGL的虚拟仿真对于工控自动化的意义很大,虽然市面上有很多的第三方软件比如Solidworks,Mathlab,ProE等等软件可以做仿真,而且能够实现的功能包括了流体分析,力学分析,摩擦力分析等等,这些都是我们自己写一个简单仿真软件无法实现的,然而如果要做一个标准的软件,我们就只能使用C++,C#,JAVA这些软件自己写了。
仿真的意义在于可以提高编程效率,在空间轨迹规划部分,如果不能可视化的数据,我们就无法快速定位到错误,也无法直观的看到自己写的控制程序是否合理(在我的另一个TwinCAT倍福PLC教程中我介绍了可以用第三方软件的图标工具采集每个电机轴的位置,速度,加速度曲线,那样做确实也是一个做法,但是通用性,快捷性都不如自己用上位机来实现)
C#中集成OPENGL有很多个类库,最简单的是SharpGL,除此之外还有CSharpGL,CSGL,OpenTK,EWDraw,TAO等等,本节教程将重点介绍ShargGL,因为简单的使用用这个就够了,其他类库性能更高,但是用法也更复杂,如果要移植到其他框架类库,其实只是部分代码改改,核心的思想都没有变。与OPENGL对应的是微软自家的DirectX,相比之下OPENGL的通用性更广,可以借鉴的资料也更多
如果要深入研究这部分内容,可以研究高手的代码(比如SharpGL为我们提供了一些范例程序),此外网上比较火的还有NEHE的教程,我都放在了本节教程的参考代码中(最好还是先看网上系列化的帖子入门学习)

首先是我们还是做WinForm的程序,把下载的SharpGL的类库都放到Debug目录下

把SharpGL.dll直接拖放到VS的工具箱,然后可以看到多出来几个控件,拖放一个OpenGLControl控件到窗体上

定位到这个控件的OpenGLDraw事件,然后直接在里面复制粘贴下面的代码(就是绘图的过程,跟基础教程的GDI+绘图很像)

这个代码的运行效果是绘制一个三角形,然后绘制一个矩形(基本照抄了网上的文章,但是跟他的部分有一些不一样,直接复制粘贴无法正常运行,其实就是差了一点点,比如画三角形他是OPENGL.TRIANGLES,而我是OPENGL.GL_TRIANGLES,可能是类库的版本不同导致的,前面讲了如果是移植到别的类库也就是名字不太一样)

接下来解释一下刚才的代码,前面初始化部分就不说了,你还是需要脑子里想清楚自己目前手里拿着一支笔,正好在画布的中间位置,笔尖垂直于画布(画布就是你刚才拖放的控件,你可以把控件拖放到其他地方,也可以修改大小,但是一旦开始画就是以这个控件当前尺寸为基础算起点)。每一次执行Translate就是沿着X,Y,Z平移指定的距离,每一次执行Rotate就是绕着X,Y,Z旋转指定的角度,而gl.LoadIdentity方法就是重置画笔到初始位置,gl.Vertex方法就是戳一个点,每绘制一个东西都是从gl.Begin(XXX)到gl.End结束

再接着复杂一点,我们除了随时可以调整画笔的位置和姿态,还可以随时修改画笔的颜色(注意是RGB的三种颜色的混合,比如R=1.0f,G=0.0f,B=0.0f就表示全是Red,G,B都没有,感兴趣的可以用PS的调色板观察一下各种颜色的RGB分配情况,只要知道可见光都可用RGB三种颜色的混合叠加出来,当然RGB也只是一种叠加模式,CMYK好像也是一种,还有更加低端的颜色处理方式比如灰度图像)

更多教学视频和资料下载,欢迎关注以下信息:
我的优酷空间:
http://i.youku.com/acetaohai123

我的在线论坛:
http://csrobot.gz01.bdysite.com/

问题交流:
QQ:910358960
C#应用视频教程2.1 OPENGL虚拟仿真介绍的更多相关文章
- C#应用视频教程2.4 OPENGL虚拟仿真介绍
这一部分我们首先实现视图控制(包括了平移/旋转/缩放),前面我们已经讲过,通过lookat一个函数,或者通过translate+rotate两个函数,都能实现视图的控制(两个函数的方式比较简单,但是通 ...
- C#应用视频教程2.3 OPENGL虚拟仿真介绍
本节最重要的一个内容,就是让视野可以平移+旋转+缩放(就像打CS游戏一样以第一人称视角去观察物体,如果可能的话W,S,A,D四个按键控制人物移动,还有鼠标控制视角),本节最重要的一个概念就是设置观察视 ...
- C#应用视频教程2.2 OPENGL虚拟仿真介绍
三维在理解了如何绘制2D元素之后,我们尝试绘制3D元素. 其实多个三角形也能够成四面体,多个长方形也能够成六面体,所以绘制3D元素的时候,只要顶点数量匹配就行了 这里我们尤其注意,我把绘制之前的三 ...
- 基于unity3d IFC的虚拟仿真系统
- 国家虚拟仿真实验教学项目共享平台(实验空间)PHP SDK
使用XJWT标准,此标准基于JSON Web Token (JWT)开发.XJWT包含三个参数:header, payload, signature,因此生成token就要先获得这三个参数. clas ...
- 2017.04.20 Adams仿真介绍
Adams 仿真 | 验证"隐性机器人模型"概念,提高视觉伺服精度 产品:Adams行业:科研优势: 1.Adams 仿真可精确预测机器人的位置和方位 2.仿真在理论工作验证中起着 ...
- 【转】OpenGL相关函数库介绍
原文:http://blog.chinaunix.net/uid-20638550-id-1909182.html OpenGL 函数库相关的API有核心库(gl).实用库(glu).辅助库(aux) ...
- OpenGL教程(0)——介绍
OpenGL介绍 OpenGL,全称Open Graphics Library,是一个用C语言写的图形API.通俗地说,OpenGL用来绘制2D/3D图形.目前OpenGL的运用十分广泛,有许多用Op ...
- 解析vue2.0的diff算法 虚拟DOM介绍
react虚拟dom:依据diff算法台 前端:更新状态.更新视图:所以前端页面的性能问题主要是由Dom操作引起的,解放Dom操作复杂性 刻不容缓 因为:Dom渲染慢,而JS解析编译相对非常非常非常快 ...
随机推荐
- Linux-数据库1
数据库介绍 数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合.数据库中的数据按一定的数学模型组织.描述和存储,具有较小的冗余,较高的数据独立性和易扩展性,并可为各种 ...
- Python开发基础-Day25-28FTP项目(待补充)
optparse C:\Users\Mr.chai>python C:/Users/Mr.chai/Desktop/PythonProject/DAY/day27/LuffyFTP/client ...
- Hibernate iterate(迭代)
在Hibernate中,有它自己的iterate方法.这里是一个n+1的问题,n代表数据量,而1表示查询所有的主键. 这里与List进行比较. 这里使用list时会将所有数据查询出来. 而在使用ite ...
- HDU3530【STL/单调队列/RMQ】
题目链接[http://acm.hdu.edu.cn/showproblem.php?pid=3530] 题意:输入n,m,k;n代表n个点,在这n(n<100000)个点中找到最长的连续子序列 ...
- 【BZOJ 3566】 3566: [SHOI2014]概率充电器 (概率树形DP)
3566: [SHOI2014]概率充电器 Description 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品——概率充电器:“采用全新纳米级加工技术,实现元件与导线能否通电 ...
- BZOJ1002: [FJOI2007]轮状病毒 (DP)
标准做法似乎应该是计算生成树数量的基尔霍夫矩阵之类的.. 我看到的做法是一个神奇的高精度dp,当然以后这个blahblahblah矩阵还是要搞一下.. 参考(抄袭)网址 这个dp的原理就是把环 ...
- 【8.23校内测试】【贪心】【线段树优化DP】
$m$的数据范围看起来非常有问题??仔细多列几个例子可以发现,在$m<=5$的时候,只要找到有两行状态按位$&$起来等于$0$,就是可行方案,如果没有就不行. #include<i ...
- python开发_shelve_完整版_博主推荐
''' python中的shelve模块,可以提供一些简单的数据操作 他和python中的dbm很相似. 区别如下: 都是以键值对的形式保存数据,不过在shelve模块中, key必须为字符串,而值可 ...
- [转]如何解决android模拟器慢的问题
分步阅读 在android开发的过程,发现android模拟器的速度不是一般的慢,那主要是因为android模拟器默认采用的是arm处理器造成的,这里主要提供两种方法: ① 利用intel虚拟硬件加速 ...
- PAT甲级1003. Emergency
PAT甲级1003. Emergency 题意: 作为一个城市的紧急救援队长,你将得到一个你所在国家的特别地图.该地图显示了几条分散的城市,连接着一些道路.每个城市的救援队数量和任何一对城市之间的每条 ...