2014-04-06 13 views
0

我的問題很煩人,因爲我無法掌握如何修復它。DirectX 11,移動時的天空圓頂穹頂形狀

基本的想法是,我創建了一個成功呈現並隨相機位置移動的天空球體。天空球體的渲染是通過轉動Z緩衝完成的,然後再打開,天空的移動通過將其世界矩陣轉換爲攝像機位置值來完成。

當我將攝像機隱式移動真空長距離時,假設Deptz(Z)軸上的單位爲1000000.0f,天空球體開始改變其形狀......並且隨着距離變長,它會變得更糟......

我檢查了是否通過切換WIRE-FRAME來顯示紋理渲染,我可以看到基本上球體的多邊形正在變化。

任何人有一些想法?謝謝。

+1

您可能會遇到浮點精度問題。爲什麼不總是渲染你的天空圓頂,就好像你的相機在原點一樣?就翻譯而言,唯一重要的是圓頂與相機的相對位置,這是一個恆定的零。 – Trillian

+0

這是我最初的想法。我總是用相機位置來翻譯天體矩陣,正如你所說的那樣,浮點數可能會返回精確的數字,因此我的翻譯是混亂的。你的建議給了我一個關於我應該如何重做這一點的想法,儘管我想我會用保持相機中心位置和改變世界的舊時尚方式。謝謝。 – user3503828

回答

0

正如Trillian所說,你應該渲染一個相當小的天球,它總是圍繞着你的相機。該過程可能會是這個樣子:

  1. 清除你的顏色和深度緩衝
  2. 禁用深度緩衝寫入
  3. 使用相機的旋轉而不是平移的視圖矩陣
  4. 重新渲染你的天空穹頂 - 啓用深度緩衝寫入
  5. 渲染場景的其餘

這樣的天空永遠是落後的儘管只有很小的場景,但你永遠不會有走過天空的問題。

+0

謝謝你的建議。在我回復Trillian的時候,我的skydome的比例是1,保持在最小值。問題在於,我用相機位置值翻譯了圓頂的世界矩陣,以使圓頂保持在相機的中心位置。在非常大的值(相機位置)時,浮動開始出現一些精度問題(正如Trillian告訴我的),所以我採用老式的方式保持相機居中並圍繞它移動世界。謝謝。 – user3503828

-1

這個答案來自非數學家,非天文學家。你的問題純粹是平行的。根據我的繪畫經驗,我經常遇到這個問題。想象一下藝術家,當視角位於圓柱體之外時,在離基座一定距離處繪製圓柱線。圓柱體的頂部顯示爲橢圓形。視點越接近基座的中心,橢圓柱形頂部越呈圓形。將視角移到圓柱外部,直到與圓柱頂部完全相同的平面,然後圓柱頂部顯示爲一條直線。

因此,您在天空穹頂中看到的是線框多邊形的變化形狀,這是因爲您距離穹頂較近,使線框多邊形中的(虛擬)內切圓圈顯示爲橢圓形,和你的多邊形不規則而不是對稱的數字。你在圓頂上看到的不是錯誤,而是準確的渲染。恭喜。你的程序工作。唯一的困難是,我們的天空和你的天空穹頂之間的區別在於你將天空穹頂視爲一個堅實的球體,並且從中心到每個物體都有一個固定的距離。一個真正的天空視圖,真正的挑戰是將每個物體編程爲根據其在空間中的實際位置變化地遠離「中心」。試着用幾十個物體 - 比如行星 - 與地球有已知的距離,然後移動「攝像機」,即觀察周圍的空間,注意星座,行星軌道等的形狀是如何變化的。如果您將每個物體的距離設置得足夠大,那麼您的相機可以移動很多而不會失真。如果您保持堅固的圓頂概念,但與相機的移動距離相比,使圓頂的直徑變得很大,情況也是如此。

該評論被認爲是有幫助和思考的食物。實現?這取決於你自己的程序員和天文學家。祝你的項目好運。