私はQtで働いています。複数のシェーダーが機能していますが、均一な配列を渡すと、常にすべてがゼロに設定されるようです。期待される結果は、ランダムな円がテクスチャの上に描画されることです(または、円が多すぎるために透明なテクスチャになります)。私が得るのは、右下隅にある単一の粒子の円です。
if (program->isLinked()) {
QVector3D hitPoints[40];
for (int k = 0; k < 40; k++) {
hitPoints[k] = QVector3D((float)rand()/(float)RAND_MAX, (float)rand()/(float)RAND_MAX, (float)rand()/(float)RAND_MAX);
}
program->setUniformValueArray("hitPoints", hitPoints, 40);
program->bind();
}
フラグメントシェーダー:
uniform sampler2D color_texture;
uniform vec3 hitPoints[40];
void main()
{
float dist = 0.3;
vec2 texcoord = vec2(gl_TexCoord[0]);
for (int i = 0; i < 40; i++) {
float close = sqrt(pow(hitPoints[i].y - texcoord.y, 2) + pow(hitPoints[i].x - texcoord.x, 2));
if (close < dist) {
gl_FragColor = vec4(0,0,0,texture2D(color_texture, texcoord).a);
return;
}
}
gl_FragColor = texture2D(color_texture, texcoord);
}