今天起本站將推出ios-opengles基礎教程,當然本人也是一面自學一面將學習中所用到的和學到的東西一併分享給大家,在本教程中,本人會對**進行逐行的注釋講解,資源來自於網路和書籍的整合,如在教程中有錯誤的地方,希望大家及時指正,可隨時傳送郵件到[email protected] 與本人取得聯絡,多謝。
下面進入正題:
opengl 資料型別
首先我們要討論的是opengl的資料型別。因為opengl是乙個跨平台的api,資料類 型的大小會隨使用的程式語言以及處理器(64位,32 位,16位)等的不同而不同,所 以opengl定義了自己的資料型別。當傳遞資料到opengl時,你應該堅持使用這些 opengl的資料型別,從而保證 傳遞資料的尺寸和精度正確。不這樣做的後果是可能 會導致無法預料的結果或由於執行時的資料轉換造成效率低下。不論平台或語言實現 的opengl都採用這種 方式定義資料型別以保證在各平台上資料的尺寸一致,並使平 台間opengl**移植更為容易。
下面是opengl的各種資料型別:
glenum:用於gl列舉的無符號整型。通常用於通知opengl由指標傳遞的儲存 於陣列中資料的型別(例如,gl_floa t用於指示陣列由glfloat組成)。
glboolean:用於單布林值。opengles還定義了其自己的「真」和「假」值 (gl_true和gl_false)以避免平台和語言的差別。當向opengl傳遞布林 值時,請使用這些值而不是 使用yes或no(儘管由於它們的定義實際沒有區 別,即使你不小心使用了yes或no。但是,使用gl-定義值是乙個好的習 慣。)
glbitfield:用於將多個布林值(最多32個)打包到單個使用位操作變數的四 位元組整型。我們將在第一次使用位域變數時詳細介紹,請參閱 wikipedia
glbyte:有符號單位元組整型,包含數值從-128到127
glshort:有符號雙位元組整型,包含數值從−32,768到32,767
glint:有符號四位元組整型,包含數值從−2,147,483,648到2,147,483,647
glsizei:有符號四位元組整型,用於代表資料的尺寸(位元組),類似於c中的
size_t
glubyte:無符號單位元組整型,包含數值從0到255。
glushort:無符號雙位元組整型,包含數值從0到65,535
gluint:無符號四位元組整型,包含數值從0到4,294,967,295
glfloat:四位元組精度ieee754-1985浮點數
glclampf:這也是四位元組精度浮點數,但opengl使用glclampf特別表示數值
為0.0 到 1.0
glvoid:void值用於指示乙個函式沒有返回值,或沒有引數
glfixed:定點數使用整型數儲存實數。由於大部分計算機處理器在處理整型
數比處理浮點數快很多,這通常是對3d系統的優化方式。但因為iphone具有用
於浮點運算的向量處理器,我們將不討論定點運算或glfixed資料型別。
glclampx:另一種定點型,用於使用定點運算來表示0.0到1.0之間的實數。正
如glfixed,我們不會討論或使用它。
opengl es (至少iphone目前所使用的版本)不支援8位元組(64位)資料型別,如long 或double。opengl 其實具有這些大型資料型別,但考慮到大部分嵌入式裝置螢幕尺寸 以及可能為它們所寫的程式型別而且使用它們有可能對效能造成不利的影響,最後的 決定是在 opengl es中排除這些資料型別。
點或頂點
3d影象的最小單位稱為 點(point) 或者 頂點vertex。它們代表三維空間中的乙個點 並用來建造更複雜的物體。多邊形就是由點構成,而物體是由多個多邊形組成。儘管 通常opengl支援多種多邊形,但opengl es只支援三邊形(即三角形)。
如果你回憶高中學過的幾何學,你可能會記得所謂笛卡爾座標。 基本概念是在空間中 任選一點,稱作原點。 然後你可以通過參照原點並使用****三維的數值指定空間 中的任意一點,座標是由三個想象的通過原點線表示的。從左至右的想象直線叫x- 軸。沿著x-軸從 左至右數值變大,向左移動數值變小。原點左方x為負值,右邊為正 值。另外兩軸同理。沿y軸向上,y值增加,向下y值減小。原點上方y為正,原點下方 為負。 對於z軸,當物體離開觀察者,數值變小,向觀察者移動(或超出觀察者), 數值變大。原點前方z值為正,原點之後為負。下圖幫助說明了這一點:
上面使摘自網路的一些文件,下面說下在ios中的具體使用方法;
筆者使用的xcode版本為4.3.2
openglrenderview.h中的**如下:
//
// openglrenderview.h
// thegametwo
//// created by helmsman soft on 12-6-7.//
#import
#import
#import
#import
@inte***ce openglrenderview : uiview
@property
(nonatomic, retain) caeagllayer *eagllayer;
@property
(nonatomic, retain) eaglcontext *context;
@property
(nonatomic, assign) gluint colorrenderbuffer;
@property
(nonatomic, assign) gluint positionslot;
@property
(nonatomic, assign) gluint colorslot;
@end
openglrenderview.m中的**如下:
//
// openglrenderview.m
// thegametwo
//// created by helmsman soft on 12-6-7.//
#import "openglrenderview.h"-(
id)initwithframe:
(cgrect)frame
return self;
}/*重寫layerclass方法,預設位[calayer class],重寫後此方法告訴uiview這個檢視的主要層是caeagllayer,caeagllayer是最終渲染opengl的地方,如果沒有此層就無法渲染opengl,此層非常重要。*/+(
class
)layerclass-(
void
)setuplayer
//初始化上下文環境-(
void
)setupcontextif(
![eaglcontext setcurrentcontext:_context]);
}/*建立渲染緩衝區*/-(
void
)setuprenderbuffer
/*建立幀緩衝區*/-(
void
)setupframebuffer-(
void
)render
上面的**中已經加了詳細的注釋說明,這裡就不多介紹了。**大部分類源於網路,這裡加了詳細的注釋,希望對學習者有所幫助。
上面的**實現了在螢幕上渲染出單一顏色的功能,主要是清屏**實現。
XSL基礎教程
xsl基礎教程 一 http www 128.ibm.com developerworks cn xml ccidnet xslfund index1.html xsl基礎教程 二 http www.ibm.com developerworks cn xml ccidnet xslfund inde...
ps基礎教程
ps基礎教程 軟體簡介 推薦版本 流行多用的版本cs2 cs5,推薦cs3和cs5,cs2版本較舊,不推薦使用。基礎教學目錄 第一課 photoshop工具欄的使用01 第二課 工具欄的使用02 第三課 photoshop圖層 第四課 色彩原理和圖層的混合模式 第五課 圖層的樣式 第六課 圖層蒙版和...
php基礎教程
本教程旨在以最簡單 最易懂的方式,讓讀者對php有個整體上的把握和了解,並具備基本的php程式設計能力。本教程並不講環境搭建和一些技術竅門,但會提供一些示例,方便讀者理解概念。php可以用來作 和手機應用的伺服器介面,很多大型公司的 再用php做。php可以給手機應用提供伺服器介面。以.php結尾的...