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

During your visit to our site, NumWorks needs to install "cookies" or use other technologies to collect data about you in order to:

With the exception of Cookies essential to the operation of the site, NumWorks leaves you the choice: you can accept Cookies for audience measurement by clicking on the "Accept and continue" button, or refuse these Cookies by clicking on the "Continue without accepting" button or by continuing your browsing. You can update your choice at any time by clicking on the link "Manage my cookies" at the bottom of the page. For more information, please consult our <a href="https://www.numworks.com/legal/cookies-policy/">cookies policy</a>.