2012-04-14 1 views
2

У меня есть маленький шейдер, который выглядит так и имеет аккуратный эффект.Режимы смешивания GLSL, создающие прозрачность добавки

uniform float beatScale; 
varying vec3 vPos; 

void main() { 

    vec3 normPos = (normalize(vPos) + vec3(1, 1, 1))/vec3(2, 2, 2); 
    float alpha; 

    if (normPos.y < beatScale - 0.1) { 
    alpha = 0.0; 
    } else if (normPos.y < beatScale) { 
    alpha = 1.0 - (beatScale - normPos.y)/0.1; 
    } else { 
    alpha = 1.0; 
    } 

    gl_FragColor = vec4(normPos, alpha);  
} 

Но прозрачные части моих объектов перед блокировать объекты позади, выбивания пикселей, которые должны были быть оказаны.

Моя Сожалеем попытка была:

gl_FragColor = gl_FragColor + vec4(normPos, alpha); 

Но это не похоже, чтобы изменить его. Я надеялся, что gl_FragColor имел предыдущий цвет пикселя, но не играл в кости.

Как добавить вычисленный цвет к цвету, который был там раньше? Меня не волнует, что на вершине, это все светящиеся вещи, которые я могу просто добавить вместе.

ответ

1

Если вы используете аддитивное смешение, вам следует отключить запись глубины.

+0

Любая идея, как сделать three.js сделать это? –

+0

Вы можете получить contex из myWebGLRenderer.getContext() и сделать theContext.disable (theContext.DEPTH_TEST) – MikaelEmtinger

+1

(r71). Вы можете просто установить 'material.depthTest' в' false'. Реализатор выполнит настройку. –

 Смежные вопросы

  • Нет связанных вопросов^_^