儘管這個問題已經過去幾年了,但是對於這個問題的解決方案是,您必須設置視圖矩陣AFTER您「使用」着色器的天空盒。你不能只在你的循環中設置一次視圖矩陣,並期望與所有具有統一視圖的着色器一起工作。
所以問題是,OP具有這樣的基礎上,主循環中的教程:
glm::mat4 view = mCamera.GetViewMatrix();
glDepthFunc(GL_LEQUAL);
mSkyboxShader.Use();
mSkyboxShader.SetMat4("view", view);
mSkyboxShader.SetMat4("projection", projection);
mSkybox.Render(mSkyboxTexture);
glDepthFunc(GL_LESS);
不管代碼,這會將您的天空盒像任何其他對象,您可以移動到。該解決方案是:
glm::mat4 view = mCamera.GetViewMatrix();
glDepthFunc(GL_LEQUAL);
mSkyboxShader.Use();
view = mCamera.GetViewMatrix(); <----Solution
mSkyboxShader.SetMat4("view", view);
...
您必須將它應用到了需要一個視圖矩陣中的每個着色器程序的統一前啓動着色器後更新的視圖。
很多事情都可能出錯。沒有至少看到截圖就很難提供幫助。 – jimvonmoon
@jimvonmoon @jimvonmoon,我已經下載了圖片,代碼本身相當大,並且它大部分與教程 –
一樣,在天空盒中移動,會有點失敗天空盒的整體目的。關於也是預期行爲的教程。 – Vallentin