私はこのシェーダーの世界では初めてで、何かを試してみたいだけです。私は次のことをしたい:
マウスの周りの特定の半径で、背景のテクスチャを 10° 回転させる必要があります。マウス座標は絶対値であるため、それらを操作するにはそれらを正規化する必要があるため、テクスチャ内の適切なスペースを指定できます。しかし、どういうわけかこれは正しく機能しません。回転は機能しますが、少しオフセットして色情報を取得します。
問題はだと思いますが、normalize(mouse)
これを正しく行う方法がわかりません。シェーダーは次のとおりです。
uniform sampler2D tex0;
uniform vec2 mouse;
void main() {
vec2 pos = vec2(gl_FragCoord.x, gl_FragCoord.y);
if (distance(pos, mouse) < 90.0) {
vec2 p = gl_TexCoord[0].st;
vec2 m = normalize(mouse);
p.x = m.x + (cos(radians(10.0)) * (p.x - m.x) - sin(radians(10.0)) * (p.y - m.y));
p.y = m.y + (sin(radians(10.0)) * (p.x - m.x) + cos(radians(10.0)) * (p.y - m.y));
gl_FragColor = vec4(0.0, m.y, 0.0, 0.0);
gl_FragColor = texture2D( tex0, p );
}
else {
gl_FragColor.rgb = texture2D( tex0, gl_TexCoord[0].st ).rgb;
gl_FragColor.a = 1.0;
}
}
私はこれを行うためにシンダーを使用しています。
mShader.uniform( "mouse", Vec2f( m.x, 682 - m.y ) );
ありがとうございました。