大家好!
本期丹丹将给大家解析的是OpenGL中的旋转平移缩放变化实现和常用回调函数的介绍
本期视频的链接地址是:
https://www.bilibili.com/video/av22973264
大家也可以直接在bi站首页搜索:New程序媛 ,即可看到相应视频
本期的资源和代码下载链接是:
链接:https://pan.baidu.com/s/1QWd8_CDk3XNBAGByVG7oqQ 密码:cuj4
视频搭配文章一起效果更赞哦
上一期中给大家介绍了基本图元,我们画了不少美(chou)腻(lou)的图形,本期结合着马上要到来的520,丹丹画了一颗立体的大钻石
送给大家。还望大家笑纳
首先我们看看运行的效果图:
游戏中的图形变换离不开向量和矩阵的知识,但本期中我们并不会马上就细讲向量和矩阵,请大家不要着急,因为之前写的代码,图形都是静态的,所以丹丹希望大家能借助glut中的回调函数,动手写出有互动感的代码。
今天代码中的跟矩阵相关的内容,我们是直接使用的glm库,一个开源的OpenGL数学库。从官网下载下来后,直接把项目路径中的glm文件夹拷贝到项目的include文件夹中即可。或者从我共享的资源中拷贝即可。
第一步,我们要做的就是在代码中加载glm的头文件:
然后我们定义好顶点、颜色和索引数据:
接着我看看数据的初始化,xyz是来控制图形位移的,angleXYZ是绕xyz旋转的角度的变量,而scaleXYZ是物体XYZ轴上的缩放系数,本期的文章中没有写缩放的具体实现,但是有平移和旋转的实现,我们就可以以此类推出缩放的实现了。
本期中我们将shader更新了,我们往顶点着色器中不仅传入位置信息,还传入了颜色信息,然后把颜色信息作为out量传给了片元着色器,同时我们定义了uniform mat4 数据,用来保存图形的旋转平移缩放矩阵,并且把矩阵transform*positon得到变换好坐标赋值给了gl_Position,而片元着色器中,我们接收到了顶点着色器中给出的颜色信息,更新了我们的color属性:
之后是绘制函数,我们利用glm库中的translate函数得到平移矩阵,rotate函数得到绕指定轴旋转指定角度的旋转矩阵,scale函数得到缩放矩阵,并通过glUniformMartix4fv函数,更新我们shader中的transform矩阵: