3D图形:矩阵与线性变换
一些典型的2维实平面上的线性变换对平面矢量(图形)造成的效果,以及它们对应的2维矩阵。
矩阵变换和线性变换之间有密切的关联,但也有一些区别。矩阵变换是一种将一个向量映射到另一个向量的方法。在矩阵变换中,通过乘以一个矩阵,可以对向量进行旋转、缩放、投影等操作。矩阵变换是通过矩阵乘法来实现的。线性变换是一种特殊的矩阵变换,它满足两个基本性质:加法闭合性和数乘闭合性。
线性变换的定义:线性变换是指对向量空间中的向量进行操作,并满足两个基本性质:保持向量加法运算和标量乘法运算。换句话说,对于向量空间中的任意两个向量u和v,以及任意标量c,线性变换T应该满足以下等式:T(u + v) = T(u) + T(v) 和 T(cu) = cT(u)。
矩阵是线性代数中的基本工具,它可以用来表示向量和线性变换。在二维或三维空间中,向量可以用一个列向量或行向量来表示。例如,二维平面上的点(x,y)可以表示为一个2x1的列向量[x;y]。同样,三维空间中的点(x,y,z)可以表示为一个3x1的列向量[x;y;z]。
矩阵的几何意义:矩阵很抽象,一般来说,方阵(行列数相等的矩阵)能描述任意线性变换。下面将具体讲述矩阵和线性变换的公式。
线性变换与矩阵之间存在着对应关系。线性变换是线性代数研究的一个对象,即向量空间到自身的保运算的映射。例如,对任意线性空间V,位似是V上的线性变换,平移则不是V上的线性变换。对线性变换的讨论可借助矩阵实现。σ关于不同基的矩阵是相似的。
什么是model,view,project矩阵
为了将坐标从一个坐标系变换到另一个坐标系3d数学基础图形与游戏开发,3d数学基础图形与游戏开发我们需要用到几个变换矩阵,最重要3d数学基础图形与游戏开发的几个分别是模型(Model)、观察(View)、投影(Projection)三个矩阵。
接着,View矩阵登场,它是观察者的眼睛,通过平移和旋转,用glm:lookAt的魔法将世界坐标转换为相机视角。投影矩阵则将我们带入NDC坐标的世界,透视投影由glm:perspective绘制出深远的空间深度。 OpenGL的Model矩阵与实践/在C++的OpenGL世界中,glm库为模型矩阵的创建提供了强大支持。
是指物体的顶点相对于世界的坐标空间,物体分散在世界上摆放,则物体的坐标会从局部空间变换到世界空间。该变换是由模型矩阵(Model Matrix)实现的 观察空间也被称为openGL的摄像机Camera,所以有时候也称为摄像机空间(Camera space) 或视觉空间(Eye space)。
Model 是指数据模型 View是指UI视图 另外Control是指控制流 为什么要用MVC, 目前凡是涉及到UI有界面的程序,最好采用MVC模式来设计。View: 我们要专门有一个模块,还存放所有的UI组件库, 按钮,图片,文本框,列表,菜单等等,这些东西都是死的,没有内容。
我们在使用法向量变换的时候最大的一个误区就是直接把Model View变换矩阵当成法向量变换矩阵使用,而且肯定有人还曾经认为这是正确的,他们的理由有两个:一是法向量也是一个Vector。而Vertics表示的也是一个Vector。
OpenGL:三维数学基础坐标系、向量、矩阵
图2:左手坐标系与右手坐标系 其中左手坐标系广泛应用于计算机图形学、D3D之中,而右手坐标系广泛应用于OpenGL、线性代数、3DSMax之中。多坐标系 任何一个3D坐标系都是可以无限延伸的,可以包含空间中所有的点,因此,只需要一个坐标系,就能描述所有的点。
行矩阵 :逐行读取 列矩阵 :逐列读取 行矩阵通过矩阵转置后可以得到列矩阵。在数学中,习惯使用 行矩阵 来进行运算,此时mpv的顺序为 position * m * v * p 。
总的来说,OpenGL中的坐标处理过程包括模型变换、视变换、投影变换、视口变换等过程,三维物体的显示过程(OpenGL坐标变换全局过程)如下:OpenGL中采用方式2的观点来解释视变换。再举一个例子,比如,一个物体中心位于原点,照相机也位于初始位置原点,方向指向-Z轴。
向量a称为点P的位置向量。 在 空间直角坐标系 中,分别取与x轴、y轴,z轴方向相同的3个单位向量i,j,k作为一组 基底 。若为该 坐标系 内的任意向量,以坐标原点O为起点作向量a。由空间基本定理知,有且只有一组实数(x,y,z),使得a=ix+jy+kz,因此把实数对(x,y,z)叫做向量a的坐标,记作a=(x,y,z)。


还没有评论,来说两句吧...