C#应用视频教程2.2 OPENGL虚拟仿真介绍
三维在理解了如何绘制2D元素之后,我们尝试绘制3D元素。
其实多个三角形也能够成四面体,多个长方形也能够成六面体,所以绘制3D元素的时候,只要顶点数量匹配就行了

这里我们尤其注意,我把绘制之前的三个平移和三个旋转单独拿出来做成变量,如果你的TranslateZ默认值是0的话,你默认看到的是黄色面,如果把TranslateZ设置为负值,则看到了红色,且越来越小,如果把TranslateZ设置为正数,则啥也看不到了。这里读者还需要有一个额外的空间想象能力,就是你的观察视角在哪里。默认的时候你的观察视角就在画笔的位置,所以你就相当于眼球贴着画布,你只能看到一面色彩,如果空间的画笔(注意不是平面的画笔)TranslateZ有数值了,则相当于画笔抬起离开了画布,或者往里戳穿了画布在画东西(每一个渲染周期都是把之前画的都扔掉,重新画笔平移+旋转+绘制),所以此时我们应该想象成你拿着一只画笔在空间画3D图(先这么理解,后面这个观察视角的问题我会另外介绍)

我们前面一直在用颜色绘制图像,除了颜色也可以用贴图的方法。注意要使用SharpGL自带的类型。此外要开启允许纹理图片(所谓的gl.Enable(XXX) 和gl.Disable(XXX)就是打开和关闭的阀门,OPENGL是一个状态机,他在运行的时候每个周期就是清空画布,重新画图,在画图的时候你随时可以打开和关闭一些阀门,比如纹理,材质,光照,漫反射等等效果,这个我们后面会逐渐深入讲解)

不启用纹理之后,看到的图像就没有3D效果了(比贴了颜色还难看)

在绘制的时候我们把前面的一个gl.Begin-gl.End分成了六个,每个单独绘制(如果你在某些代码中发现别人写gl.Begin(7),不要觉得很奇怪,因为gl.Begin(OpengGL.GL_QUADS)这个立方体就是uint类型,就是7,前面OPENGL很多开启和关闭的功能也是一个uint类型)gl.Normal是指定面的法向,指定面的方向可以让光照效果更加逼真,尤其是在导入大型3D物体的时候,实际上再复杂的3D物体也是多个三角形面片组成的(TRIANGLE),如果你不为每个三角面片指定法向,则整个3D物体看起来会像平面的一样

讲到光照,就可以把有没有光照的对比放在一起讲。开启光照之后,读者可以自己体会把立方体从左边运动到右边的效果变化(目前可以认为光照是一个小台灯,而且位置是死的,所以距离太远就越来越暗,甚至直接看不到,如果关闭光照效果,则不会由于位置的变化而有阴影)

光照其实也是可以设置的非常复杂的,我们不是做大型游戏,所以一般涉及不到(个人认为也没有必要在这些事情上浪费太多时间),我们这里设置的光源位置,环境光,漫射光之类的参数直接照抄就行了(后面介绍颜色纹理的时候用得上,因为大部分时候还是用颜色在着色,单纯颜色和颜色纹理效果还是区别挺大的,颜色纹理如同纯黑的柱子在光照下显得明暗很逼真,而单纯的颜色画笔就黑的没什么特点,绘制一个球马上就能看出来)

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

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

问题交流:
QQ:910358960
C#应用视频教程2.2 OPENGL虚拟仿真介绍的更多相关文章
- C#应用视频教程2.1 OPENGL虚拟仿真介绍
OPENGL的虚拟仿真对于工控自动化的意义很大,虽然市面上有很多的第三方软件比如Solidworks,Mathlab,ProE等等软件可以做仿真,而且能够实现的功能包括了流体分析,力学分析,摩擦力分析 ...
- C#应用视频教程2.4 OPENGL虚拟仿真介绍
这一部分我们首先实现视图控制(包括了平移/旋转/缩放),前面我们已经讲过,通过lookat一个函数,或者通过translate+rotate两个函数,都能实现视图的控制(两个函数的方式比较简单,但是通 ...
- C#应用视频教程2.3 OPENGL虚拟仿真介绍
本节最重要的一个内容,就是让视野可以平移+旋转+缩放(就像打CS游戏一样以第一人称视角去观察物体,如果可能的话W,S,A,D四个按键控制人物移动,还有鼠标控制视角),本节最重要的一个概念就是设置观察视 ...
- 基于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解析编译相对非常非常非常快 ...
随机推荐
- MAC OS 10.11.1虚拟机免费下载已安装Xcode7图片后有下载地址
MAC OS 10.11.1虚拟机免费下载已安装Xcode7图片后有下载地址 注意:已经下载过MAC OS 10.10.5虚拟机免费下载(可安装Xcode7)链接:http://www.cnblogs ...
- WEB架构师成长之路 二
法宝一:牛人爱惜自己的时间. 时间就是金钱,时间就是生命,时间如同健康一样,如果时间都没有,那成功也就是浮云了.所以牛人总是很爱惜自己的时间,总是在想办法提高自己的做事效率.我突然想了起来,我QQ里有 ...
- Request Response 跳转页面的理解
1.response 跳转页面 private void writeContent(String content) { HttpServletResponse response = ((Servlet ...
- bzoj 3289 莫队 逆序对
莫队维护逆序对,区间左右增减要分类讨论. 记得离散化. /************************************************************** Problem: ...
- HttpURLConnection与 HttpClient 区别/性能测试对比
HttpClient是个开源框架,封装了访问http的请求头,参数,内容体,响应等等, HttpURLConnection是java的标准类,什么都没封装,用起来太原始,不方便 HttpClient实 ...
- mssql Row_Number() 分页 DISTINCT 问题
转载原文地址http://www.cnblogs.com/pumaboyd/archive/2008/04/20/1162376.html 这周碰到了很多奇怪的问题,有些是莫名的低级错误,有些这是一直 ...
- 【PHP内存泄漏案例】PHP对象递归引用造成内存泄漏
[案例一] 作者:老王 如果PHP对象存在递归引用,就会出现内存泄漏.这个Bug在PHP里已经存在很久很久了,先让我们来重现这个Bug,代码如下: <?php class Foo { funct ...
- linux下使用free命令查看实际内存占用(可用内存)
转:http://blog.is36.com/linux_free_command_for_memory/ linux下在终端环境下可以使用free命令看到系统实际使用内存的情况,一般用free -m ...
- unity 3D + Google Play In-app Billing (IAB)(转) 热度 3
最近由于工作需要,研究unity如何接入Google Play以实现游戏内购买.目前IAB的实现,prime31做的插件比较好,各平台的IAB均有,但费用相对过高(几乎都是70刀左右,可怜穷小子).在 ...
- [转载] 无所不能的“蚂蚁”--Ant
说他无所不能,好像有点夸张,但是用过Ant之后,感觉真的是只有想不到没有作不到.Ant,原作者选择他作为软件名字的意思是指"令一个简洁的工具"(Another Neat Tool) ...