OpenGL ES _ 入門練習_002

[OpenGL ES _ 入門_01](http://www.reibang.com/p/f66906b27819)

[OpenGL ES _ 入門_02](http://www.reibang.com/p/dc49c946438e)

[OpenGL ES _ 入門_03](http://www.reibang.com/p/00b5be729e4b)

[OpenGL ES _ 入門_04](http://www.reibang.com/p/516b0b8be9d8)

[OpenGL ES _ 入門_05](http://www.reibang.com/p/08c51c298d47)

[OpenGL ES _ 入門練習_01](http://www.reibang.com/p/eebaf64e3e0a)

[OpenGL ES _ 入門練習_02](http://www.reibang.com/p/6155d60dab20)

[OpenGL ES _ 入門練習_03](http://www.reibang.com/p/36d9dac03345)

[OpenGL ES _ 入門練習_04](http://www.reibang.com/p/1ca30e9387dd)

[OpenGL ES _ 入門練習_05](http://www.reibang.com/p/ac9375962f34)

[OpenGL ES _ 入門練習_06](http://www.reibang.com/p/c63dc219f7a0)

[OpenGL ES _ 著色器 _ 介紹](http://www.reibang.com/p/309d489bc344)

[OpenGL ES _ 著色器 _ 程序](http://www.reibang.com/p/ed0c617bcd67)

[OpenGL ES _ 著色器 _ 語法](http://www.reibang.com/p/c5b89b294995)

[OpenGL ES_著色器_紋理圖像](http://www.reibang.com/p/8c0ad4e3e40f)

[OpenGL ES_著色器_預處理](http://www.reibang.com/p/5e9837b0b219)

[OpenGL ES_著色器_頂點著色器詳解](http://www.reibang.com/p/9d7dca6b70c7)

[OpenGL ES_著色器_片斷著色器詳解](http://www.reibang.com/p/55461927c419 )

[OpenGL ES_著色器_實戰(zhàn)01](http://www.reibang.com/p/18d6b37363c8)

[OpenGL ES_著色器_實戰(zhàn)02](http://www.reibang.com/p/45d959c8f1db)

[OpenGL ES_著色器_實戰(zhàn)03](http://www.reibang.com/p/0f740901da59)



演示效果:


學習目標:繪制一個旋轉移動的立方體

技術: OpenGL ES 1

實現思路:

第一步: 創(chuàng)建GLKViewController 控制器(在里面實現方法)

第二步: 創(chuàng)建EAGContext 跟蹤所有狀態(tài),命令和資源

第三步: 清除命令

第四步: 創(chuàng)建投影坐標系

第五步: 創(chuàng)建對象坐標

第六步: 導入頂點數據

第七步: 導入顏色數據

第八步: 繪制

代碼部分:

/**

*? 創(chuàng)建EAGContext 跟蹤所有狀態(tài),命令和資源

*/

- (void)createEagContext{

self.eagContext = [[EAGLContext alloc]initWithAPI:kEAGLRenderingAPIOpenGLES1];

[EAGLContext setCurrentContext:self.eagContext];

}

/**

*? 配置view

*/

- (void)configure{

GLKView *view = (GLKView*)self.view;

view.drawableDepthFormat = GLKViewDrawableDepthFormat24;

view.context = self.eagContext;

}

/**

*? 清除

*/

-(void)clear{

glEnable(GL_DEPTH_TEST);

glClearColor(1, 1, 1, 1);

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

}

/**

*? 創(chuàng)建投影坐標

*/

- (void)initProjectionMatrix{

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

}

/**

*? 創(chuàng)建物體坐標

*/

-(void)initModelViewMatrix{

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

static GLfloat transY = 0.0;

static GLfloat z=-2.0;

//1

static GLfloat spinX=0;

static GLfloat spinY=0;

glTranslatef(0.0, (GLfloat)(sinf(transY)/2.0), z);

glRotatef(spinY, 0.0, 1.0, 0.0);

glRotatef(spinX, 1.0, 0.0, 0.0);

transY += 0.075f;

spinY+=.25;

spinX+=.25;

}

/**

*? 導出頂點坐標

*? glVertexPointer 第一個參數:每個頂點數據的個數,第二個參數,頂點數據的數據類型,第三個偏移量挠说,第四個頂點數組地址

*/

- (void)loadVertexData{

glVertexPointer(3, GL_FLOAT, 0, cubeVertices);

glEnableClientState(GL_VERTEX_ARRAY);

}

/**

*? 導入顏色數據

*/

- (void)loadColorBuffer{

glColorPointer(4, GL_UNSIGNED_BYTE, 0, cubeColors);

glEnableClientState(GL_COLOR_ARRAY);

}

/**

*? 導入索引數據

*/

-(void)draw{

// 開啟剔除面功能

glEnable(GL_CULL_FACE);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //3

glCullFace(GL_BACK); // 剔除背面

glDrawElements( GL_TRIANGLE_FAN, 18, GL_UNSIGNED_BYTE, tfan1);

glDrawElements( GL_TRIANGLE_FAN, 18, GL_UNSIGNED_BYTE, tfan2);

}

/**

*? 設置窗口及投影坐標的位置

*/

-(void)setClipping

{

float aspectRatio;

const float zNear = .1;

const float zFar = 1000;

const float fieldOfView = 60.0;

GLfloat? ? size;

CGRect frame = [[UIScreen mainScreen] bounds];

aspectRatio=(float)frame.size.width/(float)frame.size.height;

[self initProjectionMatrix];

size = zNear * tanf(GLKMathDegreesToRadians (fieldOfView) / 2.0);

// 設置視圖窗口的大小 和 坐標系統

glFrustumf(-size, size, -size /aspectRatio, size /aspectRatio, zNear, zFar);

glViewport(0, 0, frame.size.width, frame.size.height);

}

GLKViewController 實現代碼

- (void)viewDidLoad {

[super viewDidLoad];

[self createEagContext];

[self configure];

[self setClipping];

}

-(void)glkView:(GLKView *)view drawInRect:(CGRect)rect{

[self clear];

[self initModelViewMatrix];

[self loadVertexData];

[self loadColorBuffer];

[self draw];

}

代碼下載地址: https://github.com/XJALYN/OpenGLES_004

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末斥扛,一起剝皮案震驚了整個濱河市匣掸,隨后出現的幾起案子掏觉,更是在濱河造成了極大的恐慌焕梅,老刑警劉巖输吏,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件物舒,死亡現場離奇詭異色洞,居然都是意外死亡,警方通過查閱死者的電腦和手機冠胯,發(fā)現死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進店門火诸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人荠察,你說我怎么就攤上這事置蜀。” “怎么了悉盆?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵盯荤,是天一觀的道長。 經常有香客問我焕盟,道長秋秤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮灼卢,結果婚禮上绍哎,老公的妹妹穿的比我還像新娘。我一直安慰自己鞋真,他們只是感情好蛇摸,可當我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著灿巧,像睡著了一般赶袄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上抠藕,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天饿肺,我揣著相機與錄音,去河邊找鬼盾似。 笑死敬辣,一個胖子當著我的面吹牛,可吹牛的內容都是我干的零院。 我是一名探鬼主播溉跃,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼告抄!你這毒婦竟也來了撰茎?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤打洼,失蹤者是張志新(化名)和其女友劉穎龄糊,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體募疮,經...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡炫惩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了阿浓。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片他嚷。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖芭毙,靈堂內的尸體忽然破棺而出筋蓖,到底是詐尸還是另有隱情,我是刑警寧澤稿蹲,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布扭勉,位于F島的核電站,受9級特大地震影響苛聘,放射性物質發(fā)生泄漏涂炎。R本人自食惡果不足惜忠聚,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望唱捣。 院中可真熱鬧两蟀,春花似錦、人聲如沸震缭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拣宰。三九已至党涕,卻和暖如春淹遵,著一層夾襖步出監(jiān)牢的瞬間扼仲,已是汗流浹背姐刁。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工导街, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人航棱。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓骇两,卻偏偏與公主長得像宴咧,于是被迫代替她去往敵國和親朝群。 傳聞我的和親對象是個殘疾皇子燕耿,可洞房花燭夜當晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內容