簡體   English   中英

OpenGL / GLSL / GLM-Skybox旋轉就像在第三人稱中一樣

[英]OpenGL/GLSL/GLM - Skybox rotates as if in 3rd person

我剛開始實現天空盒,並且使用OpenGL / GLSL和GLM作為我的數學庫來實現。 我認為問題與矩陣有關,並且我無法找到利用GLM庫的實現:

天空盒的模型可以很好地加載,但是相機會對其進行環繞,就像它在3d第三人稱相機中圍繞它旋轉一樣。

對於我的Skybox矩陣,每次相機更新時都會對其進行更新。 因為我使用glm :: lookAt,所以它的創建方式與我的視圖矩陣基本相同,除了我將0、0、0用作方向。

這是我的視圖矩陣創建。 它可以很好地渲染對象和幾何體:

direction = glm::vec3(cos(anglePitch) * sin(angleYaw), sin(anglePitch), cos(anglePitch) * cos(angleYaw));
right = glm::vec3(sin(angleYaw - 3.14f/2.0f), 0, cos(angleYaw - 3.14f/2.0f));
up = glm::cross(right, direction);
glm::mat4 viewMatrix = glm::lookAt(position, position+direction, up);

類似地,我的天空矩陣是通過相同的方式創建的,只有一個更改:

glm::vec3 position = glm::vec3(0.0f, 0.0f, 0.0f);
glm::mat4 skyView = glm::lookAt(position, position + direction, up);

我知道Skybox不會應用翻譯,而只會考慮旋轉,因此我不確定問題出在哪里。 有沒有更簡單的方法可以做到這一點?

視覺輔助:

繼續前進,沒有任何動靜 當我第一次啟動程序時直接

當我旋轉相機時: 在此處輸入圖片說明

我的問題是:如何使用glm:lookAt設置正確的矩陣以渲染天空盒?

Esthete是正確的skybox / skydome是僅表示不更改投影矩陣的對象!

您的渲染應該是這樣的:

  1. 清除屏幕/緩沖區
  2. 設置相機
  3. 將modelview設置為identity,然后將其轉換為相機的位置,您可以直接從投影矩陣獲取位置(如果我的內存位於數組位置12,13,14)以獲取矩陣,請參見此https://stackoverflow.com/a / 18039707/2521214
  4. 繪制天空盒/天空穹頂(請勿越過z_far平面,或禁用深度測試)
  5. 可選的清除Z緩沖區或重新啟用深度測試
  6. 繪制場景圖....(不要忘記為每個繪制的模型設置modelview矩陣)

當然,您可以將攝像機位置(投影矩陣)臨時設置為(0,0,0)並保留具有相同標識的modelview矩陣,這有時是更精確的方法,但不要忘記在繪制天窗之后重新設置攝像機位置。

希望能幫助到你。

暫無
暫無

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

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