為iphone建立乙個opengl es的xcode專案是很容易的事,特別是在蘋果公司的sdk發布時引入了模板的概念後。我們所需要做的只是在適當的地方快速而簡單的加入**。這就是我們今天的主題。
好,我們假定你肯能以前已經在哪看過這個模板或執行過用這個模板建立的專案。我們說要做的就是移除那個旋轉的彩色正方形的有關**並將其轉換成使用深度緩衝的檢視(即使其成為「真正的」3d)。
這叫做正交投影。本教程系列的目標是帶你進入3d世界。所以我現在不會討論正交投影;可能稍後的系列會有提及。現在我們直接向3d世界進發吧。
允許depth buffer(深度快取)
在編輯器中開啟eaglview.m找到下面**:
1
#define use_depth_buffer 0
現在我們需要啟用深度來測試opengl。我們要建立乙個新方法,它只會被呼叫一次以使檢視正常工作。首先,建立乙個新方法setupview並將下面**加入新方法中:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 -(
void
)setupview
上述**通過建立乙個對映到世界顯示的視區設定了opengl操作的環境。我將稍後詳細說明,現在注意下面**:
1
glenable
(gl_depth_test
);此**啟用了opengl中的深度測試。你需要記住在opengl中一旦你啟用了什麼,你一定要記住在你不需要時要關閉它。由於我們啟用深度測試並沒有關閉,所以在檢視設定中仍然有效。
1
glclearcolor(
0.0f,
0.0f,
0.0f,
1.0f);
我們在此定義了清屏時所用的顏色。opengles中所有顏色都必須是rgba值(即紅,綠,藍和alpha),而不能像opengl一樣採用rgb值。由於opengles已經知道清屏時採用的顏色,所以清屏時使用定義的黑色。此設定一直保持到我們改變它。
當使用浮點時,顏色值為0->1,而使用無符號位元組型別時,可為0->255。數值越大,所代表顏色的密度越高。
好,回到檔案最開始我們先前改變的#define處。我們要在這定義乙個巨集,在我們剛插入的setupview方法中需要用到。
1
2
3
#define use_depth_buffer 1
#define degrees_to_radians(__angle) ((__angle) / 180.0 * m_pi)
首先,刪除一切,加入下面**:
1
2
3
4
5
6
7
8 -(
void
) drawview
上面**的前三行是設定作圖空間。後兩行是將作圖空間與當前螢幕可見空間進行交換。如果你以前進行過動畫或遊戲程式設計工作,那麼你應該知道這叫做 「doublebuffered(雙重緩衝)」。
如果不知道,我們解釋下:我們建立了兩個完全相同的緩衝,乙個用於顯示給使用者,另乙個被清理掉然後在其上繪圖。在繪製結束後,我們交換這兩個檢視以便使用者看到新的檢視。我們之所以不拍麻煩做了這麼多事情是為了動畫更為平滑。
我們還要加入更多的**。
首先,在dealloc方法前插入以下**:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 -(
void
)checkglerror
:(bool
)visiblecheck
break;
default
:nslog
(@"unknown gl error"
);
break;
} opengl有一套錯誤檢查的方法(glgeterror()),但是需要將錯誤碼轉換成更容易讀的格式。上面的**就是完成這個工作的。
布林值「visiblecheck」只用於檢查當沒有錯誤時此方法是否已被呼叫。
最後,我們要做的只是在eaglview.m中找到initwithcoder方法並呼叫「setupview」方法。在變數「animationinterval」設定之前,加入下面**呼叫setupview:
1
[self setupview
];應注意我們只是呼叫在initwithcoder中setupview方法而不是建立乙個新方法,它只應該被呼叫一次。
下面,開啟eaglview.h!
我們只需要在這裡加入兩個方法的原型:
1
2
3 -(
void
)setupview;
-(void
)checkglerror
:(bool
)visiblecheck;
教程到此結束。
如果你此時按「build and run」,那麼在simulator(模擬器)上只是顯示乙個空白螢幕。在下乙個教程中,我們將在螢幕上繪製一下基本圖形,基本圖形是指點,線和三角形之類的元素。
OpenGL ES系列之0 建立Xcode專案
為iphone建立乙個opengl es的xcode專案是很容易的事,特別是在蘋果公司的sdk發布時引入了模板的概念後。我們所需要做的只是在適當的地方快速而簡單的加入 這就是我們今天的主題。圖1好,我們假定你肯能以前已經在哪看過這個模板或執行過用這個模板建立的專案。我們說要做的就是移除那個旋轉的彩色...
OpenGL ES系列之0 建立Xcode專案
為iphone建立乙個opengl es的xcode專案是很容易的事,特別是在蘋果公司的sdk發布時引入了模板的概念後。我們所需要做的只是在適當的地方快速而簡單的加入 這就是我們今天的主題。好,我們假定你肯能以前已經在哪看過這個模板或執行過用這個模板建立的專案。我們說要做的就是移除那個旋轉的彩色正方...
《C 0x漫談》系列
05年開始關注c 0x,其時c 0x的大部分草案其實都已經初具雛形。但幾個重大的特性 concepts,rvalue,memory model,variadic templates等都還在激烈的動盪當中。於是一路看著這些特性不斷成長,不斷出revisions。其間也跟標準委員會中的一些大牛們,如pe...