Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript WebGL-通过着色器中的数组循环_Javascript_Webgl - Fatal编程技术网

Javascript WebGL-通过着色器中的数组循环

Javascript WebGL-通过着色器中的数组循环,javascript,webgl,Javascript,Webgl,我想知道如何从着色器循环通过数组。 我读了很多东西,但还是很困惑 以下是创建数组的JavaScript: var particles = []; // I'm creating an array of x and y coordinates for (var i = 0; i < 100; i++) { particles.push([ Math.floor(Math.random()*1000) + .5, Math.floor(

我想知道如何从着色器循环通过数组。 我读了很多东西,但还是很困惑

以下是创建数组的JavaScript:

var particles = []; // I'm creating an array of x and y coordinates
for (var i = 0; i < 100; i++) {
    particles.push([
            Math.floor(Math.random()*1000) + .5, 
            Math.floor(Math.random()*1000) + .5
        ]);
}
gl.uniform2fv(gl.getUniformLocation(glProgram, 'particles'), particles);
var粒子=[];//我正在创建一个x和y坐标的数组
对于(变量i=0;i<100;i++){
粒子。推([
Math.floor(Math.random()*1000)+.5,
Math.floor(Math.random()*1000)+.5
]);
}
gl.uniform2fv(gl.getUniformLocation(glProgram,'particles'),particles);
这是我的片段着色器的一部分:

uniform vec2 particles;

void main( void ) {
    bool found = false;
    for (int i = 0; i < 100; i ++) {
        if (particles[i].x == 1.0) {
            found = true;
        }
    }
}
均匀的vec2粒子;
真空总管(真空){
bool-found=false;
对于(int i=0;i<100;i++){
if(粒子[i].x==1.0){
发现=真;
}
}
}
我得到的错误是“字段选择需要左侧的结构或向量”。
我遗漏了什么?

着色器中
粒子的声明不正确,它定义了单个
vec2
而不是
vec2
的数组

权利宣言是:

uniform vec2 particles[100];

我对WebGL了解不多,但我猜您在着色器中声明的
粒子是不正确的,它可能是
均匀vec2粒子[100]。你说得对。你帮我节省了很多时间,谢谢!仅供参考:当然,你想做什么就做什么,但考虑到最小最大尺寸为128,使用大阵列制服并不常见。这意味着如果您声明
uniform vec2 particles[129]
其中将有许多GPU无法运行着色器,因为它们支持最大数组大小128。(当前)通常,如果您需要随机访问数据,请将该数据放入纹理中。通过这个问题,但没有附加上下文,您的代码让我感觉您可能希望重新组织数据,以便在着色器步骤之前知道哪些点的
.x
值为1.0。您可以创建单独的缓冲区。这样可以避免线性搜索。