2012-04-03 2 views
0

나는 다음과 같은 버텍스 쉐이더 있습니다행렬 혼란

attribute vec4 Position; 
attribute vec4 SourceColor; 
varying vec4 DestinationColor; 
uniform mat4 Projection; 

void main(void) { 
    DestinationColor = SourceColor; 
    gl_Position = Projection * Position; 
} 

내가 다음 Projection 일정에 다음과 같은 매트릭스를 적용하려고 :

float matrix[16] = { 
    1.0f, 0.0f, 0.0f, 0.0f, 
    0.0f, 1.0f, 0.0f, 0.0f, 
    0.0f, 0.0f, 1.0f, 0.0f, 
    0.0f, 0.0f, 0.0f, 1.0f 
}; 

glUniformMatrix4fv(projectionSlot, 1, GL_FALSE, matrix); 

이가 아무것도하지 안가? 이걸 실행 한 후에는 더 이상 내 물건을 볼 수 없어요.

답변

1

예 아니요. 프로젝션을 제거하면 곱셈이 잘 작동한다고 말할 수 있습니까? 커플 아이디어 :

  • 확인 glGetError의
  • 확인 쉐이더 컴파일/링크 상태 (glGetShader/Programiv)
  • 는 glUniform 통화 중에 바인딩 프로그램인가?
  • projectionSlot이 유효한 값입니까?
+0

'glGetError()'는 0을 반환합니다. 프로그램은'glUniformMatrix4fv()'와'projectionSlot = glGetAttribLocation (programHandle, "Projection");을 호출하기 전에 컴파일되고 링크되었습니다. "glUniform 호출 중에 프로그램이 바운드입니까?"라는 것은 무엇을 의미합니까? – rid

+0

@Radu : Attrib이 아닌 "glGetUniformLocation"이어야합니다. glGetUniformLocation()으로 변경된 – Tim

+0

은 여전히 ​​동일한 문제입니다. – rid

0

저는 프로그래밍에서 매트릭스를 사용한 적이 없지만 많은 수학 과정을 택했습니다. 투영법이 어떻게 작동하는지 알지 못하지만, x에 y를 투영하는 것은 y를 x에 투영하는 것과 매우 다릅니다. 당신이하지 않은 경우 주위를 전환보십시오.