2015-02-04 3 views
-2

#version 150에 쉐이더를 썼습니다. 나는 제복에 문제가있다. 내가 light uniform (vec4)을 사용하면 내 장면이 사라집니다. 설정 유니폼의GLSL - 균일 오류

추출 :이 작품

typedef struct { float x, y, z, w; } vec4; 
//... 
class MyClass { 
    GLuint _id; 
    vec4 light_diffuse; 
}; 
//... 
void MyClass::setUniforms { 
    //... 
    GLint location = glGetUniformLocation(_id, "in_light_diffuse"); 
    //... 
    glUseProgram(_id); 
    //... 
    glUniform4fv(location, 1, (const GLfloat *)&light_diffuse); 
    //... 
} 

:

#version 150 

in vec4 in_vertex; 
in vec3 in_normal; 
in vec4 in_color; 

uniform mat4 in_mvp_matrix; 

uniform vec4 in_light_position; 
uniform vec4 in_light_ambient; 
uniform vec4 in_light_diffuse; 
uniform vec4 in_light_specular; 

out vec4 v_color; 

void main() { 
    //vec4 a = in_light_position + in_light_ambient + in_light_diffuse + in_light_specular; 
    v_color = in_color; 
    gl_Position = in_mvp_matrix * in_vertex; 
} 

하지 않는 WORK :

#version 150 

in vec4 in_vertex; 
in vec3 in_normal; 
in vec4 in_color; 

uniform mat4 in_mvp_matrix; 

uniform vec4 in_light_position; 
uniform vec4 in_light_ambient; 
uniform vec4 in_light_diffuse; 
uniform vec4 in_light_specular; 

out vec4 v_color; 

void main() { 
    vec4 a = in_light_position + in_light_ambient + in_light_diffuse + in_light_specular; 
    v_color = in_color; 
    gl_Position = in_mvp_matrix * in_vertex; 
} 

첫 번째 경우에 내가 다채로운 개체를 볼 수 있습니다, 그러나 두 번째 모든 것이 사라집니다. 나는 계산을 위해이 유니폼을 사용하지 않는다. out_flag_color 그리고 결과는 빈 화면이다.

간단합니다. 내가 그 중 하나를 사용한다면 (아무리해도 상관 없습니다) 비어 있습니다.

아무도 도움이 되셨습니까?

+0

조명 계산을 어떻게 수행하고 있습니까? – Poriferous

+0

아직 계산이 없습니다. 나는 'out_frag_color'를 밝은 색상으로 설정할 수도 없습니다. 그들은 비어 있거나 뭔가 있습니다. 모든 결과가 빈 장면이기 때문에 조명을 계산할 수 없습니다. – eSeverus

+0

오케이. 한 번 더 내 질문을 읽고, 난 변수를 v_color 다양한 변수를 통해'out_frag_color' (픽셀 출력)'vec4 (1, 0, 0, 1)', 기본적으로 상수 확산 색상을 쓸, 아무것도 더 ('out_frag_color = v_color = in_light_diffuse'). 그리고 빈 장면이 있습니다. 'out_frag_color = v_color = in_color'속성의 색상이 잘 작동하고, 객체가 화려하고 눈에.니다. – eSeverus

답변

0

해결. 나는 vec4uniform mat4 위치로 설정하고있었습니다.