我想渲染到立方體貼圖。正在渲染的場景是一個地形。 我使用緯度經度調試顯示來查看某個立方體貼圖中的內容。 左下角的兩個調試視圖是虛擬立方體貼圖,只顯示實際圖片的方向和一個立方體貼圖。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我已經編輯了更多的答案。 –