0
에 투사되어,이 같은 것을 가지고 :3D 메쉬 2D 평면
을하지만 내 메쉬를 회전 할 때, 그것은 다음과 같이 :
내 코드입니다 :이
은 어떻게해야입니다SDL_Event event;
while (SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_KEYDOWN:
switch(event.key.keysym.sym)
{
case SDLK_a:
Model = glm::rotate(Model, 0.1f,
glm::vec3(0.0f, 1.0f, 0.0f));
case SDLK_d:
Model = glm::rotate(Model, 0.1f,
glm::vec3(0.0f, -1.0f, 0.0f));
break;
}
break;
}
}
mvp = Projection * View * Model;
수직 쉐이더 :
// Generate MVP matrix.
glm::mat4 Projection = glm::perspective(glm::radians(45.0f),
4.0f/3.0f, 0.1f, 100.0f);
glm::mat4 View = glm::lookAt(glm::vec3(4,0,4),
glm::vec3(0,0,0),
glm::vec3(0,0,1));
glm::mat4 Model = glm::mat4(1.0f);
glm::mat4 mvp = Projection * View * Model;
GLint matrixId = glGetUniformLocation(shader.getProgramId(), "MVP");
// Generate VBO and VAO.
float triangleVertices[] = {
-0.5f, -0.5f, 0.0f, 1.0f,
0.5f, 0.5f, 0.0f, 1.0f,
0.5f, -0.5f, 0.0f, 1.0f,
1.0f, 1.0f, 0.0f, 1.0f,
1.0f, -1.0f, 0.0f, 1.0f,
1.0f, -1.0f, 1.0f, 1.0f,
};
uint un_vertecesNum = sizeof(triangleVertices);
GLuint vbo;
glGenBuffers(1, &triangleBufferObject);
GLuint vao;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, vertecesNum,
triangleVertices, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
// Begin main loop.
// Event handling here (Look for code below)
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
shader.Use();
glUniformMatrix4fv(matrixId, 1, GL_FALSE, &mvp[0][0]);
// Mesh display stuff.
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);
glDrawArrays(GL_TRIANGLES, 0, un_vertecesNum);
glDisableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
shader.UnUse();
SDL_GL_SwapWindow(win);
// End main loop.
여기에 이벤트 핸들이 있고 난 내 메쉬를 회전하는 방법 :
#version 130
uniform mat4 MVP;
attribute vec4 coord4d;
void main(void)
{
vec4 temp = vec4(coord4d);
gl_Position = temp*(MVP);
}
파편 쉐이더 :
내가, 그것을 구글려고 "전형적인 실수에 대해 뭔가를 읽어 여기에
#version 130
void main(void)
{
gl_FragColor[0] = gl_FragCoord.x/640.0;
gl_FragColor[1] = 0.2;
gl_FragColor[2] = gl_FragCoord.y/480.0;
gl_FragColor[3] = 1.0f;
}
수잔 당신이 궁금해하는 경우처럼 보이게하는 방법입니다 "페이지 또는 stackoverflow 찾을 수 있지만 아무것도.
vertex shader가 'MVP * temp'가 아니어야합니까? –
@willywonkadailyblah가 맞습니다. 또한,'gl_Position = MVP * coord4d;'를'temp' 변수없이 쓸 수도 있습니다. –
내 하나님 ... 그 해결책은 아주 간단했습니다. @willywonkadailyblah, 제발, 답변에 귀하의 의견을 써주세요, 그래서 나는 그것을 올바른 것으로 표시 할 수 있습니다. –