Найдены два способа вычисления координат тумана в вершинном шейдере:
#version 300 es
uniform mat4 u_mvMatrix;
in vec4 a_position;
smooth out float v_fog_factor;
const float startFog = 10.0;
const float endFog = 140.0;
float getFogFactor(float fogCoord) { // linear fog
float factor = (endFog - fogCoord) / (endFog - startFog);
factor = 1.0 - clamp(factor, 0.0, 1.0);
return factor;
}
void main() {
vec4 v_eye_space_pos = u_mvMatrix * a_position;
// VARIANT I: obtain cartesian coordinate z
float fogCoord = abs(v_eye_space_pos.z / v_eye_space_pos.w);
// VARIANT II: obtain distance
float fogCoord = length(v_eye_space_pos);
v_fog_factor = getFogFactor(fogCoord);
...
}
Не заметил визуальных различий.
Вопрос: Есть ли разница в этих два варианта? Если нет, какой из них лучше использовать с точки зрения производительности? Заранее спасибо!