相关疑难解决方法(0)

如何在 OpenGL 着色器中使用行优先?

我在OpenGL 站点上看到了这个

OpenGL 着色语言属性变量可以是 mat2、mat3 或 mat4 类型。这些类型的属性可以使用 glVertexAttrib 入口点加载。矩阵必须按列主要顺序加载到连续的通用属性槽中,每个通用属性槽中有一列矩阵。

我一直在使用一个基于row-major的向量库。也就是说,4x4 矩阵的 16 个元素在结构中的布局如下:

vec4 x;
vec4 y;
vec4 z;
vec4 w;
Run Code Online (Sandbox Code Playgroud)

其中每个vec4都有 components x, y, z, w,因此内容的线性顺序是行优先的,因为第一行占据内存中的前 4 个位置,并且矩阵数学是这样处理的,例如这个旋转变换:

 static Matrix4<T> RotateZ(T degrees)
{
    T radians = degrees * 3.14159f / 180.0f;
    T s = std::sin(radians);
    T c = std::cos(radians);

    Matrix4 m;
    m.x.x =  c; m.x.y = s; m.x.z = 0; m.x.w = 0;
    m.y.x = -s; m.y.y = c; m.y.z = 0; …
Run Code Online (Sandbox Code Playgroud)

opengl math 3d graphics

3
推荐指数
1
解决办法
3512
查看次数

标签 统计

3d ×1

graphics ×1

math ×1

opengl ×1