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解析编译相对非常非常非常快 ...
 
随机推荐
- ajax个人总结
			
ajax是什么? AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 不是新的编程语言,而是一种使用现有标准的新方法. ...
 - 再谈mobile web retina 下 1px 边框解决方案
			
本文实际上想说的是ios8下 1px解决方案. 1px的边框在devicePixelRatio = 2的retina屏下会显示成2px,在iphone 6 plug 下,更显示成3px.由其影响美感. ...
 - Redis学习篇(一)之String类型及其操作
			
SET 作用: 设置key对应的值, 返回ok 语法: SET key value [EX seconds] [PX milliseconds] [NX] [XX] 如果key已经存在,同名会产生覆盖 ...
 - 「ZJOI2018」历史
			
「ZJOI2018」历史 前置知识 \(\text{LCT}\) 维护子树信息,考虑辅助树上一个节点的子树信息只是其代表的这一段链的信息,设 \(S(u)\) 为节点 \(u\) 的子树信息,那么在辅 ...
 - [BZOJ4868][六省联考2017]期末考试(三分)
			
4868: [Shoi2017]期末考试 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 964 Solved: 439[Submit][Status ...
 - <form> 标签   // HTML 表单    // from 表单转换成json 格式
			
<form> 标签 // HTML 表单 // from 表单转换成json 格式 form 表单,对开发人员来说是在熟悉不过的了,它是页面与web服务器交互时的重要信息来源 表 ...
 - Miller_rabin算法+Pollard_rho算法 POJ 1811 Prime Test
			
POJ 1811 Prime Test Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 32534 Accepted: 8 ...
 - Apache之.htaccess备忘录(一)
			
.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置,也是使用apache的同学最常碰到的文件,下面罗列一些常用的知识,以备不时之需. 1 . 如何让Apache支持 ...
 - Linux知识(4)----文件系统结构
			
Ubantu 14.04的文件系统结构如下图所示: 参考资料: 1.http://www.cnblogs.com/wen858636827/archive/2012/12/26/2834373.htm ...
 - VMware中网络设置之NAT
			
当完成VMwareWorkStation安装之后,网络连接中会多出两个网络连接,分别是VMnet1和VMnet8,如下图所示: 整个机器的结构就可以抽象成:VMware虚拟机系统(虚拟网卡vmnet0 ...