fix: ウォーターマークをrepeatした際にマージンが各ウォーターマークごとのマージンとなっていない問題を修正
This commit is contained in:
parent
85a9f47168
commit
0c4b5e5c04
|
|
@ -110,15 +110,25 @@ void main() {
|
||||||
// アライメントに基づく中心で回転
|
// アライメントに基づく中心で回転
|
||||||
vec2 q = rectCenter + rot(-theta) * (p - rectCenter);
|
vec2 q = rectCenter + rot(-theta) * (p - rectCenter);
|
||||||
|
|
||||||
// タイルサイズ(ウォーターマーク + マージン)で正規化してUV座標に変換
|
// タイルサイズ(ウォーターマーク + マージン)で正規化
|
||||||
vec2 tile = wmSize + margin * 2.0;
|
vec2 tile = wmSize + margin * 2.0;
|
||||||
vec2 uvWm = q / tile;
|
vec2 tileUv = q / tile;
|
||||||
|
|
||||||
// マージン部分を考慮してUVをオフセット・スケール
|
// タイル内のローカル座標(0..1)を取得
|
||||||
uvWm = (uvWm * tile - margin) / wmSize;
|
vec2 localUv = fract(tileUv);
|
||||||
|
|
||||||
// テクスチャのWRAP_REPEATにより自動的にタイル化される
|
// ローカル座標をピクセル単位に変換
|
||||||
|
vec2 localPos = localUv * tile;
|
||||||
|
|
||||||
|
// マージン領域内かチェック
|
||||||
|
bool inMargin = any(lessThan(localPos, margin)) || any(greaterThanEqual(localPos, margin + wmSize));
|
||||||
|
|
||||||
|
if (!inMargin) {
|
||||||
|
// ウォーターマーク領域内: UV座標を計算
|
||||||
|
vec2 uvWm = (localPos - margin) / wmSize;
|
||||||
wmCol = texture(u_watermark, uvWm);
|
wmCol = texture(u_watermark, uvWm);
|
||||||
|
}
|
||||||
|
// マージン領域の場合は透明(wmCol = vec4(0.0))のまま
|
||||||
} else {
|
} else {
|
||||||
// アライメントと回転に従い一枚だけ描画
|
// アライメントと回転に従い一枚だけ描画
|
||||||
vec2 q = rectCenter + rot(-theta) * (p - rectCenter);
|
vec2 q = rectCenter + rot(-theta) * (p - rectCenter);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue