在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
三维在理解了如何绘制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
|
请发表评论