Programme qui dessine en boucle un “shader” en fonction d’une formule pour la couleur du pixel. Adaptation de do shades! (allez voir c’est plus simple pour comprendre).
Fonctions :
- xp()
et yp()
renvoient la position du pixel par rapport au centre, entre 0.0 et 1.0.
- d()
renvoie la distance du pixel par rapport au centre, entre 0.0 et 1.0.
Vous pouvez aussi utiliser la variable a
qui est modifiable en cours de tracé avec flèche droite
(+0.1) ou flèche gauche
(-0.1).
RGB
(entrer trois formules : formule="cos(d()),sin(d()),a"
) et greyscales
(entrer une seule formule : sin(xp())
)prec
ision correspond à la taille des pixelsfrom ion import keydown from math import * from kandinsky import fill_rect as krect SCREEN_W=320 SCREEN_H=222 ORIGIN_X=SCREEN_W//2 ORIGIN_Y=SCREEN_H//2 SQUARE_SIZE=max(SCREEN_W,SCREEN_H) HALF_SQUARE_SIZE=SQUARE_SIZE//2 def runShader(loop=False,formule="xp()",prec=15,color_mode="greyscales"): global a a=1 if loop: while True: if keydown(0):a-=0.1 if keydown(3):a+=0.1 drawShader(formule,a,prec,color_mode) else: drawShader(formule,a,prec,color_mode) def drawShader(formule,a,prec,color_mode): global x,y for x in range(0,SCREEN_W,prec): for y in range(0,SCREEN_H,prec): formules=formule.split(",") r = eval(formules[0])*255 if color_mode=="rvb": v = eval(formules[1])*255 b = eval(formules[2])*255 for i in r,v,b: if i>255: i=255 if i<0: i=0 if color_mode=="greyscales": color=(r,r,r) else: color=(r,v,b) krect(x,y,prec,prec,color) def xp(): val= (ORIGIN_X-x)/HALF_SQUARE_SIZE return val def yp(): val= (ORIGIN_Y-y)/HALF_SQUARE_SIZE return val def d(): val= sqrt((xp()**2)+(yp()**2)) return val runShader(loop=True,formule="cos(d()),sin(d()),a",prec=5,color_mode="rvb")