Проблема со скрытым стеком треугольников вызвана сферой, которая рисуется каждый раз, когда вызывается ничья.Даже если прозрачность установлена на 40, повторяющиеся сферы суммируются, чтобы скрыть все, кроме последнего треугольника, который нарисован поверх всех, кроме самой последней сферы.
Чтобы увидеть, как совокупный эффект сфер скрывает стопку треугольниковустановите альфа на меньшее число.Установив альфа на 5 вместо 40, мы видим короткий след стека треугольников:
fill(0, 5); // alpha parameter for transparency
Если мы изменим альфа на 2, мы получим короткий след, и стек треугольников, кажется, никогда не станет полностью затененным.
Другой подход к рисованию без наложения стека треугольника - рисовать сферу только один раз.
if (frameCount < 2){
// 2. draw the transparent sphere in the initial referential
translate(width/2, height/2);
strokeWeight(0.1);
stroke(155, 220, 220);
sphere(r_sphere);
}
Это сделаетстопка треугольников видима, но, вероятно, не дает визуального эффекта, который вы ищете, поскольку два треугольника оказываются перед сферой, а не внутри нее.
Третий подход - перерисовать весь стектреугольников снизу вверх до текущей позиции y, а затем рисовать сферу каждый раз, когда вызывается рисование.
Я изменил ваш код, чтобы принять такой подход:
float y;
float x;
float r_sphere = 200;
float up_down = -0.5;
void setup() {
size(1100, 800, P3D);
background(0);
hint(ENABLE_DEPTH_SORT); // option that allows transparency
fill(0, 40); // alpha parameter for transparency
x = width/2;
y = height/2+r_sphere+20;
}
void draw() {
if (frameCount > height + r_sphere+20){
noLoop();
} else {
background(0);
}
// 1. draw stack of triangles in new referential
// define new referential for the triangle at each rendering
y = height/2+r_sphere+20;
for (int i = 0; i < frameCount; i++){
pushMatrix();
translate(x, y, 0);
y = y+=up_down;
// draw the triangle that should persist
stroke(220, 150, 25);
strokeWeight(2);
triangle(0, 0, 90, 0, 70, 30);
popMatrix();
}
// 2. draw the transparent sphere in the initial referential
translate(width/2, height/2);
strokeWeight(0.1);
stroke(155, 220, 220);
sphere(r_sphere);
}
Я считаю, что этоПоследний подход наиболее близок к моделированию прозрачной физической сферы и стопки полностью непрозрачных треугольников.Визуальный эффект не такой захватывающий, как в первом подходе, когда альфа установлена на низкое число, поскольку мы не видим стек треугольников как пустоту.