gpt4 book ai didi

opengl - 在 GLSL 着色器中进行翻译

转载 作者:行者123 更新时间:2023-12-05 03:12:26 25 4
gpt4 key购买 nike

我正在尝试在顶点 GLSL 着色器中移动图形:

layout(location = 0) in vec3 Position;
layout(location = 1) in vec3 offset;

uniform mat4 ProjectionViewMatrix;

void main()
{
vec3 newPos = Position;
newPos.x += offset[0];
newPos.y += offset[1];
//newPos.z += offset[2];

mat4 translation;
translation[0][0] = 1;
translation[1][1] = 1;
translation[2][2] = 1;
translation[2][3] = offset[2];
translation[3][3] = 1;

gl_Position = ProjectionViewMatrix * (translation * vec4(newPos, 1.0));
}

我想绘制许多具有不同坐标的相似对象,所以我在 vec3 偏移量中使用 glDrawArraysInstanced 和 layout(location = 1); - 动态缓冲区;

对于翻译矩阵,它不起作用。但是如果我取消注释行 newPos.z += offset[2];并删除它会起作用的翻译矩阵。

我更喜欢使用矩阵,因为将来我想传递有关动态缩放的着色器信息。为什么它不适用于矩阵?

最佳答案

GLSL 使用以列主要顺序存储的矩阵。按照通常的方式编写与矩阵对应的索引:

[0][0]  [1][0]  [2][0]  [3][0]
[0][1] [1][1] [2][1] [3][1]
[0][2] [1][2] [2][2] [3][2]
[0][3] [1][3] [2][3] [3][3]

要在将此矩阵与右侧的列向量相乘时应用平移,平移向量进入最后一列的前 3 个元素,它们是索引对 [3][0][3][1][3][2]。这意味着 z 偏移进入矩阵元素 [3][2]

关于opengl - 在 GLSL 着色器中进行翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33807535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com