5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

glsl パターンまとめ

Last updated at Posted at 2018-09-18

デュプリケート

真ん中ドットパターン(偶数)

もっともオーソドックスなドットパターン、中央から2の倍数で分割されていくパターン、すべての基本
実はあまり使えない

precision mediump float;
uniform vec2  m;       // mouse
uniform float t;       // time
uniform vec2  r;       // resolution
uniform sampler2D smp; // prev scene

void main(void){
	vec2 p = (gl_FragCoord.xy * 2.0 - r) / min(r.x, r.y);
	float n = t;
	p*=n;
	p=mod(p,2.)-1.;
	float l = length(p);
	l=step(0.,1.-l);
	gl_FragColor = vec4(vec3(l), 1.0);
}

normalpattern.png
https://goo.gl/kRAsgs

このパターンの場合奇数で割れることはない

左下ドットパターン

左下から分割されていくパターン

precision mediump float;
uniform vec2  m;       // mouse
uniform float t;       // time
uniform vec2  r;       // resolution
uniform sampler2D smp; // prev scene

void main(void){
	vec2 p = (gl_FragCoord.xy * 2.0 - r) / min(r.x, r.y);
	float n = t;
	p+=1.;
	p*=n;
	p=mod(p,2.);
	p-=1.;
	float l = length(p);
	l=step(0.,1.-l);
	gl_FragColor = vec4(vec3(l), 1.0);
}

これが足されただけ

	p+=1.;

leftdown.png
https://goo.gl/ungtFE

同様に

右上ドットパターン

	p-=1.;

とすると右上

左上ドットパターン

	p.x+=1.;
	p.y-=1.;

とすると左上

右下ドットパターン

	p.x-=1.;
	p.y+=1.;

とすると右下から分割される

真ん中ドットパターン(奇数)

一番よく使う 奇数倍数で真ん中から割る場合、これはかなりはまる。
こちらは偶数で絶対割れないが、最初1つだったものを分割するパターンがほとんどなので、
だいたいこっちが使われる。

precision mediump float;
uniform vec2  m;       // mouse
uniform float t;       // time
uniform vec2  r;       // resolution
uniform sampler2D smp; // prev scene

void main(void){
	vec2 p = (gl_FragCoord.xy * 2.0 - r) / min(r.x, r.y);
	float n = t;
	p*=n;
	p=mod(p+1.,2.)-1.;
	float l = length(p);
	l=step(0.,1.-l);
	gl_FragColor = vec4(vec3(l), 1.0);
}

center.png
https://goo.gl/6oPfZM

市松模様(チェック)

背景合成のテスト用に大活躍

 precision mediump float;
 uniform vec2  m;       // mouse
 uniform float t;       // time
 uniform vec2  r;       // resolution
 uniform sampler2D smp; // prev scene
 
 float pCheckers(vec2 p,float n){vec2 q=p*n;return mod(floor(q.x)+floor(q.y),2.0);}

 void main(void){
    vec2 p = (gl_FragCoord.xy * 2.0 - r) / min(r.x, r.y);
    float l = pCheckers(p,5.);
    gl_FragColor = vec4(vec3(l), 1.0);
 }

check.png

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?