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解析编译相对非常非常非常快 ...
随机推荐
- [webpack] devtool里的7种SourceMap[转]
modle: development cheap-source-map debug 不太方便,不是以原来的文件的形式cheap-module-source-map 可以 debugcheap-modu ...
- [BZOJ4521][CQOI2016]手机号码(数位DP)
4521: [Cqoi2016]手机号码 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 875 Solved: 507[Submit][Status ...
- HihoCoder - 1756 打怪
题面在这里! 拆成两个部分分别算显然比较简单. 前面一个部分排个序枚举最大值算就好啦. 后面的就相当于把每一种数值的贡献加起来,也可以在排完序之后的a[]上面直接算出来. #include<bi ...
- JDK源码(1.7) -- java.util.AbstractList<E>
java.util.AbstractList<E> 源码分析(JDK1.7) ------------------------------------------------------- ...
- 05-树6. Path in a Heap (25) 小根堆
05-树6. Path in a Heap (25) Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.patest.cn/contes ...
- Hive伪分布式下安装
本安装过程只作为个人笔记用,非标准教程,请酌情COPY.:-D Hive下载 下载之前,需先查看兼容的Hadoop版本,并安装hadoop,参考 http://www.cnblogs.com/yong ...
- 把json格式的字符串转换成javascript对象或数组
第一种 JSON.parse(jsonString) 第二种 eval("("+jsonString+")") 第三种 var obj=(function ...
- linux命令: Netstat
在Internet RFC标准中,Netstat的定义是: Netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告. Netstat是控 ...
- Regulator IC forms convenient overvoltage detector
Figure 1 shows a simple, stand-alone overvoltage detector. The intent of the circuit is to monitor a ...
- One switched-capacitor IC simultaneously inverts, doubles, and halves the input voltage.