Processingでシェーダを使用する際に問題が発生しているようです。私はインキ効果に取り組んでおり、シェーダの残りの部分を書くためにいくつかの助けを得た後、何かが起こるようには見えません。色は黒のままで、gl_FragColor = vertColorを変更すると変わりません。 (処理のために色を予約する)、画像は白色になります。私が理解していることから、その場合はまっすぐに通り過ぎるべきだから、今は何かが間違っていると思う。誰かアドバイスがありますか?処理フラグメントシェーダに何も表示されません
EDIT:他の処理シェーダーに表示されているものに近くなるように変更しました。 vertColorではなくsampler2D(source、coord).rgbを使用していますが、まだ動作していません。
PShader shader;
PImage photo;
void setup() {
size(619,619,P2D);
photo = loadImage("paintedsky.jpg");
shader = loadShader("inkspread.glsl");
}
void draw() {
shader.set("T",(float) millis()/1000.0);
shader(shader);
image(photo,619,619);
}
#ifdef GL_ES
precision mediump float;
precision mediump int;
#endif
#define PROCESSING_TEXTURE_SHADER
uniform sampler2D source;
varying vec4 vertTexCoord;
uniform float T;
const float diag = 1.414213562373095;
vec3 F(vec3 x0,vec3 x1,float dist){
return (x1 - x0)/(T * dist);
}
void main() {
vec2 ix = vertTexCoord.st;
vec2 c11 = vertTexCoord.st + vec2(0.0, 0.0);
vec2 c01 = vertTexCoord.st + vec2(-1.0, 0.0);
vec2 c21 = vertTexCoord.st + vec2(1.0, 0.0);
vec2 c10 = vertTexCoord.st + vec2(0.0,-1.0);
vec2 c12 = vertTexCoord.st + vec2(0.0, 1.0);
vec2 c00 = vertTexCoord.st + vec2(-1.0,-1.0);
vec2 c02 = vertTexCoord.st + vec2(-1.0, 1.0);
vec2 c20 = vertTexCoord.st + vec2(1.0,-1.0);
vec2 c22 = vertTexCoord.st + vec2(1.0, 1.0);
vec3 x11 = texture2D(source, c11).rgb;
vec3 x01 = texture2D(source, c01).rgb;
vec3 x21 = texture2D(source, c21).rgb;
vec3 x10 = texture2D(source, c10).rgb;
vec3 x12 = texture2D(source, c12).rgb;
vec3 x00 = texture2D(source, c00).rgb;
vec3 x02 = texture2D(source, c02).rgb;
vec3 x20 = texture2D(source, c20).rgb;
vec3 x22 = texture2D(source, c22).rgb;
vec3 d01 = F(x11,x01,1.0);
vec3 d21 = F(x11,x21,1.0);
vec3 d10 = F(x11,x10,1.0);
vec3 d12 = F(x11,x12,1.0);
vec3 d00 = F(x11,x00,diag);
vec3 d02 = F(x11,x02,diag);
vec3 d20 = F(x11,x20,diag);
vec3 d22 = F(x11,x22,diag);
vec3 result = (x11 + d01+d21+d10+d12 + d00+d02+d20+d22);
vec3 col = texture2D(source, ix).rgb;
gl_FragColor = vec4(col*result,1.0);
}
あなたはどのような効果を達成しようとしていますか?上のコードから、私は 'T'が浮動小数点変数であると仮定します。あたかも価値が与えられていないかのように見えます。私はそれがゼロに初期化されているか、またはヌルポインタとして扱われていることを意味していると仮定しています - したがって、おそらく、ゼロまたはF()関数から生じる他のエラーによる除算があります。私はどのようにglslがボンネットの下で動作するのか分かりません。 – Nolo
ああ、気にしないでください。私の謝罪、私はちょうど '均一の定義を見上げた。 – Nolo
私のクライアントプログラム(Processing)はTのフロートを送信していますが、問題はないようです。 – aceslowman