@ratatyq

Зачем в шейдерах(glsl) мы пишем данные строки?

Здравствуйте, начинаю только вникать в то как рисовать примитивы в OpenGl, много конечно всего не понятно и много было задано глупых вопросов и дано таких же глупых ответ, и возможно этот вопрос тоже будет очень глупый но я не понимаю зачем мы пишем вот так:
uniform vec4 u_Color;

void main()
{
    gl_FragColor = u_Color; // Зачем мы тут присваиваем gl_FragColor? 
}

Зачем мы вообще пишем вот эту строку gl_FragColor = u_Color? Ведь мы потом `биндим данные` таким образом:
int uColor;
void bindDate() {
uColor = glGetUniformLocation(programId, "u_Color");
vertexDate.position(2); // Из за того что в массиве данных даем еще RGBA
glVertexAttribPointer(aColorLocation, 3, GL_FLOAT, false, 20, vertexData);
glEnableVertexAttribArray(aColorLocation);
}

И так же не очень понятно почему у переменной uColor имееться тип данных int ведь потом мы передает все в GL_FLOAT тобишь в типе данных с плавающей запятой...
  • Вопрос задан
  • 112 просмотров
Пригласить эксперта
Ответы на вопрос 1
@toly19
Первый код- код фрагментного шейдера. Его суть- вернуть цвет пикселя (gl_FragColor).
Этот цвет ты берешь из юниформа u_Color, тоесть, все, что отрисует OpenGL будет цвета u_Color.
uColor = glGetUniformLocation(programId, "u_Color"); //просто ссылка на сам юниформ в шейдере( чтобы знать, куда отправлять цвет)

glVertexAttribPointer(aColorLocation, 3, GL_FLOAT, false, 20, vertexData);//тут подключаешь данные из буфера к атрибуту шейдера- указываешь, где брать данные
glEnableVertexAttribArray(aColorLocation); // включаешь атрибут
vertexDate.position(2); //непонятно что :)


Короче, ты подключаешь буффер vertexData к aColorLocation, но на цвет пикселя эти данные никак не влияют
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы