2017-04-11 76 views
0

我有一個天空盒,發現它不可能在它內部移動(只是旋轉,而不是靠近它內部的人,這是不是縮放,它正是運動),作爲寫在本教程https://learnopengl.com/#!Advanced-OpenGL/Cubemaps。只要我爲相機啓用翻譯,天空盒變得相當醜陋,角落和四面都可見,所以移動相機並同時移動天空盒的想法並不是很好。什麼是合適的解決方案?我認爲這是一個相當明顯的問題,但我無法在任何地方找到解決方案。或者,也許我需要使用另一種結構,而不是用於此目的的天空盒。 enter image description hereOpenGL-移動相機內的天空盒

enter image description here

這裏有兩種狀態 - 第一個被啓用時翻譯我得到。我希望在第二個圖像中靠近山脈。

+0

很多事情都可能出錯。沒有至少看到截圖就很難提供幫助。 – jimvonmoon

+0

@jimvonmoon @jimvonmoon,我已經下載了圖片,代碼本身相當大,並且它大部分與教程 –

+0

一樣,在天空盒中移動,會有點失敗天空盒的整體目的。關於也是預期行爲的教程。 – Vallentin

回答

0

儘管這個問題已經過去幾年了,但是對於這個問題的解決方案是,您必須設置視圖矩陣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); 
... 

您必須將它應用到了需要一個視圖矩陣中的每個着色器程序的統一前啓動着色器後更新的視圖。