GLSL с фрагментным шейдером отображает только черный GL_POINTS - PullRequest
6 голосов
/ 04 марта 2010

Я пытаюсь добавить несколько шейдеров в мою старую программу OpenGL, которая рисует много GL_POINTS и немного GL_LINES.

Я создал эти два шейдера:

Вершинный шейдер:

void main()
{ 
    vec4 v = vec4(gl_Vertex);
    v.z = v.z + sin(v.x*v.x + v.y*v.y)/10.0;
    gl_Position = gl_ModelViewProjectionMatrix * v;
}

Фрагмент шейдера:

#version 120 

void main()
{
    vec4 myOutputColor = gl_Color;
    gl_FragColor = myOutputColor;
    //gl_FragColor.r = 0.5;
}

Эти два шейдера компилируются и связываются без проблем. И вершинный шейдер отлично работает, я вижу, как GL_POINTS смещается с помощью этого греха в вершинном шейдере. Но проблема в том, что я могу видеть свои GL_POINTS и GL_LINES, только если цвет фона не черный, потому что все точки и линии отображаются черным. Кажется, что все цвета, заданные с помощью glColor3f в коде рендеринга, игнорируются. Если я раскомментирую закомментированную строку в своем фрагментном шейдере, я могу сделать все линии и точки красными, но не должен ли gl_Color соответствовать цвету, который был установлен с помощью glColor3f для каждой точки?

Есть ли что-нибудь еще в моем коде OpenGL, которое могло бы вызвать такое поведение?

1 Ответ

11 голосов
/ 05 марта 2010

вам нужно передать цвет через вершинный шейдер.

gl_FrontColor = gl_Color;
...