Я пытаюсь сделать куб. Сцена, которая визуализируется, является ландшафтом. Я использую отображение отладки долготы долготы, чтобы увидеть, что находится в определенном файле cubemap. Два вида отладки в левом нижнем углу - это фиктивная карта куба, которая показывает только направления и одну карту куба с реальными изображениями.OpenGL рендеринга для cubemap
Отладочный вид в нижней нижней половине снизу показывает, что я получаю в виде куба, который мне нужен.
Я пробовал много разных комбинаций для настройки камеры, но ни один из них не дал никаких логических результатов. Я также сравнил код с несколькими образцами для реализации динамического cubemap, и я все еще не мог определить проблему. У меня нет идей, что даже попробовать дальше, поэтому любая помощь или предложение приветствуются.
Розыгрыш для cubemap функции:
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' - только заголовок, поэтому вы можете легко исправить его самостоятельно, а не« запрашивать исправление ». 'перспектива' - это в значительной степени копия' gluPerspective' 1: 1, которая является ужасно простой функцией, поэтому я немного недоумеваю, как может быть ошибка. –
Глядя на значение 'p [2] [2]', я подозреваю, что вы, возможно, не знаете, что ось z указывает на камеру, а не на нее. Ось оси идет вправо, ось y идет вверх, поэтому, если система координат должна быть правой, ось z должна указывать на камеру. Однако ваша матрица имеет отрицательный детерминант, что неверно. –
@AndreasHaferburg Я отредактировал ответ еще больше. –