do_shades.py

Created by fime

Created on September 09, 2022

1.27 KB

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 aqui est modifiable en cours de tracé avec flèche droite (+0.1) ou flèche gauche (-0.1).

  • Vous pouvez changer le mode de couleur entre RGB (entrer trois formules : formule="cos(d()),sin(d()),a") et greyscales (entrer une seule formule : sin(xp()))
  • La precision correspond à la taille des pixels


from 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")