Проблема Понимание освещения в OpenGL - PullRequest
0 голосов
/ 11 ноября 2011

У меня возникли проблемы с пониманием того, как освещение работает в 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 знает, где остановить интерполяцию?

1 Ответ

5 голосов
/ 11 ноября 2011
ambient = ambient * in_Position ; // HERE IS WHAT I DONT GET!

Это делает нас двоих. Я понятия не имею, что вы собираетесь сделать с этим. Это, безусловно, даст цвет. Но это не будет иметь никакого смысла в любом случае. Это, конечно, не квалифицируется как «освещение».

Что означает "точность highp float"; делает

Ничего. Не в настольном OpenGL. Я действительно понятия не имею, почему кто-то положил это туда; precision highp предназначен для совместимости с GL ES, но шейдеры версии 3.30 принципиально несовместимы с GL ES 2.0, поскольку ES 2.0 не использует квалификаторы in/out, а GLSL 3.30 для настольных компьютеров -

.

Хорошо, как работает интерполяция?

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

Как Opengl знает, где остановить интерполяцию?

Край вашего треугольника.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...