这是一个非常奇怪的问题!!它应该很容易解决。
我所做的只是通过一个数组,并将数组数据加在一起(类似这样)。
float kernel[] = float[5] (1.0, 1.0, 1.0, 1.0,1.0);
for(int i=-2;i<=2;i++) {
for(int j=-2; j<=2; j++){
color += kernel[0] * texture2D(image, outUV);
}
}
上面的代码不起作用,但是如果将内核[0]更改为1.0,那将会有效。
float kernel[] = float[5] (1.0, 1.0, 1.0, 1.0,1.0);
for(int i=-2;i<=2;i++) {
for(int j=-2; j<=2; j++){
color += 1.0 * texture2D(image, outUV);
}
}
所以我想当我访问阵列时有一些问题!为什么呢?
答案 0 :(得分:1)
我发现了问题,似乎我在声明时无法分配数组值。我必须写一些像这样的代码:
float kernel[5] ;
void main(){
kernel[0]=1.0;
kernel[1]=2.0;
...
for(int i=-2;i<=2;i++) {
for(int j=-2; j<=2; j++){
color += kernel[i+2]*kernel[j+2] * texture2D(image, outUV);
}
}
}
答案 1 :(得分:0)
或者,您可以使用单个vec4
并访问其x
,y
,z
,w
值。
我想这是片段着色器,所以它最不可能的原因可能是浮点类型的精度不足。在片段着色器中,您必须显式指定float类型的精度:
precision mediump float;
请您更详细地描述着色器的不当行为?此外,完整的着色器代码可能会对您的问题产生影响。