如何创建 vec2 数组并推送到它?

问题描述 投票:0回答:2

我正在尝试在片段着色器中创建一个空的 vec2 数组。

获取长度并将 vec2 推入数组的语法是什么?

arrays glsl fragment-shader
2个回答
1
投票

您无法将值“推送”到 GLSL 中的数组。数组的大小无法更改。您所能做的就是创建一个大小恒定的数组,并使用一个额外的变量来告诉您数组中有多少个值有意义:

vec2 array[10];
int size = 0;
array[size] = vec2(1.0, 0.0);
size = size + 1;

数组的长度可以通过

length()
获得。例如:
array.length();
。另请参阅GLSL 4.6 - 基本类型


0
投票

您可以像这样创建 vec2 数组:

vec2 myArray[10];

然后你可以像这样一一初始化这些值:

myArray[0] = vec2(0.0, 0.0);
myArray[1] = vec2(0.0, 0.0);
// ...

或者你可以使用像这样的

for
循环:

for (int i = 0; i < myArray.length(); i++) {
  myArray[i] = vec2(123, 123);
}

myArray.length()
函数调用返回数组大小。

需要提及的一件重要事情是数组必须声明为固定大小,即不可能使用变量来声明数组的大小。

但是,如果必须将大小应用于多个数组,则可以使用常量,如下所示:

#define SIZE 10

vec2 myArray[SIZE];
vec2 myArray2[SIZE];

这也使得在使用 4.3 版本之前的 GLSL 时可以创建数组的数组,如下所示:

#define ROWS 10
#define COLUMNS 2

int myArray[ROWS * COLUMNS];

for (int row = 0; row < ROWS; row++) {
  for (int column = 0; column < COLUMNS; column++) {
    myArray[COLUMNS * row + column] = 123;
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.