前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GLSL ES 语言—矢量矩阵运算

GLSL ES 语言—矢量矩阵运算

作者头像
张晓衡
发布2019-09-11 18:20:00
1.3K0
发布2019-09-11 18:20:00
举报

变量如下定义:

代码语言:javascript
复制
mat3 m3a, m3b, m3c;vec3 v3a, v3b, v3c;
float t;

矢量和浮点数的运算

代码语言:javascript
复制
v3b = v3a + f;

其效果是为矢量的每一个分量加上浮点数f,与下面代码相同:

代码语言:javascript
复制
v3b.x = v3a.x + f;
v3b.y = v3a.y + f;
v3b.z = v3a.z + f;

其它操作符 -、*、/ 效果一样。

矢量与矢量运算

代码语言:javascript
复制
v3c = v3a + v3b;

矢量运算操作发生在矢量的每个分量上,与下面代码相同:

代码语言:javascript
复制
v3c.x = v3a.x + v3b.x;
v3c.y = v3a.y + v3b.y;
v3c.z = v3a.z + v3b.z;

其它操作符 -、*、/ 效果一样。

矩阵与浮点数的运算

m3b = m3a * f;

矩阵与浮点数的运算发生在矩阵的每个分量上,与下面等价:

代码语言:javascript
复制
m3b[0].x = m3a[0].x * f;
m3b[0].y = m3a[0].y * f;
m3b[0].x = m3a[0].y * f;

m3b[1].x = m3a[1].x * f;
m3b[1].y = m3a[1].y * f;
m3b[1].x = m3a[1].y * f;

m3b[2].x = m3a[2].x * f;
m3b[2].y = m3a[2].y * f;
m3b[2].x = m3a[2].y * f;

矩阵右乘矢量

v3b = m3a * v3a;

矩阵右乘矢量的结果是矢量,其中每个分量都是原矢量中的对应分量,乘上矩阵对应行的每个元素的积的加和, 与下面等价:

代码语言:javascript
复制
v3b.x = m3a[0].x * v3a.x + m3a[1].x * v3a.y + m3a[2].x * v3a.z;
v3b.y = m3a[0].y * v3a.x + m3a[1].y * v3a.y + m3a[2].y * v3a.z;
v3b.z = m3a[0].z * v3a.x + m3a[1].z * v3a.y + m3a[2].z * v3a.z;

矩阵左乘矢量

v3b = v3a * m3a;

矩阵也可以与矢量左乘,但与左乘不同,规则如下:

代码语言:javascript
复制
v3b.x =  v3a.x * m3a[0].x +v3a.y * m3a[0].y + v3a.z * m3a[0].z;
v3b.y =  v3a.x * m3a[1].x +v3a.y * m3a[1].y + v3a.z * m3a[1].z;
v3b.z =  v3a.x * m3a[2].x +v3a.y * m3a[2].y + v3a.z * m3a[2].z;

矩阵与矩阵相乘

m3c = m3a * m3b;

矩阵相乘在变换和动画中会用到,看下面规则:

代码语言:javascript
复制
m3c[0].x = m3a[0].x * m3b[0].x + m3a[1].x * m3b[0].y + m3a[2].x * m3b[0].z
m3c[1].x = m3a[0].x * m3b[1].x + m3a[1].x * m3b[1].y + m3a[2].x * m3b[1].z
m3c[2].x = m3a[0].x * m3b[2].x + m3a[1].x * m3b[2].y + m3a[2].x * m3b[2].z

m3c[0].y = m3a[0].y * m3b[0].x + m3a[1].y * m3b[0].y + m3a[2].y * m3b[0].z
m3c[1].y = m3a[0].y * m3b[1].x + m3a[1].y * m3b[1].y + m3a[2].y * m3b[1].z
m3c[2].y = m3a[0].y * m3b[2].x + m3a[1].y * m3b[2].y + m3a[2].y * m3b[2].z

m3c[0].z = m3a[0].z * m3b[0].x + m3a[1].z * m3b[0].y + m3a[2].z * m3b[0].z
m3c[1].z = m3a[0].z * m3b[1].x + m3a[1].z * m3b[1].y + m3a[2].z * m3b[1].z
m3c[2].z = m3a[0].z * m3b[2].x + m3a[1].z * m3b[2].y + m3a[2].z * m3b[2].z


本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Creator星球游戏开发社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 矢量和浮点数的运算
  • 矢量与矢量运算
  • 矩阵与浮点数的运算
  • 矩阵右乘矢量
  • 矩阵左乘矢量
  • 矩阵与矩阵相乘
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档