2012-04-27 4 views
1

OpenGL ES 2.0을 해결하기 위해 노력하고 있으며 OpenGL 초보자입니다. 나는 그 순간에 단지 원점에 붉은 색 사각형을 그려서 매트릭스를 원점에서 화면 중앙으로 옮기고 싶다는 간단한 프로그램을 가지고있다. 지금까지 모든 것을 올바르게 수행했다는 것을 믿지만 행렬을 쉐이더에 적용 할 때 나는 그냥 빈 화면을 얻는 것처럼 뭔가를 놓치고 있어야합니다.C++ OpenGL ES 2.0 행렬 변환 - 초보

쉐이더 :

const char vShaderStr[] = "attribute vec4 a_position; \n" 
     "attribute vec4 a_colour; \n" 
     "varying vec4 v_colour; \n" 
     "uniform mat4 u_transformation; \n" 
     "void main() \n" 
     "{ \n" 
     "  v_colour = a_colour; \n" 
     "  gl_Position = u_transformation * a_position; \n" 
     "} \n"; 
const char fShaderStr[] = "varying vec4 v_colour; \n" 
     "void main() \n" 
     "{ \n" 
     "  gl_FragColor = v_colour; \n" 
     "} \n"; 

매트릭스를 작성하고 쉐이더로 보내

transformationMatrix = glGetUniformLocation(programObject, "u_transformation"); 
... 
GLfloat vMatrix[] = { 
     0.0f, 0.0f, 0.0f, 0.0f, 
     0.0f, 0.0f, 0.0f, 0.0f, 
     0.0f, 0.0f, 0.0f, 0.0f, 
     -0.5f, -0.5f, 0.0f, 1.0f, 
    }; 
glUniformMatrix4fv(transformationMatrix, 1, GL_FALSE, vMatrix); 

나는 그것이 쉐이더로 전송되기 전에이 행렬에 약간의 수학을해야합니까? 그렇다면 어떻게? 나는 여기에서 대부분의 사람들에게 눈에 띄게 명백한 것을 놓치고 있다고 느낍니다.

답변

2

매트릭스가 잘못되었습니다. 다른 모든 것이 올바르게 설정되었다고 가정하면, 올바른 행렬이됩니다 :

GLfloat vMatrix[] = { 
    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.5f, -0.5f, 0.0f, 1.0f, 
}; 
+0

정말 감사드립니다! 먼저 항등 행렬로 시작한 다음 그 주위의 다른 값을 변경해야합니다. –

+0

예, 그렇지 않으면 u_transformation * a_position이 잘못된 값을 생성합니다 (x = 0, y = 0, z = 0). – starbugs