Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2015-08-04 09:01:41 Problème de background

PHIFO
membre
Date d'inscription: 2014-04-27
Messages: 91

Problème de background



Bonjour,

    Sur le test ci dessous je rend progressivement le rectangle rouge (void FR()) transparent. Lorsque le rectangle bleu ( void ANG)) passe derrière alors que le rouge  a disparu on constate que le rectangle rouge est devenu noir.

    Si je transforme le background du setup en blanc c'est un rectangle blanc qui apparait. De même si on supprime le rectangle rouge on s'apperçoit aussi que les lettres ont un fond.

   J'ai trouvé la solution en passant ANG() avant FRH() dans draw.

   Quelqu'un pourrait m'en expliquer la logique et le fonctionnement au niveau du draw?

Merci d'avance

// variable FR
float a = 0; float b = -55;float ax = 4.18; float ca1 = 255;
// variable ANG
float aa = 300; float ba = -55;float aax = 6; float caa1 =255;

void setup() {
  size(1260,720,P3D);
  textSize(80);
  frameRate(24);
}

void draw(){
    background(0);
  FRH();FRHl();
  ANG();
}


void FRH() {
  pushMatrix(); 
  translate(a,b,10);
  noStroke();
  fill(#FF0000,ca1);
  rect(0,0,800,110);
  a += ax;
  b += 1; 
  if (a >191) {
    ax = ax*-1;
  }
  if (a < 0) {
    ax = ax*-1;
  }
     if (b > 143) {
    ca1 -=4;
    }
   if(b> height/5) {
    a = 65;
    b =144;
    }
  popStyle();
  popMatrix();
}

void FRHl() {
  pushMatrix();
  if(frameCount >200) {
  translate(80,230,10);
   fill(#FF0000);
  text( "HUMANITE EN PAIX", 0,0);
  }
  popMatrix();
}

void ANG() {
  if( frameCount > 100){ 
  translate(aa,ba);
  noStroke();
  fill(#1203FF,caa1);
  rect(0,0,1000,110);
  aa += aax;
  ba += 1; 
  if (aa >300) {
    aax = aax*-1;
  }
  if (aa < 0) {
    aax = aax*-1;
  }
     if (ba > 250) {
    caa1 -=1.5;
    }
   if(ba> 250) {
   aa = 200;
    ba =250;
    }
  }
  popMatrix();

}

Hors ligne

 

#2 2015-08-04 10:58:50 Re : Problème de background

Olivier
N°4
Lieu: Chalon sur la Saône
Date d'inscription: 2009-04-07
Messages: 1471
Site web

Re: Problème de background



Hello...

D'une part, ton code ne compile pas dans la mesure où il traîne un popStyle(); et il manque un  pushMAtrix();.
D'autre part quand ces lignes sont corrigées, le comportement que tu décris n'est pas celui qui s'affiche...

Si souhaites être aidé, assures toi de bien poster le code correspondant...


L'Amour au Peuple !

Hors ligne

 

#3 2015-08-04 11:20:00 Re : Problème de background

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: Problème de background



Bonjour,

En fait, tu es dans un environnement 3D et tu lui demande d'afficher des rectangles (2D). Donc il ne gère pas bien cela. SI tu passes en P2D alors cela fonctionne :

// variable FR
float a = 0; 
float b = -55;
float ax = 4.18; 
float ca1 = 255;
// variable ANG
float aa = 300; 
float ba = -55;
float aax = 6; 
float caa1 =255;

void setup() {
  size(1260, 720, P2D);
  textSize(80);
  frameRate(24);
}

void draw() {
  background(255);
  ANG();
  FRH();
  FRHl();
}


void FRH() {
  pushMatrix(); 
  pushStyle(); 
  translate(a, b);
  noStroke();
  fill(#FF0000, ca1);
  rect(0, 0, 800, 110);
  a += ax;
  b += 1;  
  if (a >191) {
    ax = ax*-1;
  }
  if (a < 0) {
    ax = ax*-1;
  }
  if (b > 143) {
    ca1 -=4;
  }
  if (b> height/5) { 
    a = 65;
    b =144;
  }
  popStyle();
  popMatrix();
}

void FRHl() {
  pushMatrix();
  if (frameCount >200) {
    translate(80, 230);
    fill(#FF0000);
    text( "HUMANITE EN PAIX", 0, 0);
  }
  popMatrix();
}

void ANG() {
  pushMatrix();

  if ( frameCount > 100) {  
    translate(aa, ba);
    noStroke();
    fill(#1203FF, caa1);
    rect(0, 0, 1000, 110);
    aa += aax;
    ba += 1;  
    if (aa >300) {
      aax = aax*-1;
    }
    if (aa < 0) {
      aax = aax*-1;
    }
    if (ba > 250) {
      caa1 -=1.5;
    }
    if (ba> 250) { 
      aa = 200;
      ba =250;
    }
  }
  popMatrix();
}

Hors ligne

 

#4 2015-08-04 13:41:38 Re : Problème de background

PHIFO
membre
Date d'inscription: 2014-04-27
Messages: 91

Re: Problème de background



Merci Mushssu, ok mon idée en travaillant en univers 3D était de mettre les rectangles plus ou moins en avant les uns des autres. Donc je comprends que pour travailler en univers 3D il faut des volumes.
     Donc pour mettre les rectangles les uns au dessus des autres, il suffit finalement de les mettre dans le draw dans l'ordre inverse de leurs position. Le plus éloigné en  premier et le plus proche en dernier.
    Excuse Olivier j'ai voulu enlever des lignes parasites et finalement j'ai mis un peu de panique.

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024