OpenGL 中任何复杂的图形都是由点,线 和三角形组成的. 那么一个矩形 就需要有两个三角形组成.

纹理, 可以理解为一张图片, 我么可以将整张or部分图片绘制到圆形, 矩形等目标图形中.

下图表示了顶点数据 对应 的纹理中的点.

左侧代表定点数据, 其坐标原点是屏幕中央 ; 右侧图片(纹理), 坐标原点是左下角

GLKBaseEffect让我们避开了写shader Language 着色器语言, 相当于对glsl的封装
typedef struct {
GLKVector3 positonCoords;//顶点
GLKVector2 textureCoords;//纹理
}SceneVertex; @interface GLViewController () @property(nonatomic,strong)GLKBaseEffect *baseEffect;
@property(nonatomic,assign)GLuint vertexBufferID;//缓存ID属性 @end @implementation GLViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view. //1.创建OpenGLE ES上下文
GLKView *view = (GLKView *)self.view;
view.context = [[EAGLContext alloc]initWithAPI:kEAGLRenderingAPIOpenGLES2];
[EAGLContext setCurrentContext:view.context]; //2.GLKBaseEffect属性, 使我们不需要编写shader language(着色器)代码就可以简单完成绘制
self.baseEffect = [[GLKBaseEffect alloc]init];
self.baseEffect.useConstantColor = GL_TRUE;//使用静态颜色绘制
self.baseEffect.constantColor = GLKVector4Make(1.0f, 1.0f, 1.0f, 1.0f);//设置绘制颜色 rgba
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);//背景颜色 //3.定点数据
//矩形的六个顶点
static const SceneVertex vertices[] = {
{{, -, 0.0f,},{1.0f,0.0f}}, //右下
{{, , 0.0f},{1.0f,1.0f}}, //右上
{{-, , 0.0f},{0.0f,1.0f}}, //左上 {{, -, 0.0f},{1.0f,0.0f}}, //右下
{{-, , 0.0f},{0.0f,1.0f}}, //左上
{{-, -, 0.0f},{0.0f,0.0f}}, //左下
}; //4.生成缓存,并为缓存提供数据
glGenBuffers(, &_vertexBufferID);//申请一个标识符
glBindBuffer(GL_ARRAY_BUFFER, _vertexBufferID);//将标识符绑定到GL_ARRAY_BUFFER
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);//复制定点数据从CPU 到 GPU glEnableVertexAttribArray(GLKVertexAttribPosition);//顶点缓存数据
glVertexAttribPointer(GLKVertexAttribPosition, , GL_FLOAT, GL_FALSE, sizeof(SceneVertex), NULL + offsetof(SceneVertex, positonCoords));
glEnableVertexAttribArray(GLKVertexAttribTexCoord0);
glVertexAttribPointer(GLKVertexAttribTexCoord0, , GL_FLOAT, GL_FALSE, sizeof(SceneVertex), NULL + offsetof(SceneVertex, textureCoords)); //5.生成纹理
//使用GLkit中的GLKTextureInfo方便的生成图片纹理。
CGImageRef imageRef = [[UIImage imageNamed:@"1.png"]CGImage];
//GLKTextureInfo封装了纹理缓存的信息,包括是否包含MIP贴图
//option 防止图片是倒立了,这个是因为CoreGraphics的坐标系问题
NSDictionary* options = [NSDictionary dictionaryWithObjectsAndKeys:@(), GLKTextureLoaderOriginBottomLeft, nil];
GLKTextureInfo *textureInfo = [GLKTextureLoader textureWithCGImage:imageRef options:options error:nil];
self.baseEffect.texture2d0.name = textureInfo.name;
self.baseEffect.texture2d0.target = textureInfo.target; //6.代理, 绘制 } //系统给我们回调的绘制消息,该方法会一直被调用,和display方法一致
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect{ //清除背景色
glClearColor(0.0f,0.0f,0.0f,1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
[self.baseEffect prepareToDraw];
glDrawArrays(GL_TRIANGLES, , ); } - (void)dealloc{
GLKView *view = (GLKView *)self.view;
[EAGLContext setCurrentContext:view.context];
if (_vertexBufferID != ) {
glDeleteBuffers(, &_vertexBufferID);
_vertexBufferID = ;
} } @end

最新文章

  1. awk删除文件第一列
  2. C# 动态加载程序集dll (实现接口)
  3. Javascript高级程序设计——函数内部属性与函数属性
  4. mfc ui3
  5. centos 关闭防火墙
  6. 获取tcl开发工具
  7. Qt入门(1)——初识Qt
  8. OpenCV——CvMatchShapes函数
  9. HTML5新特性学习-1
  10. Android:抄QQ照片选择器(按相册类别显示,加入选择题)
  11. plsql 数据迁移——导出表结构,表数据,表序号
  12. 集群配置虚拟主机及部署Hadoop集群碰到的问题
  13. scrapy_Response and Request
  14. js事件循环机制辨析
  15. https openssl http2
  16. 原创:vsphere概念深入系列四:Nic Teaming若干问题
  17. 蓝牙mesh介绍
  18. 8 -- 深入使用Spring -- 2...3 使用@Resource配置依赖
  19. HTTP-java模拟Get请求小栗子
  20. LintCode之硬币排成线

热门文章

  1. mybatis多对一
  2. ThreadLocal和单例对象比较
  3. 好书推荐---Python网络编程基础
  4. seaborn教程3——数据集的分布可视化
  5. 11、numpy——字符串函数
  6. go web编程——自定义路由设计
  7. Visual Studio 插件ReSharper:代码生成工具
  8. web.config增加组和调用
  9. JVM(17)之 准备-解析-初始化
  10. nodejs,事件轮询总结