|
フラグメントシェーダー グラフ
#4548
#4549
#4550
#4551
#4552
OpenGLのシェーダー言語GLSLをもとにしています。
フラグメントシェーダーでは各ドットに対して色を決めて描画していくもので
使用する描画コマンドはPLOT POINTSのみです。PLOT LINESやDRAW文は使いません。
各R,G,Bを0~1までの数値で表したフルカラーを使います。
WINDOWは(-1,-1)-(1,1)として原点(0,0)を中心とした正方形領域を想定しています。
フラグメントシェーダーにはMOD関数による繰り返しやABS関数による折り畳み
ブーリアン演算などがあります。
フラグメントシェーダーでは基本的に距離関数というものを定義して描画していきます。
その距離関数の正体は陰関数(f(x,y)=0)です。y=f(x)もy-f(x)=0とすれば陰関数になります。
陰関数なのでf(x,y)<0ならその内側になり、f(x,y)>0なら外側になります。
ここではy=3*sin(2*x)^3+sin(x)^2-2*sin(3*x)のグラフを描画しています。
なお、シェーダー言語GLSL(WebGL)ではGPUをごりごりに使用したアニメーション表示です。(GPUで暖がとれる!?)
見ているだけでも楽しいのでぜひアクセスしてみてください。
https://glslsandbox.com/
https://glslsandbox.com/e#78473.0
https://glslsandbox.com/e#78672.0
https://glslsandbox.com/e#78754.0
https://glslsandbox.com/e#78747.0
https://glslsandbox.com/e#78666.0
https://glslsandbox.com/e#78263.0
https://glslsandbox.com/e#78701.0
https://glslsandbox.com/e#78390.0
DIM P(2),COL(3),CC(3),B(3)
ASK BITMAP SIZE XSIZE,YSIZE
SET COLOR MODE "NATIVE"
SET POINT STYLE 1
SET WINDOW -XSIZE/MIN(XSIZE,YSIZE),XSIZE/MIN(XSIZE,YSIZE),-YSIZE/MIN(XSIZE,YSIZE),YSIZE/MIN(XSIZE,YSIZE) !! SET WINDOW -1,1,-1,1
CALL VEC3(CC,1,.4,.1)
FOR YY=0 TO YSIZE-1
FOR XX=0 TO XSIZE-1
LET X=(XX*2-XSIZE)/MIN(XSIZE,YSIZE) ! -1~1
LET Y=(YY*2-YSIZE)/MIN(XSIZE,YSIZE) ! -1~1
CALL VEC2(P,X,Y)
MAT P=5*P
IF ABS(MOD(P(1),1))<.02 OR ABS(MOD(P(2),1))<.02 THEN CALL VEC3(B,.2,.2,.2) ELSE CALL VEC3(B,0,0,0)
IF ABS(P(1))<.03 OR ABS(P(2))<.03 THEN CALL VEC3(B,.5,.5,.5)
LET L=ABS(DISTANCE(P)-.6)
IF L<>0 THEN
LET F=.1/L
ELSE
LET F=1
END IF
MAT COL=F*CC
MAT COL=COL+B
CALL SETCOLOR(COL(1),COL(2),COL(3))
PLOT POINTS:X,Y
NEXT XX
NEXT YY
END
EXTERNAL FUNCTION DISTANCE(P()) !距離関数 y=3*sin(2*x)^3+sin(x)^2-2*sin(3*x)
LET DISTANCE=3*SIN(2*P(1))^3+SIN(P(1))^2-2*SIN(3*P(1))-P(2)
END FUNCTION
EXTERNAL SUB SETCOLOR(R,G,B)
SET COLOR COLORINDEX(CLAMP(R,0,1),CLAMP(G,0,1),CLAMP(B,0,1))
END SUB
EXTERNAL SUB VEC2(A(),X,Y)
LET A(1)=X
LET A(2)=Y
END SUB
EXTERNAL SUB VEC3(A(),X,Y,Z)
LET A(1)=X
LET A(2)=Y
LET A(3)=Z
END SUB
EXTERNAL FUNCTION CLAMP(X,A,B)
LET CLAMP=MIN(B,MAX(X,A))
END FUNCTION
|
|