Как использовать OpenGL и GLSL для изменения цвета (C ++)? - PullRequest
0 голосов
/ 12 декабря 2011

Я работаю над проектом OpenGL на C ++ и хочу научиться использовать шейдеры GLSL.Проблема в том, что, хотя я могу завершить свою программу без использования своих собственных шейдеров, я хочу написать свои собственные (в настоящее время я не загружаю шейдеры самостоятельно - не уверен, что OpenGL по умолчанию есть).

Чтобы нарисовать на изображении несколько линий (вершины которых хранятся в векторе, а значения цветов - в другом векторе), я использую следующий код для просмотра и рендеринга их при каждом обновлении кадра - я использую функцию отображения GLUTдля этого.

glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_LINES);  
vector<point2>::iterator it;
int c_index = 0;
for(it=points.begin(); it<points.end(); it++){
    if(c_index % 2 == 0) //set color for every pair of points (each line)
        glColor3f(colors[c_index/2][0], colors[c_index/2][1], colors[c_index/2][2]);
    c_index++;

    glVertex2f(it->x, it->y); //set vertex
}
glEnd();
glFlush();

Теперь проблема в том, что когда я пытаюсь использовать шейдеры, которые я нашел в другой примерной программе, все цвета - красные (даже если шейдеры явно не определяют какие-либо цвета).Это также заставляет glColor3f ничего не делать.

Мой вопрос в том, что если я могу использовать шейдеры для этого, как должны выглядеть шейдеры и как мне их загружать?

1 Ответ

0 голосов
/ 10 января 2012

Очевидно, что это невозможно сделать с помощью glColor3f. Вместо этого мне пришлось создать заранее определенный буфер OpenGL и отправить данные буфера в шейдеры. Это не может быть сделано "на лету", как я надеялся.

...