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解析编译相对非常非常非常快 ...
随机推荐
- Kuhn-Munkres算法
KM算法——二分图最大权匹配 我们前面学过了二分图匹配的匈牙利算法.但这种算法是针对没有权值的图来说的. 肯定有人想问,没有权值的用匈牙利算法,哪有权值的图要求最大权或最小权匹配呢?? 这里就引出了我 ...
- CF617/E XOR and Favorite Number
题目链接:http://codeforces.com/contest/617/problem/E 题意:给出一个长度为n(1e5)的序列,有m(1e5)次操作,每次操作选择一个L-R区间,然后输出符合 ...
- NOIP2017 D2T2宝藏
考场上写的prim一遍过了大样例也没想什么别的,反例也没举出来. 后来才知道由于要乘上深度所以无法贪心. 正解是状压但我不会,考后一个爆搜碾过去了. 心凉. #include<bits/stdc ...
- [BZOJ2594][WC2006]水管局长加强版(LCT+Kruskal)
2594: [Wc2006]水管局长数据加强版 Time Limit: 25 Sec Memory Limit: 128 MBSubmit: 4452 Solved: 1385[Submit][S ...
- Android开发AlertDialog解析
打开源码,首先映入眼帘的是三个构造方法,但这三个构造方法都是protected类型的, 可见,不允许我们直接实例化AlertDialog. 因此,我们再看别的有没有方法.可以实例化 再仔细一看,发现一 ...
- [洛谷P3987]我永远喜欢珂朵莉~
[洛谷P3987]我永远喜欢珂朵莉~ 题目大意: 给你\(n(n\le10^5)\)个数\(A_{1\sim n}(A_i\le5\times10^5)\),\(m(m\le5\times10^5)\ ...
- bzoj 4769: 超级贞鱼 -- 归并排序
4769: 超级贞鱼 Time Limit: 1 Sec Memory Limit: 128 MB Description 马达加斯加贞鱼是一种神奇的双脚贞鱼,它们把自己的智慧写在脚上——每只贞鱼的 ...
- CCTableView使用及其ViewSize动态调整
cocos2dx的CCTableView使用及其ViewSize动态调整,直接上代码参考如下: // // summary : 水平滑动样式的TableView用法 void createGlobal ...
- bzoj 2428: [HAOI2006]均分数据 随机化
2428: [HAOI2006]均分数据 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/ ...
- MYSQL学习笔记 (一)
每次面试后,都决定一改前非.事实上依然和那些发誓再吃最后一份美食的胖子一样.不管这次是不是三分钟热度但是至少我开始. MYSQL引擎 说到MYSQL引擎我又想起研二时候去面试的第一家公司 ...