У меня возникли проблемы с пониманием того, как освещение работает в OpenGL (особенно с пониманием предопределенных переменных. Есть ли где-то их список?). Я бездельничал в своем файле Vertex Shader, чтобы затенить мой shpere. Так что мне удалось затенить это, но я не знаю, что сделал Вот код:
Вершинный шейдер:
#version 330
precision highp float;
in vec3 in_Position; //declare position
in vec3 in_Color; //color passed from the cpp file
//mycode
in vec3 in_Normal;
// mvpmatrix is the result of multiplying the model, view, and projection matrices */
uniform mat4 MVP_matrix;
vec3 ambient;
out vec3 ex_Color;
void main(void) {
// Multiply the MVP_ matrix by the vertex to obtain our final vertex position (mvp was created in *.cpp)
gl_Position = MVP_matrix * vec4(in_Position, 1.0);
//mycode
ambient = vec3(0.0f,0.1f,1.0f); // just a test vector
ambient = ambient * in_Position ; // HERE IS WHAT I DONT GET!
ex_Color = ambient;
}
Я умножаю каждую точку на сфере с помощью матрицы MVP, а затем с переменной окружения.
Фрагмент шейдера:
#version 330
precision highp float;
in vec3 ex_Color;
out vec4 gl_FragColor;
void main(void) {
gl_FragColor = vec4(ex_Color,1.0);
}
Что означает "точность highp float"; делает? Я знаю, что файл вершин передает цвет фрагментному шейдеру, а затем этот фрагмент «интерполируется». Хорошо, как работает интерполяция? Как Opengl знает, где остановить интерполяцию?