Gradient linéaire de teintes quelconques

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Huitbit
Messages : 940
Inscription : jeu. 08/déc./2005 5:19
Localisation : Guadeloupe

Gradient linéaire de teintes quelconques

Message par Huitbit »

Hello,

Pour colorier correctement les cartes je compte utiliser le petit programme ci-dessous(sous forme de tableau précalculé bien sûr !).
Je classe les couleurs des différents types de terrains sur une échelle de 0 à 100 (0 altitude minimale relative et 100 altitude maximale relative).
Les paramètres à modifier (type de terrain,(R,G,B) de départ,altitude relative de départ)
sont là:

Code : Tout sélectionner

TeinteDeReference(#EauxProfondes,0,0,64,0)
TeinteDeReference(#EauxPeuProfondes,0,64,255,32)
TeinteDeReference(#Sable,255,255,0,40)
TeinteDeReference(#Herbe,0,255,0,45)
TeinteDeReference(#Foret,0,128,0,70)
TeinteDeReference(#BasseMontagne,193,102,18,80)
TeinteDeReference(#HauteMontagne,111, 93, 78,90)
TeinteDeReference(#Neige,255,255,255,100)

Code : Tout sélectionner

;gradient de teintes multicolores quelconques
;Auteur Huitbit
;Avril 2011
;PureBasic 4.51 (Windows  -  x86)
;*********************************
#LargeurEcran=1024
#HauteurEcran=400

Enumeration
  #EauxProfondes
  #EauxPeuProfondes
  #Sable
  #Herbe
  #Foret
  #BasseMontagne
  #HauteMontagne
  #Neige
EndEnumeration

IndexMaxDesTeintes.l=2550
xEcran.l=0
y.l=0

Global x.l
Structure Teinte
  Rouge.c
  Vert.c
  Bleu.c
  Index.l
EndStructure

Macro TeinteDeReference(TypeDeTerrain,r,v,b,id);id valeur comprise entre 0 et 100
Teinte(TypeDeTerrain)\Rouge=r
Teinte(TypeDeTerrain)\Vert=v
Teinte(TypeDeTerrain)\Bleu=b
Teinte(TypeDeTerrain)\Index = id*IndexMaxDesTeintes/100
EndMacro

Macro  Composante(comp)
ValeurComposanteTeinte(x,Teinte(TypeDeTerrain)\Index ,Teinte(TypeDeTerrain)\comp,Teinte(TypeDeTerrain+1)\Index ,Teinte(TypeDeTerrain+1)\comp)
EndMacro

Procedure.f ValeurComposanteTeinte(x.l,xA.f,Ya.f,xB.f,YB.f)
  ProcedureReturn yA + (yB - yA)/(xB - xA) * (x - xA)
EndProcedure

Global Dim Teinte.Teinte(IndexMaxDesTeintes)
  
TeinteDeReference(#EauxProfondes,0,0,64,0)
TeinteDeReference(#EauxPeuProfondes,0,64,255,32)
TeinteDeReference(#Sable,255,255,0,40)
TeinteDeReference(#Herbe,0,255,0,45)
TeinteDeReference(#Foret,0,128,0,70)
TeinteDeReference(#BasseMontagne,193,102,18,80)
TeinteDeReference(#HauteMontagne,111, 93, 78,90)
TeinteDeReference(#Neige,255,255,255,100)

;-PROGRAMME PRINCIPAL
InitSprite()
InitKeyboard()
OpenWindow(0,0,0,#LargeurEcran,#HauteurEcran,"",#PB_Window_ScreenCentered|#PB_Window_SystemMenu  )
OpenWindowedScreen(WindowID(0),0,0,#LargeurEcran,#HauteurEcran,0,0,0)

CreateSprite(0,#LargeurEcran,#HauteurEcran)
StartDrawing(SpriteOutput(0))

For x=0 To IndexMaxDesTeintes
  ;"Retour" à la ligne
  If xEcran=#LargeurEcran
    xEcran=0
     y = y+100
   EndIf
   
  Select x
    Case Teinte(#EauxProfondes)\Index
      TypeDeTerrain=#EauxProfondes
    Case Teinte(#EauxPeuProfondes)\Index
      TypeDeTerrain=#EauxPeuProfondes
    Case Teinte(#Sable)\Index
      TypeDeTerrain=#Sable
    Case Teinte(#Herbe)\Index
      TypeDeTerrain=#Herbe
    Case Teinte(#Foret)\Index
      TypeDeTerrain=#Foret
    Case Teinte(#BasseMontagne)\Index
      TypeDeTerrain=#BasseMontagne
    Case Teinte(#HauteMontagne)\Index
      TypeDeTerrain=#HauteMontagne
  EndSelect
  
  Line(xEcran,y,1,50,RGB(Composante(Rouge),Composante(Vert),Composante(Bleu)))
  
xEcran=xEcran+1
Next x

StopDrawing()

;-BOUCLE PRINCIPALE
Repeat
  FlipBuffers() 
  DisplaySprite(0,0,0)
  
  Delay(10)
Until WindowEvent() = #PB_Event_CloseWindow  
Hasta la vista !

PS : Bon anniversaire Taznormand :P !

[EDIT] Premier test avec 2550 teintes, bof :? , je préfère le style "carte du relief affichée au fond de la classe d'histoire-géo"
Je vais rajouter la pente pour voir...[EDIT]

Image
Elevé au MSX !