簡體   English   中英

查看或透視矩陣搞亂剔除

[英]View or perspective matrices messing with culling

我這里的代碼幾乎可以正常工作,但它正在剔除正面而不是背面:

auto scaleMatrix = glm::scale(glm::mat4(1.0f), glm::fvec3(0.5f, 0.5f, 0.5f));
auto rotateMatrix = glm::rotate(glm::mat4(1.0f), glm::degrees(rotation), glm::fvec3{.0f, 1.f, 0.f});
auto modelMatrix = rotateMatrix * scaleMatrix;

int w, h;
glfwGetWindowSize(window, &w, &h);
auto perspectiveMatrix = glm::perspective(90.f, w/(float)h, .1f, 100.f);

auto viewMatrix = glm::lookAt(
        glm::vec3(-1, 0, -1),
        glm::vec3(0, 0, 0),
        glm::vec3(0, 1, 0)
        );

auto mvp = perspectiveMatrix * viewMatrix * modelMatrix;

glUniformMatrix4fv(gMVPLocation, 1, GL_FALSE, &mvp[0][0]);

如果我只將模型矩陣傳遞給着色器,則正確的面會剔除。 但是如果我傳遞MVP矩陣,則在渲染背面時會剔除正面。 不知道為什么會導致這個問題,但我的頂點是以ccw繞組順序定義的,如果我不使用視圖或透視矩陣,則工作完全正常。 我不知道為什么這在這里不起作用。

當您沒有任何變換(即直接在剪輯空間中提供坐標)和標准深度緩沖區時,您將擁有一個左手坐標系,其中z軸指向遠離查看器的位置。 通過應用具有正行列式的模型矩陣(如旋轉或正標度),您不會更改方向。

如果使用glm中的視圖投影矩陣,則會有一個右手坐標系,其中z軸指向觀察者。 因此,您的模型將恢復其方向。 為了解決這個問題,無論是恢復你的臉部的方向或設置你的正面使用的方向glFrontFace

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM