OpenGL 簡易太陽系類比 總結

來源:互聯網
上載者:User

        出於某種本人自己也不清楚的原因,我對C++有一種莫名的親切感,總是有想要使用C++完成編程任務的衝動, 不過我實在是不喜歡總是在控制台的黑框裡面輸入輸出, 而MFC我暫時又搞不清楚運行機制,一上來就是一大串已經完成的檔案,看著暈, OpenGL就比較符合需要了, 而且還有一個glut可以協助在控制台下實現簡易表單, 作為簡單使用來講完全夠用了,複雜使用就以後再說吧。

        本人完全是初學,參照著《OpenGL入門教程》這份檔案以及網路上的一些參考算是湊活著完成了這個簡易太陽系模型。(這裡要感謝這份教程的製作者以及分享者了,我感覺寫的相當好,網上有下載,我是從百度文庫弄來的,自己也傳了一份到資源)為啥是太陽系模型呢。因為我挺喜歡這個的,而且很多人都做了這個,實在搞不懂了,還是有一份代碼可以學習的。閑話不多說了,先上一張效果圖:

然後直接開始做,任何項目的起步應該是需求分析,這個需求很簡單,就是在螢幕上顯示一個看著像太陽系的模型,看著像就行了,真要搞一個精確的太陽系模型費時費力又沒人給錢,也不適合我這類初學者。然後是設計階段,作為物件導向編程,先找對象,太陽系中的八大行星以及太陽本身,為了看起來更漂亮點,軌道也要繪製出來,所以對象有兩個,所有對象都要實現一個draw方法,用於繪製自身,設計一個myObj父類可以方便的完成繪製工作,我認為既然每一個軌道都歸於某一個星體,那麼軌道可以作為星體的私人屬性,這應該算是一個依賴關係吧。類圖如下:


        星體Aster的基本資料包括星體半徑radius,公轉周期revolution_solar,自轉周期revolution_self,軌道orbit,以及公轉半徑distance。軌道Orbit只有一個半徑屬性。還有一些在具體實現中定義的輔助屬性,就不列在類圖裡了。

        有了類圖,就可以進入編碼階段,首先需要配置開發環境,我是用的是vs2010,開發使用的是OpenGL,下載地址百度Google都行,我不記得當初的下載地址了,傳了一份到資源裡面。教程裡面說要整合開發庫到vs裡面,不過我不太喜歡這樣,不經常使用的話沒必要改變整個開發環境,只要設定單個項目就好了,.dll檔案儲存到產生的運行檔案處,.h檔案儲存到專案檔夾下,.lib檔案在代碼中載入的時候應該可以使用相對路徑,不過我暫時不清楚基路徑在哪裡,所以選擇了設定項目的屬性,具體做法是:

在solution explorer裡面右擊項目名稱,選擇properties->Linker->General, 在Additional LibraryDirectories裡面加入lib檔案儲存的絕對路徑就可以了。載入lib檔案使用的是#pragma comment(lib,檔案名稱)。

        在教程裡面有很多例子,而且各知識點寫的也很清楚,就不贅述了。裡面我遇到的一點問題是在第五課實現日地月系統時,如果使用教程裡面給的參數,在視窗中是什麼也看不到的,但是如果我將參數統一縮小到十倍,就可以正常顯示了,雖然我搜了一些座標變換的文章,但是目前還是不知道為什麼會出現這個問題,按理來說如果等比例縮放不應該出現不同結果吧。難道OpenGL不接受過大的參數。

        稍微說一下關於gluLookAt函數的問題,可能是我個人的問題吧,在理解這個函數的時候稍微有點費力,這個函數有九個參數,分為三組,第一組是關於視點的移動,視點最初都是在(0,0,0)點的,如果進行了透視投影變換之後不進行座標移動,那麼繪製的映像就會出現在視點所在的位置,類似於有人把東西放在自己眼前,後面的東西就都看不到了,當然可以通過先移動座標,然後繪製物體的方案來解決,但是gluLookAt的優勢在於開發人員不必去計算每一個物體的位置,單純通過這個函數就可以實現任意角度的觀察。 如果只是在xyz軸構成的平面上繪製的話當然無所謂了,但是比如想要以45或者75度角觀察整個系統呢。每一個物體的位置就不好計算了吧。我理解的這個函數的運行方式是,開發人員先將整個系統繪製在座標系中,然後再通過這個函數實現觀察角度的變化,由OpenGL自動計算各物體的相對位置。這個函數必須置於其他座標變化之前,我感覺它的執行順序卻是在整個系統繪製的最後。以上屬於不負責任的猜想,沒有任何理論支援,特此聲明。。。。。

額,說得有點遠了,第二組參數是視點觀察的中心點的座標,透視投影本身的視覺範圍是一個四稜錐,視點與中心點的連線就相當於從頂點到底面的垂線。

第三組參數表示正方向,就是說觀察者是怎麼看的,教程上說從(0,0,0)點到此點的連線確定正方向,比如如果設定為(0,1,0),就類似於人正常的觀看螢幕,(0,-1,0)就表示人在倒立著看螢幕,(0,0,-1)表示低頭看鍵盤,(0,0,1)表示從顯示器後面低頭看鍵盤。。。。。。

燈光方面與材質方面設定還有些問題,以後再說吧,整個項目已經上傳到資源,有需要的話請下載。

        說一點vs方面的事情,第一次建立項目時誤選了windows application, 可以在properties->Linker->system->subsystem裡面改成console。

        修改console程式的表徵圖可以選擇add resource->icon,只能使用.ico檔案,如果之前已有icon的話,系統會使用ID值較小的作為表徵圖,可以開啟resource.h,然後將自己的表徵圖ID值設為最小即可,開啟resource.h的方法是:先開啟.rc檔案(選擇view code),然後在include<resource.h>處選擇open document即可。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.