零基础学图形学(5) 几何知识——矩阵

本文介绍了矩阵在3D图形学中的重要性,如何使用矩阵进行物体、灯光和相机的变换,以及矩阵的基本概念和乘法规则。通过矩阵乘法,可以组合多种变换,简化复杂的图形操作。矩阵乘法不遵循交换律,顺序决定最终变换的效果。
摘要由CSDN通过智能技术生成

在我们介绍为什么矩阵有趣之前,我们先开始说渲染一副图片,而所有的3D图形,所以的相机都在原地静止是十分受限制的。必须的,矩阵在物体的移动, 灯光和相机,方面扮演着十分重要的角色,使用它们你可以创建你想要得到的图像。如果我们忽略矩阵的话,我们不能创建出非常激动人心的图像。如果你想要实现自己的渲染器,你不应该忽略它们。因此让我们现在马上就学习它们。

(1)矩阵介绍:它们使变换变得简单

其实矩阵一点都不复杂,很多人怕它们是因为它们不能完全理解矩阵,它们不知道矩阵代表着什么,以及它们是怎么样工作的。它们在图形显示上扮演着重要的角色,你可以经常看到3d应用中使用到它们。

在之前的文章中,我们提到通过线性操作移动或者旋转一个点是有可能的。比如,我们通过向点的坐标增加一个值来移动 它们。我们同时也展示了使用三角函数让矩阵旋转是有可能的。现在,简而言之(现在还不是定义矩阵是什么的时候),一个矩阵就是这些变换(放大,旋转,平移)的集合。点或者向量和这种结构相乘就会得到一个变换的点或者向量。结合这些变换就相当于将缩放,旋转,平移这些操作组合起来。我们可以创建一个矩阵,这个矩阵将一个点绕x轴旋转90度,沿着z轴放大两倍,和平移它到(-2, 3,1)这个位置。我们可以通过一系列的线性操作得到这个点,但是那也意味着需要写更多的代码:

Vec3f translate(Vec3f P, Vec3f translateValue) { ... }
Vec3f scale(Vec3f P, Vec3f scaleValue) { ... }
Vec3f rotate(Vec3f P, Vec3f axis, float angle) { ... }
...
Vec3f P = Vec3f(1, 1, 1);
Vec3f translateVal(-1, 2, 4);
Vec3f scaleVal(1, 1, 2);
Vec3f axis(1, 0, 0);
float angle = 90;
Vec3f Pt;
Pt = translate(P, translateVal): // translate P
Pt = scale(Pt, scaleVal); // then scale the result
Pt = rotateValue(Pt, axis, angle); // finally rotate the point 
这里的代码看着不是很简介,如果我们使用向量的话,就可以简单地写成

Matrix4f M(...); // set the matrix for translation, rotation, scale
Vec3f P = Vec3f(1, 1, 1);
Vec3f Ptranformed = P * M; // do everything at once, translate, rotate, scale

得到类似的P的变换的效果&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值