使用OpenGL绘制简易三角形

#import"ViewController.h"

@interface ViewController()

@property(nonatomic,strong)EAGLContext * mContext;// OpenGL的上下文

@property(nonatomic,strong)GLKBaseEffect * mEffect;// OpenGL的着色器

@property(nonatomic,assign)int mCount;

@end

创建OpenGL的上下文和着色器

(1)创建OpenGL上下文

self.mContext= [[EAGLContext alloc]initWithAPI:kEAGLRenderingAPIOpenGLES2];//2.0,还有1.0和3.0

GLKView* view = (GLKView*)self.view;//storyboard记得添加

view.context=self.mContext;

view.drawableColorFormat=GLKViewDrawableColorFormatRGBA8888;//颜色缓冲区格式

[EAGLContext setCurrentContext:self.mContext];

(2)创建顶点数据

//顶点数据,前三个是顶点坐标,后面两个是纹理坐标

GLfloat squareVertexData[] =

{

0.5, -0.5,0.0f,1.0f,0.0f,//右下

-0.5,0.5,0.0f,0.0f,1.0f,//左上

-0.5, -0.5,0.0f,0.0f,0.0f,//左下

//0.5, 0.5, -0.0f,1.0f, 1.0f, //右上

};

//顶点索引,数组中的每三个代表了顶点数组中的顶点比如0,1,2表示取得是0.5, -0.5,0.0f,1.0f,0.0f,//右下,-0.5,0.5,0.0f,0.0f,1.0f,//左上,-0.5, -0.5,0.0f,0.0f,0.0f,//左下这三个点

GLuint indices[] =

{

0,1,2,

//1, 3, 0

};

self.mCount=sizeof(indices) /sizeof(GLuint);

//顶点数据缓存

GLuint buffer;// 

glGenBuffers(1, &buffer);// OpenGL为图形处理器控制的缓存生成一个独一无二的标识符

glBindBuffer(GL_ARRAY_BUFFER, buffer);// 为接下来的运算使用一个缓存

glBufferData(GL_ARRAY_BUFFER,sizeof(squareVertexData), squareVertexData,GL_STATIC_DRAW);// 为当前的缓存分配并初始化足够的连续内存

// 顶点索引缓存

GLuint index;

glGenBuffers(1, &index);

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, index);

glBufferData(GL_ELEMENT_ARRAY_BUFFER,sizeof(indices), indices,GL_STATIC_DRAW);


glEnableVertexAttribArray(GLKVertexAttribPosition);// 告诉OpenGL是否使用缓存中的数据

glVertexAttribPointer(GLKVertexAttribPosition,3,GL_FLOAT,GL_FALSE,sizeof(GLfloat) *5, (GLfloat*)NULL+0);// 告诉OpenGL在缓存中数据的类型和所需要访问数据的偏移量

//纹理贴图

NSString* filePath = [[NSBundlemainBundle]pathForResource:@"for_test"ofType:@"jpg"];

NSDictionary* options = [NSDictionarydictionaryWithObjectsAndKeys:@(1),GLKTextureLoaderOriginBottomLeft,nil];//GLKTextureLoaderOriginBottomLeft纹理坐标系是相反的

GLKTextureInfo* textureInfo = [GLKTextureLoadertextureWithContentsOfFile:filePathoptions:optionserror:nil];

//着色器

self.mEffect= [[GLKBaseEffectalloc]init];

self.mEffect.texture2d0.enabled=GL_TRUE;

self.mEffect.texture2d0.name= textureInfo.name;

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

glClearColor(0.3f,0.6f,0.5f,1.0f);

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

//启动着色器

[self.mEffect prepareToDraw];

glDrawElements(GL_TRIANGLES,self.mCount,GL_UNSIGNED_INT,0);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值