我不太確定我應該如何使用openGL進行移動。我將如何去在3D環境中移動,openGL C++
我應該在3D世界中移動相機的位置,還是移動/平移相機周圍的物體?
我在網上看到相機應該停留在原點,其他所有東西都應該圍繞相機移動,但是這不會是一種密集的操作嗎?就像我有1000個對象並且正在移動一樣,我們必須移動所有這些對象。移動相機並將世界物體保持在何處不是更容易?
我不太確定我應該如何使用openGL進行移動。我將如何去在3D環境中移動,openGL C++
我應該在3D世界中移動相機的位置,還是移動/平移相機周圍的物體?
我在網上看到相機應該停留在原點,其他所有東西都應該圍繞相機移動,但是這不會是一種密集的操作嗎?就像我有1000個對象並且正在移動一樣,我們必須移動所有這些對象。移動相機並將世界物體保持在何處不是更容易?
從概念上講,OpenGL的工作方式是攝像機始終位於中心,Y軸向上,Z軸向前。如果你想移動或旋轉攝像頭,你實際上以相反的方式移動其他所有東西。
這與Direct3D相反,例如,您有一個單獨的相機矩陣。
這是一個小細節,雖然從數學上講它們是完全一樣的。無論您前進還是後退,相同的最終結果都是如此。你甚至可以爭辯說,只有一個矩陣而不是兩個矩陣相乘並乘以它們是性能增益,但它非常小,通常你會將相機矩陣與世界建築矩陣分開。
在Opengl中,相機始終位於眼睛空間座標(0.,0,0,0)處。爲了給移動攝像頭的外觀,你的OpenGL應用程序必須用相機轉換的反轉來移動場景。
您無需擔心在場景中移動/翻譯物體。 gluLookAt()
函數爲你做。該函數根據參數計算逆相機變換,並將其乘以當前矩陣堆棧。