В 3D-приложении есть камера c:
float eyeX = 0.0f;
float eyeY = 0.0f;
float eyeZ = 0.0f;
Matrix.setLookAtM(viewMatrix, 0, eyeX, eyeY, eyeZ,
0f, 0f, -4f, 0f, 1.0f, 0.0f)
Затем этот вектор используется для координат глаза в шейдере?:
const vec4 eyePos = vec4(0.0, 0.0, 0.0, 0.0);
Или необходимы дополнительные преобразования ?
Примечание: Прочтите сообщение Что такое координаты пространства глаза? , но у меня все еще есть сомнения, потому что мой затенитель тумана не работает. В этом шейдере вычисляется расстояние от наблюдателя до объекта:
uniform mat4 u_vMatrix;
in vec4 a_position;
out float v_eyeDist;
const vec4 eyePos = vec4(0.0, 0.0, 0.0, 0.0);
...
void main() {
...
vec4 viewPos = u_vMatrix * a_position;
v_eyeDist = sqrt(pow((viewPos.x - eyePos.x), 2.0) +
pow((viewPos.y - eyePos.y), 2.0) +
pow((viewPos.z - eyePos.z), 2.0));
...
}
Заранее спасибо!
Решение : по совету Rabbid76 я использовал длину (), а также матрицу вида модели.
uniform mat4 u_mvMatrix; // model-view matrix
in vec4 a_position;
out float v_eyeDist;
...
void main() {
...
vec4 viewPos = u_mvMatrix * a_position;
v_eyeDist = length(viewPos);
...
}