큐브 맵에 렌더링하려고합니다. 렌더링되는 장면은 지형입니다. 위도 - 경도 디버그 표시를 사용하여 특정 큐브 맵에있는 내용을 확인합니다. 왼쪽 하단에있는 두 개의 디버그보기는 방향을 보여주는 더미 큐브 맵과 실제 그림이있는 큐브 맵입니다.큐브 맵에 OpenGL 렌더링
오른쪽 아래 절반의 디버그보기는 제가 뒤에서 큐브 맵에서 렌더링 한 것을 보여줍니다.
카메라를 설정하기 위해 여러 가지 조합을 시도했지만 그 중 아무 것도 논리적 인 결과를 제공하지 않았습니다. 또한 동적 큐브 맵을 구현하기 위해 코드를 여러 샘플과 비교해 보았지만 여전히 문제를 발견 할 수 없었습니다. 나도 다음에 시도해 볼 아이디어가 없으므로 도움이나 제안을 환영합니다. 행렬들 잘못했다
void Draw(GLuint cubemap, glm::ivec2 res, glm::vec3 position)
{
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glBindRenderbuffer(GL_RENDERBUFFER, rb);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, res.x, res.y);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rb);
// camera
glm::mat4 p = glm::perspective(90.0f, 1.0f, 0.01f, 10.0f);
glm::mat4 v;
glm::vec3 targets[6] = {
glm::vec3(+1.0f, 0.0f, 0.0f),
glm::vec3(-1.0f, 0.0f, 0.0f),
glm::vec3(0.0f, +1.0f, 0.0f),
glm::vec3(0.0f, -1.0f, 0.0f),
glm::vec3(0.0f, 0.0f, +1.0f),
glm::vec3(0.0f, 0.0f, -1.0f)
};
glm::vec3 ups[6] = {
glm::vec3(0.0f, 1.0f, 0.0f),
glm::vec3(0.0f, 1.0f, 0.0f),
glm::vec3(0.0f, 0.0f, 1.0f),
glm::vec3(0.0f, 0.0f, -1.0f),
glm::vec3(0.0f, 1.0f, 0.0f),
glm::vec3(0.0f, 1.0f, 0.0f)
};
// render
for (int i = 0; i < 6; i++)
{
glViewport(0, 0, res.x, res.y);
// setup target face
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, cubemap, 0);
// setup camera
v = glm::lookAt(position, position + targets[i], ups[i]);
// draw
DrawTerrain(terrain.heightmap, terrain.m, v, p); // model, view, projection matrices
}
glBindFramebuffer(GL_FRAMEBUFFER, 0);
}
음,'glm'은 헤더 전용이므로 "수정 요청 중"대신 쉽게 수정할 수 있습니다. 'perspective'는'gluPerspective'의 1 : 1 복사본입니다. 이것은 매우 단순한 함수입니다. 그래서 어떻게 버그가 될 수 있는지 약간 당황 스럽습니다. –
'p [2] [2]'값을 보면 z 축이 카메라를 향한 것이지 멀리 떨어지는 것을 알 수 없다고 생각됩니다. x 축은 오른쪽으로 이동하고 y 축은 위로 올라가므로 좌표계가 오른 손잡이 인 경우 z 축은 카메라를 향해야합니다. 그러나 행렬에는 부정적인 결정 요소가 있습니다. 이는 잘못된 것입니다. –
@AndreasHaferburg 답변을 더 자세히 편집했습니다. –