2014-03-28 2 views
1

간단한 3D 엔진을 만들려고 노력하고 있는데, 왜 내 머리가 찢어 져서 왜 3D 라인의 색상을 바꿀 수 없는지 방황하고 있습니다. 다음은 작동하지만 항상 흰색을 렌더링합니다.OpenGL GSL의 glUniform4fv가 작동하지 않습니다.

... 
float color[4] = { 0.5f, 1.0f, 0.0f, 1.0f }; 
glUseProgram(shader.id); 
//I ommitted the model matrix and stuff because it works fine 
glUniformMatrix4fv(glGetUniformLocation(shader.id, "color"), 1, GL_FALSE, color); 

glBegin(GL_LINES); 
    glVertex3f(x, y, z); 
    glVertex3f(x, y+10, z); 
glEnd(); 
... 

버텍스 쉐이더 :

#version 330 

in vec3 vertexPosition_modelspace; 
uniform mat4 mvp; 

void main(){ 
    vec4 v = vec4(vertexPosition_modelspace,1); 
    gl_Position = mvp*v; 
} 

조각 쉐이더 :

#version 330 

uniform vec4 color = vec4(1.0,1.0,1.0,1.0); 
out vec4 frag; 

void main(){ 
     frag = color; 
} 

가 가끔 유니폼 멀리 최적화 보이지 않게 얻을 말하는 일부 문서를 읽고 나는 녹색을 그릴 수 있도록 노력하고있다 그러나 나는 픽셀의 색상을 선택하기 위해 제복을 사용하고 있기 때문에 그렇지 않습니다. 또한 glGetUniform의 반환 값은 유효하며 따라서 존재합니다 (0)입니다. 그럼 왜 망쳐 놨어? 운전수는 죽었나요?

유일한 관련성이 있거나 유사한 질문은 GLSL Shader will not render color from uniform variable이고 나는 그 대답을 이해하지 못했습니다. 복수 셰이더 란 무엇을 의미합니까? 나는 하나의 셰이더를 사용하고 있습니다. (colorvec4하지 mat4 때문에) glUniform4fv 사용시기를

답변

2

당신은 glUniformMatrix4fv를 사용하여.

주어진 경우, 의심스러운 경우 항상 glGetError() 상태를 확인하십시오. 더 나은 경우 KHR_debug 확장자를 사용하십시오.

앞에 전에 오류가 있다고 가정하지 마십시오. 코드의 모든 내용을 검사하십시오. 극히 드문 경우입니다.

+0

전능하신 하나님. 나는 너무 바보 같아서 "매트릭스"라는 키워드의 차이를 보지 못했다. 무리 감사. – user3473422

관련 문제