首页 > 其他分享 >WebGl 缩放矩阵

WebGl 缩放矩阵

时间:2024-10-22 16:17:01浏览次数:9  
标签:mat 缩放 0.0 WebGl 矩阵 gl 着色器

缩放矩阵是线性代数中的一种矩阵,用于描述图形在空间中沿着各个坐标轴进行均匀缩放的变换。在3D图形编程中,缩放矩阵通常用于调整物体的大小,而不改变其形状。

| x  0  0  0 |
| 0  y  0  0 |
| 0  0  z  0 |
| 0  0  0  1 |

其中,(x, y, z)是缩放向量,表示沿着x、y、z轴的缩放比例。如果x、y、z都等于1,则矩阵表示不进行缩放;如果小于1,则表示缩小;如果大于1,则表示放大。

1. 使用缩放矩阵流程

  • 在WebGL中实现缩放,需要创建一个缩放矩阵,并将其传递给顶点着色器。
  • 顶点着色器中的顶点位置变量(aPosition)会与缩放矩阵相乘,从而实现缩放变换。
  • 这个过程通常涉及到使用uniformMatrix4fv函数来设置着色器中的统一矩阵变量,该函数允许传递一个4x4的浮点矩阵到着色器程序。

2. 示例代码

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

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

// 1.创建顶点着色器
const vertexShaderSource = `
    attribute vec4 aPosition;
    uniform mat4 mat;
    void main() {
        gl_Position = mat * aPosition;
        gl_PointSize = 10.0;
    }`

// 2.创建缩放矩阵
function getScaleMatrix(x = 1, y = 1, z = 1) {
    return new Float32Array([
        x, 0.0, 0.0, 0.0,
        0.0, y, 0.0, 0.0,
        0.0, 0.0, z, 0.0,
        0.0, 0.0, 0.0, 1,
    ])
}

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

// 4.缩放矩阵赋值
const matrix = getScaleMatrix(x);

// 5.将缩放矩阵传递给着色器
gl.uniformMatrix4fv(mat, false, matrix);

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

3.效果如下

标签:mat,缩放,0.0,WebGl,矩阵,gl,着色器
From: https://blog.csdn.net/dlmyrt/article/details/143159809

相关文章

  • WebGl 旋转矩阵
    旋转矩阵是一个正交矩阵,用于在二维或三维空间中描述一个坐标系绕原点的旋转。在三维空间中,旋转矩阵通常用于沿x轴、y轴或z轴进行旋转,或者沿任意给定轴线进行旋转。旋转矩阵具有一些重要性质,例如它们是正交的,即它们的共轭转置等于其逆矩阵,而且它们保持向量的长度和夹角不变。......
  • 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......
  • 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=......
  • qt图像算法—图像的缩放之c++实现(不调包)
     1.基本原理  图像的缩放一般使用插值算法,而本章将介绍两种常用插值算法:最临近插值法和双线性插值法  1.最临近插值法  将浮点数的位置坐标,进行四舍五入找到原图像的整型坐标即可,具体操作可见下面的公式,其中原图像坐标为(x,y),输出图像坐标为(i,j),比例系数为fx和fy。......
  • 矩阵置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......