2015-04-26 3 views
1

Я пытаюсь передать цвет из вершинного шейдера в шейдер фрагмента и установить gl_FragColor этому значению. Когда я, кажется, делаю это, цвет объекта, который я создал, мигает всеми разными цветами без видимого рисунка. Однако, когда я устанавливаю цвет в шейдере фрагмента примерно так же, как это gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0), цвет совершенно белый, без мигания. Я выложу свои шейдеры ниже:OpenGL - цвет вершинного шейдера не передается в фрагмент-шейдер

Vertex Shader:

#version 130 
//not using these for now 
//uniform mat4 uniform_modelMatrix; 
//uniform mat4 uniform_viewMatrix;  
//uniform mat4 uniform_projectionMatrix; 

in vec3 in_Position; 
in vec4 in_Color; 

void main(void) 
{ 
    //Set Position to XYZW 
    vec4 position = vec4(in_Position.xyz, 1.0); 
    gl_Position = position; 

    //Set Passed Color to white 
    out_Color = vec4(1.0, 1.0, 1.0, 1.0); 
} 

Фрагмент Shader:

#version 130 
in vec4 pass_Color; 

void main(void) 
{ 
    //Set Color to color from vertex shader - doesn't work 
    gl_FragColor = pass_Color; 

    //Set Color to white anyways - works 
    //gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0); 
} 

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

ответ

1

Так что мой приятель помог мне, у меня была переменная out в шейдере вершин по имени out_Color (что я также просто понял, что я не копировал правильно). Но у меня было это объявление в вершинном шейдере out vec4 out_Color. У меня также был фрагмент шейдера in vec4 pass_Color. Как только я сменил имена на оба, было pass_Color, программа отлично работала.

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

Смежные вопросы