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);
나는 그것이 쉐이더로 전송되기 전에이 행렬에 약간의 수학을해야합니까? 그렇다면 어떻게? 나는 여기에서 대부분의 사람들에게 눈에 띄게 명백한 것을 놓치고 있다고 느낍니다.
정말 감사드립니다! 먼저 항등 행렬로 시작한 다음 그 주위의 다른 값을 변경해야합니다. –
예, 그렇지 않으면 u_transformation * a_position이 잘못된 값을 생성합니다 (x = 0, y = 0, z = 0). – starbugs