OpenGL 튜토리얼을 따르고 있습니다. 튜토리얼 4에서는 OpenGL에 두 개의 "객체"를 전송하기 위해 사이드 "프로젝트"로 제안했으며 저자는 하나만 렌더링했습니다 전에 개체. 구체적으로 그는 다음과 같이 질문합니다.다중 모델뷰 행렬
우리는이 같은큐브와 삼각형을 다른 위치에 그립니다. 메인 루프에서 2 회 그리기 호출을하려면 2 개의 MVP 행렬을 생성해야하지만 1 개의 셰이더 만 필요합니다.
MVP
행렬을 정의
GLuint MatrixID = glGetUniformLocation(programID, "MVP");
glm::mat4 Projection = glm::perspective(90.0f, 4.0f/3.0f, 0.1f, 100.0f);
// Camera matrix
glm::mat4 View = glm::lookAt(
glm::vec3(0,0,3), // Camera is at (4,3,3), in World Space
glm::vec3(0,0,0), // and looks at the origin
glm::vec3(0,1,0) // Head is up (set to 0,-1,0 to look upside-down)
);
glm::mat4 Model = glm::mat4(1.0f);
glm::mat4 MVP = Projection * View * Model;
는 지금은 하나의 MVP 행렬은 개체 당 사용되는 것으로 알고 있습니다. 하지만 몇 가지 질문이 있습니다.
각 개체에 대해 MVP 행렬을 어떻게 만듭니 까? 모든 개체에 대해보기 및 모델 행렬을 다시 만들어야합니까 (IE는 각 개체에 대해 새 개체 지정)?
나는
glm::lookAt
이 "카메라"종류로 사용되었다고 생각했기 때문에 각 객체에 대해 새로운 "카메라"를 만들지 않아도됩니다.Model
매트릭스는 무엇을합니까? 저자는 지금은 단위 행렬이라고 말하지만, 100을 말하도록 바꾸면 아무 일도 일어나지 않습니다! 나는Model
행렬이 모델이 렌더링 된 곳을 정의한 행렬이라고 생각했지만View
행렬을 수정하지 않고 모델이 렌더링 된 위치를 변경할 수는 없습니다.