- 1、本文档共50页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一步步学OpenGL(二)
七 旋转变换
背景
继上个教程的平移变换之后,这里开始学习旋转变换,也就是能够实现让一个点沿着一个坐标轴旋转一定的角度。旋转变换将总是改变位置的其中两个坐标,第三个坐标保持不变,这意味着旋转的路径会保持在其中一个平面上:XY平面(绕Z轴旋转),YZ平面(绕X轴旋转)和XZ平面(绕Y轴旋转)。也有一些复杂的旋转变换允许图形绕着任意向量旋转,但在我们这个阶段还不需要。
让我们从普遍统一的角度来定义这个问题。看下面这个图:
我们想从(x1,y1)沿着圆移动到(x2,y2),换句话说就是将点(x1,y1)旋转a2角度。假设圆的半径是1,那有下面的式子:
我们用下面的三角函数变换公式来推导x2和y2的表达式:
从上面的公式我们可以得到:
再上面的图中我们看的是XY平面,Z轴指向纸面。X和Y放在4维矩阵里面的的话那么上面的公式可以写成下面的矩阵形式(不影响Z和W分量):
如果我们想实现绕X或Y轴旋转,那么公式基本上是类似的但是变换矩阵的排布略有不同。
下面是绕Y轴旋转的旋转变换矩阵(y不变):
绕X轴旋转的旋转变换矩阵(x不变):
源代码详解
在上个教程的基础上这里代码的变换非常少。我们只是改变代码中变换矩阵的内容,将平移变换矩阵换成了旋转变换矩阵而已:
World.m[0][0]=cosf(Scale);World.m[0][1]=-sinf(Scale);World.m[0][2]=0.0f; World.m[0][3]=0.0f;
World.m[1][0]=sinf(Scale);World.m[1][1]=cosf(Scale);World.m[1][2]=0.0f; World.m[1][3]=0.0f;
World.m[2][0]=0.0f;World.m[2][1]=0.0f;World.m[2][2]=1.0f;World.m[2][3]=0.0f;
World.m[3][0]=0.0f;World.m[3][1]=0.0f;World.m[3][2]=0.0f;World.m[3][3]=1.0f;
As you can see we rotate around the Z axis. You can try the other rotations as well but I think that at this point without true projection from 3D to 2D the other rotations look a bit odd. We will complete them in a full transformation pipeline class in the coming tutorials.
这样会看到图形绕着Z轴旋转了。我们也可以尝试绕其他轴的旋转,但是没有从3d到2d的投影另外两种旋转看上起去会很奇怪,我们会在后面教程中在一个完整的图形变换管线类中来完善它。
示例Demo
#include stdio.h
#include string.h
#include math.h
#include GL/glew.h
#include GL/freeglut.h
#include ogldev_util.h
#include ogldev_math_3d.h
GLuint VBO;
GLuint gWorldLocation;
const char* pVSFileName = shader.vs;
const char* pFSFileName = shader.fs;
static void RenderSceneCB()
{
glClear(GL_COLOR_BUFFER_BIT);
static float Scale = 0.0f;
Scale += 0.001f;
// 旋转变换矩阵
Matrix4f World;
World.m[0][0] = cosf(Scale); World.m[0][1] = -sinf(Scale); World.m[0][2] = 0.0f; World.m[0][3] = 0.0f;
World.m[1][0] = sinf(Scale); World.m[1][1] = cosf(Scale); World.m[1][2] = 0.0f; World.m[1][3] = 0.0f;
World.m[2][0] = 0.0f; World.m[2][1] = 0.0f; World.m[2][2]
您可能关注的文档
- 土建施工员述职报告解读.pptx
- 万科房地产市场研究工具之客户细分及七对眼9449844详解.ppt
- 土木工程材料徐清-第8讲水泥解读.ppt
- 图片中的2016上解读.ppt
- 万科客户细分与产品定位详解.ppt
- 图书定价策略解读.ppt
- 土木工程概论课件解读.ppt
- 图书馆案例分析解读.pptx
- 万科实测实量999详解.ppt
- 土木工程施工-第11讲_模板工程解读.ppt
- 第十一章 电流和电路专题特训二 实物图与电路图的互画 教学设计 2024-2025学年鲁科版物理九年级上册.docx
- 人教版七年级上册信息技术6.3加工音频素材 教学设计.docx
- 5.1自然地理环境的整体性 说课教案 (1).docx
- 4.1 夯实法治基础 教学设计-2023-2024学年统编版九年级道德与法治上册.docx
- 3.1 光的色彩 颜色 电子教案 2023-2024学年苏科版为了八年级上学期.docx
- 小学体育与健康 四年级下册健康教育 教案.docx
- 2024-2025学年初中数学九年级下册北京课改版(2024)教学设计合集.docx
- 2024-2025学年初中科学七年级下册浙教版(2024)教学设计合集.docx
- 2024-2025学年小学信息技术(信息科技)六年级下册浙摄影版(2013)教学设计合集.docx
- 2024-2025学年小学美术二年级下册人美版(常锐伦、欧京海)教学设计合集.docx
最近下载
- 17J008 挡土墙(重力式、衡重式、悬臂式)(最新).pdf
- 造血干细胞移植的护理干预.pptx
- 布料车岗位安全规程.pptx
- YDT 5178-2017 通信管道人孔和手孔图集.docx VIP
- 精品解析:【区级联考】上海徐汇区2019届九年级学习能力诊断(二模)数学试题(解析版).pdf VIP
- 精品解析:广东省佛山市南海区,三水区2022-2023学年九年级上学期数学期末考试(原卷版).pdf VIP
- 一种护筒导向架结构.pdf VIP
- 老旧小区雨污分流改造要点与难点分析.docx VIP
- 鞍钢宪法及后福特主义.pdf
- 精品解析:广东省广州市2022-2023学年九年级上学期期末数学考前模拟试题(三)(解析版).pdf VIP
文档评论(0)