利用OpenGL模擬太陽系

2021-10-05 08:34:22 字數 1891 閱讀 7214

1、了解opengl程式設計,並熟悉opengl的主要功能、繪製流程和基本語法,學會配置opengl壞境,並在該環境中程式設計繪圖;

2、利用所學知識(如圓等基本圖形的繪製,平移、旋轉等三維幾何變換,透視投影,三維觀察,消隱等),模擬乙個動畫實體或場景;

3、學會呼叫opengl庫中的函式,形成用opengl實現預期功能、解決問題的思路,對平時所學知識進行實踐,達到融會貫通。

程式分在5個函式中實現:

1、initial()

在該函式中,主要通過呼叫glclearcolor(),實現對背景的設定。為了模擬宇宙,達到更好的視覺效果,將背景設定為黑色。

2、changesize()

在該函式中主要實現對視區的設定。通過呼叫glviewport()函式,對視區尺寸進行設定。通過呼叫gluperspective()函式,對透視投影的觀察空間進行設定,後期執行時,可根據實際情況隨時調整,以達到更好的效果。

3、display()

該函式是最為重要的函式,大部分功能均在此函式中實現。

首先,通過呼叫gltranslatef()函式,使初始位置沿z軸負向移動一段距離。

然後,呼叫glcolor3f()函式,選擇太陽的顏色。呼叫glutsolidsphere()函式,繪製太陽。繪製完成後,呼叫glpushmatrix()函式,儲存當前的模型檢視矩陣。

之後,由里向外繪製八大行星的公轉軌道。呼叫glcolor3f()函式,選定軌道的顏色。呼叫glsolidtorus()函式,依次改變半徑,繪出軌道。

再後,依次從裡向外依次繪製水星、金星、地球、火星、木星、土星、天王星、海王星。呼叫glpopmatrix()函式,恢復模型檢視矩陣。呼叫glpushmatrix()函式,儲存當前的模型檢視矩陣。呼叫glcolor3f()函式,選擇行星的顏色。呼叫glrotatef()函式,使行星繞z軸旋轉一定的角度,即達到公轉效果。(公轉速度滿足離太陽越遠,速度越慢的定性規律。)呼叫gltranslatef()函式,平移一段距離,到達該行星的預定軌道。呼叫glrotatef()函式,使行星自轉。(金星的自轉方向與其他行星不同,加以區分。)呼叫glutsolidsphere()函式,繪製行星。(使得各行星大小,符合定性規律。)同時,對函式glrotatef()中的引數felect進行迴圈處理, 增加旋轉步長,產生動畫效果。

其中,在繪製地球之後,繪製火星之前,進行月球的繪製。月球的繪製與上述行星的繪製過程基本相同。不過,因為月球是以地球為中心公轉,故無需呼叫glpushmatrix()函式。

最後,呼叫glutswapbuffers()函式,交換緩衝區,將已渲染好的效果拿出來實現。

4、timerfunc()

在該函式中,主要通過呼叫gluttimerfunc()函式,實現對畫面的不斷重新整理,以達到動畫的效果。

5、main()

在主函式中,對上述函式進行呼叫,使程式按期望的效果執行。同時,通過呼叫glutinitdisplaymode()函式,設定視窗使用rgb顏色、雙快取和深度快取。通過呼叫glutcreatewindow()函式,設定執行視窗上顯示的標題。

利用CSS模擬太陽系運轉

display flex 屬性規定元素應該生成的框的型別。justify content center align items center position relative 屬性指定乙個元素 靜態的,相對的,絕對或固定 的定位方法的型別。值 生成相對定位的元素,相對於其正常位置進行定位。path...

太陽系相關知識

太陽系是由受太陽引力約束的天體組成的系統,它的最大範圍約可延伸到1光年以外。太陽系的主要成員有 太陽 恆星 九大行星 包括地球 無數小行星 眾多衛星 包括月亮 還有彗星 流星體以及大量塵埃物質和稀 薄的氣態物質.在太陽系中,太陽的質量佔太陽系總質量的99.8 其它天體的總和不到有太陽的0.2 太陽是...

canvas繪製太陽系

學習canvas有一段時間了,順便寫個小專案練手,該專案用到的知識點包括 es6物件導向 基本的三角函式 canvas部分有 座標變換,漸變,混合模式,線條和圖形的繪製。實際效果 solar system 推薦在chrome或safari下執行 首先建立場景類,主要用來組織管理物件,統一更新和繪製物...