【零基础学WebGL】矩阵变换

矩阵变量

GLSL ES语言中,通过关键字mat2、mat3、mat4声明矩阵,并提供内置函数mat2()、mat3()、mat4()构造矩阵。

支持三种方式初始化矩阵:

  1. 从第一列开始,逐列指定元素的值。这里与,高数中习惯按照逐行书写矩阵不同。
  2. 只传入一个值,作为对角矩阵的对角线值;
  3. 传入多个向量;

如下代码初始化2x2单位矩阵:

// 按照列优先,逐列指定每个元素
mat2 aMat = mat2(
  1.0, 0,  // 第一列
  0,   1.0 // 第二列
);

// 构造对角矩阵,值是对角线的值
mat bMat = mat2(1.0);

vec2 aVec = vec2(1.0, 0);
vec2 bVec = vec2(0, 1.0);
// 使用向量构建矩阵
mat cMat = mat2(aVec, bVec); 

可以向二维数组一样,使用索引下标访问元素。

mat2 aMat = mat2(
  1.0, 0,  // 第一列
  0,   1.0 // 第二列
);

vec2 aVec = mat2[0]; // 访问第一列的向量,[1.0, 0]
vec2 bVec = mat2[0][1]; // 访问第一列第二行,0
mat2[1] = vec2(1.0, 0); // 给第二列重新赋值 

矩阵运算

矩阵与数字加减

矩阵与数字的加减,也就是矩阵的每个元素与数字进行加减。示例如下:

mat2 aMat = mat2(
  1.0, 0,  // 第一列
  0,   1.0 // 第二列
);

// 矩阵aMat加1之后, 得到新的矩阵
// [
//   2.0, 1,  // 第一列
//   1,   2.0 // 第二列
// ]
//
mat2 bMat = aMat + 1; 

矩阵与数字相乘

与矩阵与数字加减类似,矩阵与数字相乘,就是矩阵每个元素与数字相乘。示例如下:

mat2 aMat = mat2(
  1.0, 0,  // 第一列
  0,   1.0 // 第二列
);

// 矩阵aMat乘以2之后, 得到新的矩阵
// [
//   2.0, 0,  // 第一列
//   0,   2.0 // 第二列
// ]
//
mat2 bMat = aMat*2; 

矩阵与矩阵相乘

回顾下线性代数关于矩阵相乘的知识。假设有A、B两个矩阵,有如下定义:

  1. 相乘的前提条件是,A矩阵的列数需等于B矩阵的行数;
  2. 矩阵相乘不遵守交换律,也就是说A⋅B ≠ B⋅A;
  3. 矩阵相乘遵守结合律,A.B.C = A.(B.C);
  4. A⋅B 也是一个矩阵,乘积矩阵的行数等于A矩阵,结果矩阵的列数等于B矩阵;
  5. 乘积矩阵的第n行,第m列的结果等于,A矩阵的第n行与B矩阵的第m列对应值的乘积之和。

具象地举例,A矩阵是3行3列,B矩阵是3行3列,乘积矩阵的第2行第2列的计算过程如下:

c5的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: WebGL需要具备一定的OpenGL基础,因为WebGL是基于OpenGL ES的一个API,它的一些核心概念和方法与OpenGL有很多相似之处。所以,如果你已经掌握了OpenGL的基础知识,那么WebGL会更容易一些,但如果你没有OpenGL基础,也可以直接开始WebGL,只需要花费更多的时间和精力来理解它的基本原理和运作方式。 ### 回答2: WebGL不一定需要OpenGL基础。WebGL是基于OpenGL ES的,所以对OpenGL基础有一定了解会对WebGL有帮助,但并不是必需的。 如果已经有一定的OpenGL基础,那么对于WebGL来说会更容易入门。因为WebGL使用了类似于OpenGL的接口和概念,例如着色器程序、顶点缓冲区对象等等。对于已经熟悉OpenGL的人来说,理解和使用这些概念会更加顺利。 然而,即使没有OpenGL基础,也可以习和使用WebGL。因为WebGL有自己的习曲线和特定的语法和概念。习者可以通过详细的文档、教程和示例来理解和掌握这些内容。通过实践和深入WebGL,可以逐渐建立起对其原理和用法的理解。 总而言之,虽然有OpenGL基础会对WebGL有一定帮助,但并不是必需的。通过系统习和实践,没有OpenGL基础的人也可以掌握和应用WebGL的技术。对于初者来说,重要的是掌握WebGL的核心概念和语法,并通过实践项目来深入理解和应用。 ### 回答3: WebGL不一定需要OpenGL基础。WebGL是一种基于OpenGL ES(嵌入式系统)的开放式图形库,用于在网页浏览器中实现快速的3D图形渲染。然而,对于想要深入理解WebGL原理和开发复杂应用程序的人来说,了解OpenGL基础是很有帮助的。 OpenGL是一种跨平台的图形库,用于在计算机上生成和渲染2D和3D图形。它提供了一套功能强大的API,用于控制图形硬件和绘制图形。WebGL是基于OpenGL的一个子集,它使用JavaScript API来处理3D图形。因此,对于那些已经熟悉OpenGL的开发者来说,WebGL会更容易,因为它们之间有很多相似之处。 然而,即使没有OpenGL基础,也可以WebGL。通过WebGL的教程和参考资料,了解WebGL如何工作以及如何使用其API,您可以开始创建简单的3D图形应用程序。可以逐渐扩展知识,并根据需要深入习OpenGL相关概念,以了解更高级的WebGL编程技术。 总结而言,WebGL不一定需要拥有OpenGL基础,但有OpenGL基础对于理解WebGL的原理和开发复杂应用程序是有帮助的。无论您是否已经熟悉OpenGL,通过WebGL相关资料和实践,您可以逐渐掌握WebGL编程技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值