这是本章节的核心内容。
glGenBuffers申请一个标识符
glBindBuffer把标识符绑定到GL_ARRAY_BUFFER上
glBufferData把顶点数据从cpu内存复制到gpu内存
glEnableVertexAttribArray 是开启对应的顶点属性
glVertexAttribPointer设置合适的格式从buffer里面读取数据
//纹理贴图
NSString* filePath = [[NSBundle mainBundle] pathForResource:@"for_test" ofType:@"png"];
NSDictionary* options = [NSDictionary dictionaryWithObjectsAndKeys:@(1), GLKTextureLoaderOriginBottomLeft, nil];//GLKTextureLoaderOriginBottomLeft 纹理坐标系是相反的
GLKTextureInfo* textureInfo = [GLKTextureLoader textureWithContentsOfFile:filePath options:options error:nil];
//着色器
self.mEffect = [[GLKBaseEffect alloc] init];
self.mEffect.texture2d0.enabled = GL_TRUE;
self.mEffect.texture2d0.name = textureInfo.name;
GLKTextureLoader读取图片,创建纹理GLKTextureInfo
创建着色器GLKBaseEffect,把纹理赋值给着色器

代码带了很多注释,百度下相应的概念,会有更多解释;如果懒得查,可以留言疑问。ios opengl es编程指南
代码中只有四个顶点坐标,如何显示出来一个图像?
顶点缓存数组可以不用glBufferData,要如何实现?
如果把这个图变成左右两只对称的熊猫,该如何改?
这里可以下载demo代码。
送上两个有意思的blog
飘飘白云系列讲解
代码中只有四个顶点坐标,如何显示出来一个图像?
四个顶点,可以绘制2个三角形,两个三角形拼接成一个矩形。三角形内的任意一点,根据顶点坐标插值生成对应的顶点和纹理坐标。ios opengl es编程指南
顶点缓存数组可以不用glBufferData,要如何实现?顶点数组可以通过glBufferData放入缓存,也可以直接通过glVertexAttribPointer最后一个参数,直接把顶点数组从CPU传送到GPU。区别:glBufferData里面的顶点缓存可以复用,glVertexAttribPointer是每次都会把顶点数组从CPU发送到GPU,影响性能。
如果把这个图变成左右两只对称的熊猫,该如何改?把屏幕切分成4个三角形,左边两个三角形同上,右边两个三角形的纹理坐标的x值调整即可。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-26660-2.html
那年的几何爱情