首页 > 其他分享 >WebGl 旋转矩阵

WebGl 旋转矩阵

时间:2024-10-22 16:16:48浏览次数:3  
标签:cos 0.0 WebGl 矩阵 旋转 着色器 sin

旋转矩阵是一个正交矩阵,用于在二维或三维空间中描述一个坐标系绕原点的旋转。在三维空间中,旋转矩阵通常用于沿x轴、y轴或z轴进行旋转,或者沿任意给定轴线进行旋转。旋转矩阵具有一些重要性质,例如它们是正交的,即它们的共轭转置等于其逆矩阵,而且它们保持向量的长度和夹角不变。

1. 旋转矩阵的计算

在三维空间中,绕x轴、y轴和z轴的基本旋转矩阵分别为:

1.1 绕x轴旋转矩阵 Rx(θ)Rx​(θ)
| 1     0        0         0 |
| 0     cosθ     -sinθ     0 |
| 0     sinθ     cosθ      0 |
| 0     0        0         1 |
1.2 绕y轴旋转矩阵 Ry(θ)Ry​(θ)
| cosθ     0      sinθ     0 |
| 0        1      0        0 |
| -sinθ    0      cosθ     0 |
| 0        0      0        1 |
1.3 绕z轴旋转矩阵 Rz(θ)Rz​(θ)
| cosθ  -sinθ  0           0 |
| sinθ   cosθ  0           0 |
| 0      0     1           0 |
| 0      0     0           1 |

其中,θ 是旋转的角度,通常以弧度为单位。

2.使用旋转矩阵流程

  • 在顶点着色器中声明一个uniform变量来接收旋转矩阵。
  • 通过gl.uniformMatrix4fv函数将旋转矩阵传递给着色器。
  • 旋转矩阵的列主序存储在一个Float32Array中,并传递给gl.uniformMatrix4fv函数的第三个参数。

3.示例代码

以下是一个简单的WebGL示例,展示了如何创建一个绕z轴旋转的旋转矩阵,并将其应用到顶点着色器中:

// 假设已经有了WebGL上下文gl和已初始化的着色器程序program

// 创建绕z轴旋转矩阵
function getTranslateMatrix(deg) {
    return new Float32Array([
        Math.cos(deg), -Math.sin(deg), 0.0, 0.0,
        Math.sin(deg), Math.cos(deg), 0.0, 0.0,
        0.0, 0.0, 1.0, 0.0,
        0.0, 0.0, 0.0, 1.0
    ])
}

// 获取顶点着色器中的uniform矩阵变量的位置
const mat = gl.getUniformLocation(program, 'mat');

const matrix = getRotateMatrix(x);
// 将旋转矩阵传递给着色器
gl.uniformMatrix4fv(mat, false, matrix);

// 继续其他渲染流程...

4.效果如下

标签:cos,0.0,WebGl,矩阵,旋转,着色器,sin
From: https://blog.csdn.net/dlmyrt/article/details/143160417

相关文章

  • WebGl 实现图片平移、缩放和旋转
    1.图片平移在WebGL中实现图片平移,可以通过修改顶点着色器中的顶点位置来实现。平移的基本思想是将每个顶点的位置向量沿着指定的方向(通常是x轴和y轴)进行平移。在顶点着色器中,可以通过添加或减去一个统一的偏移量(uniformvariable)来实现这一点。例如,如果要在x轴和y轴上分别平移......
  • 华为od面试手撕代码真题题型1——常规字符串,数组,矩阵
    常规字符串,数组,矩阵1实现超长数字减1思路:Java中用BigInteger类publicStringsubOne(Strings){ BigIntegerbi=newBigInteger(s);bi=bi.subtract(BigInteger.ONE);returnbi.toString();}2十八进制数比较大小任意进制的字符串a,转成十进制的数:In......
  • 体素化与旋转算法
    一、旋转分类目前游戏中只有绕y轴旋转的需求,因此讨论的都是基于y轴旋转的情况,所以图解都是俯视图。分单x单、双x双和单x双三类:单x单:不管怎么转占位不变双x双:占位点无法在中心,导致旋转结果偏移,主点位置不变的情况下,旋转会产生“甩动感”单x双:同双x双二、旋转算法普遍算......
  • FPGA图像处理之构建3×3矩阵
    免责声明:本文所提供的信息和内容仅供参考。作者对本文内容的准确性、完整性、及时性或适用性不作任何明示或暗示的保证。在任何情况下,作者不对因使用本文内容而导致的任何直接或间接损失承担责任,包括但不限于数据丢失、业务中断或其他经济损失。读者在使用本文信息时,应自行验......
  • 矩阵的秩性质总结
    矩阵的秩用法实在过于灵活,写篇随笔记录一下。矩阵的秩定义矩阵的秩常见定义有以下两种:非零子式的最高阶数。行(列)向量空间的极大无关组向量个数。矩阵的秩基本性质从定义出发不难得到以下性质:\(0\ler(A)\le\min(m,n)\)。\(r(A^T)=r(A)\)。\(r(kA)=r(A)\),要求\(k\n......
  • 一类矩阵可交换问题
    Part1在开始正文部分的讨论前,先补充一些先前在Jordan标准型理论的构建中没考虑到的问题.设\(\mathcalA,\mathcalB\)是(域\(\mathbbF\)上)\(n\)维线性空间\(V\)上的线性变换.命题1:设\(f,g\in\mathbbF[x]\),则\(f(\mathcalA)\)与\(g(\mathcalA)\)可交换.......
  • cuda core实现两个128x128 float矩阵乘法demo
    #include<stdio.h>#include<cuda_runtime.h>//128x128->__global__voidmm(float*a,float*b,float*c){//8x8个方块,每个方块16x16extern__shared__floatbuf[];float*a_local=buf;float*b_local=buf+16*128;for(inti=......
  • 【旋转磁场(2极电机)】三相交流电动机旋转磁场的研究(Matlab代码实现)
      ......
  • 矩阵置0
    题目:矩阵置0link:https://leetcode.cn/problems/set-matrix-zeroes/description/?envType=study-plan-v2&envId=top-interview-150classSolution:defsetZeroes(self,matrix:List[List[int]])->None:"""Donotreturnanythi......
  • leetcode:螺旋矩阵
    2024-10-19 https://leetcode.cn/problems/spiral-matrix/description/?envType=study-plan-v2&envId=top-interview-150   1classSolution:2defspiralOrder(self,matrix:List[List[int]])->List[int]:34m=len(matrix)5......