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
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...
Hors ligne
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
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