×
关于

现代 OpenGL 教程

第一课 创建一个窗口第二课 绘制一个点第三课 第一个三角形第四课 着色器基础第五课 一致变量第六课 平移变换第七课 旋转变换第八课 缩放变换第九课 插值第十课 索引绘制第11课 矩阵连乘第12课 透视投影变换第13课 相机空间第14课 相机控制(一)第15课 相机控制(二)第16课 基本的纹理贴图第17课 环境光第18课 漫反射光第19课 镜面反射光第20课 点光源第21课 聚光灯第22课 使用Assimp库导入模型第23课 Shadow Mapping 1第24课 Shadow Mapping 2第25课 天空盒第26课 法线纹理第27课 广告牌和几何着色器第28课 创建粒子系统第29课 3D拾取第30课 细分着色器基础第31课 基于PN三角形细分着色第32课 顶点数组对象第33课 实例渲染第34课 GLFX OpenGL特效库第35课 延迟渲染(一)第36课 延迟渲染(二)第37课 延迟渲染(三)第38课 Assimp导入骨骼动画第39课 轮廓检测第40课 模板阴影体第41课 运动模糊第42课 基于 PCF 的阴影优化第43课 点光源多通道阴影映射第44课 GLFW第45课 屏幕空间的环境光遮挡第46课 SSAO与深度重构

第八课 缩放变换


背景

缩放矩阵也很简单!它的作用是放大或缩小物体的尺寸!在很多情况下,你可能想对某些对象做这些处理,例如,当你想用同一模型产生一些差异(大树和小树本质上是一样的),亦或你想将物体的尺寸与其现实世界的尺寸联系起来!对于上面的例子,你可能想使点的三个坐标分量进行相同的缩放。然而,有时候你可能只想缩放两个坐标轴上的分量,导致模型变“厚”或“薄”。

计算变换矩阵是非常复杂的!我们从单位矩阵开始,记住它与向量相乘后向量不产生的变化原因是,矩阵对角线上的每个 1 依次与向量的每个分量相乘!没有一个分量会影响其他分量!因此,用其他值代替其中的任何一个 1 将使物体在相应轴上发生变化:这个值大于1的话物体将变大,小于1将缩小。

代码

World.m[0][0]=sinf(Scale);World.m[0][1]=0.0f;       World.m[0][2]=0.0f;       World.m[0][3]=0.0f;
World.m[1][0]=0.0f;       World.m[1][1]=sinf(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]=sinf(Scale);        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;

相较于上一章,本章仅有的变化是我们根据上面的描述创建了一个缩放变换矩阵,并用其替换了之前的世界矩阵!正如你看到的,我们用在 -1 到 1 之间的值来对我们绘制的三角形进行缩放!在 (0,1] 范围内,三角形处于非常小和它原来的大小的范围内,而当对角线上都是零时它完全消失!在范围[-1,0)内看起来一样而只是发生翻转,因为对角线上的缩放值实际上改变了坐标的符号!

操作结果


分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)