認識OpenFrameWorks的檔案夾
想要做的跨平台,那麼有個嚴謹的目錄結構,不過分吧
Openframeworks包含如下檔案夾:
addons、apps、examples、libs、export、projectGenerator-vs等等以及一些檔案
【建議先讀README.md,在這裡面有包含比較完整的檔案介紹】
examples檔案夾
這個檔案包含了幾乎所有方面的簡單例子,想要更深入的瞭解,還是有必要每個例子都看一下。簡單介紹一下
1、3d:這個例子介紹了基本的3D圖形學和3D數學函數的使用,包括光照以及各種效果
2、addons:這個檔案夾中包含各種各樣OF的拓展外掛程式,可以用來協助OF做更多好玩的東西
3、communication:這個檔案夾包含OF通過串口通訊和各種外設進行通訊。類似Arduino、樹莓派等等,大多數通過USB串口通訊
4、empty:這個檔案夾是一個空項目,是開始學習OF最簡單的工程,你可以通過拷貝它來開始你任何的OF項目
5、events:這個檔案夾用來示範OP各種內建的事件,比如按鍵、定時器等,當然也包含一些外部自訂的事件
6、gl:這個檔案夾包含了一些比較先進的二維和三維圖形學例子,比如 FBO(OpenGL幀緩衝對象(FBO:Frame Buffer Object)、VBO 和Shader
7、graphics:這個檔案夾示範了基本的二維圖形學的功能,比如載入圖片、旋轉縮放等等
8、gui:這個檔案夾將示範如何添加使用者圖形介面,比如按鈕、滑動條、複選框等
9、math:這個檔案夾示範了OF處理perlin雜訊(Perlin雜訊可以用來類比自然界中的雜訊現象。由於它的連續性,如果將二維雜訊中的一個軸作為時間軸,得到的就是一個連續變化的一維函數。同樣的也可以得到連續變化的二維映像。該雜訊可以用來類比人體的隨機運動,螞蟻行進的線路等)、簡單的粒子系統、以及適量數學的相關問題
10、sound:這個檔案夾講解了如何使用OF進行聲音的播放、處理以及錄製等相關問題
11、video:這個檔案夾介紹了OF如何播放視頻、處理每一幀視頻資料以及從相機中即時抓取視頻的操作
雖然這裡面的例子,在下面的講解中大部分我們都會講解到,但是還是強烈建議你運行一遍。一方面可以感受一下OF的魅力,另一方面也可以看看他是不是真的適合你進行開發。 app檔案夾
這個檔案是用來存放我們自己開發的工程的,你可以在這個檔案夾下建立你自己的檔案夾。這裡面已經包含了myApps檔案夾,你可以把建立的工程放到裡面,前期還是建議大家放到這裡面,畢竟這個裡面的路徑、連結庫都是處理好的。如果你建立到外面,可能在編譯時間候會有提示找不到庫檔案。
當然,這隻是對於新手來說的,如果你的編程能力比較強,建立到哪裡都沒問題。 addons檔案夾
這個檔案夾包含各種OF的外部擴充外掛程式,當你需要添加外部擴充外掛程式時候,你需要把外掛程式放到這個檔案夾中。這個在後面我們再進行討論。 工程中檔案夾的結構
每個OF工程的檔案夾都有相似的結構,我們以pointCloudExample這個工程為例。開啟檔案夾你可以看到
#bin檔案夾:這個檔案夾用來存放可執行檔(也可能是庫檔案,或者包含一些DLL,這個取決於你的系統)如果你編譯了這個工程,你會發現該檔案夾中有一個pointCloudExample_debug的可執行檔,其後的_debug就是你在工程中選擇的編譯偵錯模式,這個模式允許你設定斷點,進行逐步調試。
【斷點調試:指自己在程式的某一行設定一個斷點,調試時,程式運行到這一行就會停住,然後你可以一步一步往下調試,調試過程中可以看各個變數當前的值,出錯的話,調試到出錯的程式碼即顯示錯誤,停下】
項目在Debug模式下變異比較緩慢,所以如果你想項目變異的速度快一些,可以選擇Release模式下進行編譯。
同樣,在這個檔案夾下面,你會找到data檔案夾。這個檔案夾下面用來存放如下內容:圖片、視頻、xml檔案以及其他你的工程需要的檔案。OF的工程預設以這個檔案夾來載入或者存放資料。
#src檔案夾:這裡面用來存放我們需要的.h標頭檔.cpp源檔案,其中有OF預設的檔案,也可以包含我們自己寫的各種檔案
#其他項目:在windows下,VS開發中這裡面會包含.sln檔案以及其他相關用VS進行開啟的檔案,對我們沒什麼影響,這裡就不再解釋了。 項目代碼結構
我們要開始有趣的部分了。OF的項目,在src檔案夾中至少包含main.cpp,testApp.cpp和testApp.h這三個檔案夾
【注意:如果一個函數或者類以OF開頭,那說明它屬於Openframeworks或者OF的外掛程式,比如ofPoint, ofImage, and ofSetColor().比如ofxXmlSettings等等】 mian.cpp
在C++項目中,必須有一個.cpp檔案中定義了main()函數。這個函數是整個工程的起始點。在OF中main()包含紮mian.cpp中。這其中最重要的部分就是:
ofSetupOpenGL( &window, 1024, 768, OF_WINDOW );
這個函數ofSetOpenGL()告訴OF系統需要建立一個寬1024像素高768像素的虛擬螢幕,最後的OF_WINDOW意味著要以視窗的形式建立螢幕。如果你需要全屏,可以設定參數OF_FULLSCREEN,那麼這個項目就會全屏運行。
舉個例子,如果你需要你的項目以1920X1080像素全屏運行,你就可以修改這個函數為
ofSetupOpenGL( &window, 1920, 1080, OF_FULLSCREEN);
通常你沒有必要修改main.cpp檔案,因為螢幕尺寸解析度可以再testApp.cpp檔案中進行修改
【注意:在main()函數中,大多數的OF函數都不會起作用,因為路徑以及一些初始化還未完成。所以,最好還是不要動main.cpp檔案,把要做的工作在testApp.cpp中完成】 testApp.h
這個檔案以#pragma once 開頭,這是一條編譯器命令,意思是這個檔案應該在所有的.h檔案的最前面編譯。緊接著是#include "ofMain.h" 這個.h檔案包含了OF最核心的類和函數。之後申明了testApp類,繼承自OF的基類ofBaseApp:
#pragma once#include "ofMain.h"class ofApp : public ofBaseApp{public:void setup();void update();void draw();///...} 好 累,今天先寫到這吧。。。