OPenGL ES _ 入门练习_003

2022-05-13 16:19:21 浏览数 (1)

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

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

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

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

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

[OpenGL ES _ 入门练习_01](http://www.jianshu.com/p/eebaf64e3e0a)

[OpenGL ES _ 入门练习_02](http://www.jianshu.com/p/6155d60dab20)

[OpenGL ES _ 入门练习_03](http://www.jianshu.com/p/36d9dac03345)

[OpenGL ES _ 入门练习_04](http://www.jianshu.com/p/1ca30e9387dd)

[OpenGL ES _ 入门练习_05](http://www.jianshu.com/p/ac9375962f34)

[OpenGL ES _ 入门练习_06](http://www.jianshu.com/p/c63dc219f7a0)

[OpenGL ES _ 着色器 _ 介绍](http://www.jianshu.com/p/309d489bc344)

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

[OpenGL ES _ 着色器 _ 语法](http://www.jianshu.com/p/c5b89b294995)

[OpenGL ES_着色器_纹理图像](http://www.jianshu.com/p/8c0ad4e3e40f)

[OpenGL ES_着色器_预处理](http://www.jianshu.com/p/5e9837b0b219)

[OpenGL ES_着色器_顶点着色器详解](http://www.jianshu.com/p/9d7dca6b70c7)

[OpenGL ES_着色器_片断着色器详解](http://www.jianshu.com/p/55461927c419 )

[OpenGL ES_着色器_实战01](http://www.jianshu.com/p/18d6b37363c8)

[OpenGL ES_着色器_实战02](http://www.jianshu.com/p/45d959c8f1db)

[OpenGL ES_着色器_实战03](http://www.jianshu.com/p/0f740901da59)

演示:

手机截图

学习目标

绘制一个移动的正方形

技术

使用OpenGL ES 1.0


实现思路

代码语言:javascript复制
/*
*  步骤1: 创建一个 GLKViewController
*  步骤2: 创建一个EAGContext 跟踪我们所有的特定的状态,命令和资源
*  步骤3: 清除屏幕
*  步骤4: 创建投影坐标矩阵
*  步骤5: 创建模型视图矩阵
*  步骤6: 加载顶点数据
*  步骤7: 加载颜色数据
*  步骤8: 开始绘制
*/

代码实现部分:

代码语言:javascript复制
/**
*  创建EAGContext
*/
- (void)createEagContext{
self.eagContex = [[EAGLContext alloc]initWithAPI:kEAGLRenderingAPIOpenGLES1];
[EAGLContext setCurrentContext:self.eagContex];
}
/**
*  配置view
*/
-(void)configure{
GLKView *view = (GLKView*)self.view;
view.context = self.eagContex;
view.drawableDepthFormat = GLKViewDrawableDepthFormat24;
}
/**
*  清除屏幕
*/
-(void)clear{
glClearColor(1, 1, 1, 1);
glClear(GL_COLOR_BUFFER_BIT);
}
/**
*  创建投影坐标
*/
-(void)initProjectionMatrix{
glMatrixMode(GL_PROJECTION); // 设置投影模式
glLoadIdentity(); // 导入
}
/**
*  创建自身坐标
*/
-(void)initModelView{
static float transY = 0.0;
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0, (GLfloat)(sinf(transY)/2.0), 0.0);
transY  = 0.075f;
}
/**
*  加载顶点数据
*/
-(void)loadVetexData{
glVertexPointer(2, GL_FLOAT, 0, squareVertices);
glEnableClientState(GL_VERTEX_ARRAY);
}
/**
*  加载颜色数据
*/
-(void)loadColorData{
glColorPointer(4, GL_UNSIGNED_BYTE, 0, squareColors);
glEnableClientState(GL_COLOR_ARRAY);
}
/**
*  开始绘制
*/
-(void)draw{
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
}

说明:

我们使用的GLKViewController 控制器实现的,这个类是苹果公司给我们提供的封装了一部分代码,我们的工作量少了很多.

代码语言:javascript复制
- (void)viewDidLoad {
[super viewDidLoad];
[self createEagContext]; // 2
[self configure];
}
// GLKViewController  提供了一个回调函数,把我们的加载绘制代码写在里面即可完成
-(void)glkView:(GLKView *)view drawInRect:(CGRect)rect{
[self clear]; //3
[self initProjectionMatrix]; //4
[self initModelView];//5
[self loadVetexData];//6
[self loadColorData];//7
[self draw];//8
}

代码地址:https://github.com/XJALYN/OpenGLES_003

0 人点赞