2016-09-09 3 views
1

Я играю с GLSL Sandbox как-то цикл for не работает, как я ожидал:GLSL - цикл не работает

float map(vec3 p) 
{ 
    p.yz = rotate(p.yz, mouse.y*10.); 
    float aa = 0.; 
    float b = box(p, vec3(1.,1.,1.)); 

    for(int i=0; i<5; i++) 
    { 
    float off = float(i); 
    vec3 q = p+off*.05;//<--pivot go down diagonally 
    float c = box(q, vec3(off,1.,1.));//<--scale the box in x 
    aa = min(c,b); 
    } 
    return aa; 
} 

Я ожидаю, что это, по крайней мере, 5 коробок постепенно идут вниз с xscale становятся больше. Но результат кажется, что все дублированные боксы заканчиваются последним результатом цикла.

Как я могу это решить?

ответ

2

Вы никогда не читаете от aa, поэтому он заканчивается как минимум последним c и оригиналом b. Перестраивать такие вещи следует:

float b = box(p, vec3(1., 1., 1.)); 
float aa = b; 

for (int i = 0; i < 5; i++) { 
    … 
    aa = min(c, aa); 
} 
Смежные вопросы