C#视频教程:OPENGL虚拟仿真技术概览

三维在理解了如何绘制2D元素之后,我们尝试绘制3D元素。


其实多个三角形也能够成四面体,多个长方形也能够成六面体,所以绘制3D元素的时候,只要顶点数量匹配就行了

C#应用视频教程2.2 OPENGL虚拟仿真介绍_资料下载

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

C#应用视频教程2.2 OPENGL虚拟仿真介绍_三角面片_02

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

C#应用视频教程2.2 OPENGL虚拟仿真介绍_状态机_03

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

C#应用视频教程2.2 OPENGL虚拟仿真介绍_状态机_04

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

C#应用视频教程2.2 OPENGL虚拟仿真介绍_3d_05

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

C#应用视频教程2.2 OPENGL虚拟仿真介绍_状态机_06

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

C#应用视频教程2.2 OPENGL虚拟仿真介绍_3d_07



免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空