专栏首页Creator星球游戏开发社区GLSL ES 语言—矢量矩阵运算

GLSL ES 语言—矢量矩阵运算

变量如下定义:

mat3 m3a, m3b, m3c;vec3 v3a, v3b, v3c;
float t;

矢量和浮点数的运算

v3b = v3a + f;

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

v3b.x = v3a.x + f;
v3b.y = v3a.y + f;
v3b.z = v3a.z + f;

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

矢量与矢量运算

v3c = v3a + v3b;

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

v3c.x = v3a.x + v3b.x;
v3c.y = v3a.y + v3b.y;
v3c.z = v3a.z + v3b.z;

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

矩阵与浮点数的运算

m3b = m3a * f;

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

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;

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

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;

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

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;

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

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


本文分享自微信公众号 - Creator星球游戏开发社区(creator-star),作者:ShawnZhang

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 大神驾到 | 腾讯光子大牛的 Cocos Creator 网络通用框架(强势围观)

    作者,宝爷。宝爷是光子工作室的开发工程师,谦称自己为一枚码农,是一个热爱游戏、热爱开发、热爱学习并坚持沉淀知识的开发者,曾写过《精通 Cocos2d-x 游戏开...

    张晓衡
  • GLSL ES 语言—结构体

    GLSL ES 中可以使用 struct关键字定义结构体,将已存在的数据类型聚合到一起,如下:

    张晓衡
  • Super于的虚拟摇杆组件,拿来就用,让你一劳永逸!

    最近在研究虚拟摇杆实现方式的时候,发现网上的教程的实现方式可移植性并不是特别好,于是我决定自己实现一个虚拟摇杆组件,保存到自己的组件库,方便以后用到的时候直接使...

    张晓衡
  • 设计模式常见面试知识点总结(Java版)

    这篇总结主要是基于我设计模式系列的文章而形成的的。主要是把重要的知识点用自己的话说了一遍,可能会有一些错误,还望见谅和指点。谢谢

    Java技术江湖
  • Linux下删除大量文件

    ➜ test for i in $(seq 1 500000);do echo text >>$i.txt;done

    小小科
  • Linux 下删除大量文件效率对比,看谁删的快!

    杰哥的IT之旅
  • Linux下删除大量文件

    ? Linux下删除大量文件 首先建立50万个文件 ➜ test for i in $(seq 1 500000);do echo text >>$i....

    小小科
  • AI算法可以通过声音片段分辨出鸟类

    由于伐木,农业和气候变化,鸟类数量急剧下降。科学家通过记录他们的呼叫来跟踪物种,但即使是最好的计算机程序也无法可靠地区分鸟类呼叫和其他声音。而现在,由于众包和人...

    AiTechYun
  • 人脸识别技术的发展历程

    人脸识别既是一项起源较早的技术,又是一门焕发着活跃生命力、充满着学术研究魅力的新兴技术领域。随着近些年人工智能、大数据、云计算的技术创新幅度的增大,技术更迭速度...

    AI算法与图像处理
  • bat脚本根据mingw版本判断是否可编译32/64位程序

    版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net...

    用户1148648

扫码关注云+社区

领取腾讯云代金券