|
フラグメントシェーダー ホワイトノイズ
乱数randomを定義してホワイトノイズ(砂嵐)を描いています。
randomはデダラメな数値を返す関数です。
引数が同じなら同じ値を返します。
https://nogson2.hatenablog.com/entry/2017/11/18/150645
DIM P(2),COL(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)
FOR YY=0 TO YSIZE-1
FOR XX=0 TO XSIZE-1
LET X=(XX*2-XSIZE)/MIN(XSIZE,YSIZE)
LET Y=(YY*2-YSIZE)/MIN(XSIZE,YSIZE)
CALL VEC2(P,X,Y)
LET N=RANDOM(P)
CALL VEC3(COL,N,N,N)
CALL SETCOLOR(COL(1),COL(2),COL(3))
PLOT POINTS:X,Y
NEXT XX
NEXT YY
END
EXTERNAL SUB SETCOLOR(R,G,B)
SET COLOR COLORINDEX(CLAMP(R,0,1),CLAMP(G,0,1),CLAMP(B,0,1))
END SUB
EXTERNAL FUNCTION RANDOM(S()) !乱数
DIM V(2)
CALL VEC2(V,12.9898,78.233)
LET RANDOM=FRACT(SIN(DOT(S,V))*43758.5453123)
END FUNCTION
EXTERNAL FUNCTION FRACT(X)
LET FRACT=X-INT(X)
END FUNCTION
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
|
|