罗大柚OpenGL ES教程系列_LessonTwo(Part 4)_使用shader绘制一个立方体

这一次,我们还是绘制一个立方体,但是采用的是shader, 需要说明的是, 我们用的是Xcode5.02中系统提供的顶点数据 和 shader, 写shader并不难,这里图个省事了。

 

 

 

 

 

#import "ViewController.h"

#defineBUFFER_OFFSET(i) ((char *)NULL + (i))

 

//Uniform index.

enum

{

    UNIFORM_MODELVIEWPROJECTION_MATRIX,

    UNIFORM_NORMAL_MATRIX,

    NUM_UNIFORMS

};

GLintuniforms[NUM_UNIFORMS];

 

//Attribute index.

enum

{

    ATTRIB_VERTEX,

    ATTRIB_NORMAL,

    NUM_ATTRIBUTES

};

 

GLfloatgCubeVertexData[216] =

{

    // Data layout for each line below is:

    // positionX, positionY, positionZ,     normalX, normalY, normalZ,

    0.5f, -0.5f, -0.5f,        1.0f, 0.0f, 0.0f,

    0.5f, 0.5f, -0.5f,         1.0f, 0.0f, 0.0f,

    0.5f, -0.5f, 0.5f,         1.0f, 0.0f, 0.0f,

    0.5f, -0.5f, 0.5f,         1.0f, 0.0f, 0.0f,

    0.5f, 0.5f, -0.5f,          1.0f, 0.0f, 0.0f,

    0.5f, 0.5f, 0.5f,         1.0f, 0.0f, 0.0f,

   

    0.5f, 0.5f, -0.5f,         0.0f, 1.0f, 0.0f,

    -0.5f, 0.5f, -0.5f,        0.0f, 1.0f, 0.0f,

    0.5f, 0.5f, 0.5f,          0.0f, 1.0f, 0.0f,

    0.5f, 0.5f, 0.5f,          0.0f, 1.0f, 0.0f,

    -0.5f, 0.5f, -0.5f,        0.0f, 1.0f, 0.0f,

    -0.5f, 0.5f, 0.5f,         0.0f, 1.0f, 0.0f,

   

    -0.5f, 0.5f, -0.5f,        -1.0f, 0.0f, 0.0f,

    -0.5f, -0.5f, -0.5f,       -1.0f, 0.0f, 0.0f,

    -0.5f, 0.5f, 0.5f,         -1.0f, 0.0f, 0.0f,

    -0.5f, 0.5f, 0.5f,         -1.0f, 0.0f, 0.0f,

    -0.5f, -0.5f, -0.5f,       -1.0f, 0.0f, 0.0f,

    -0.5f, -0.5f, 0.5f,        -1.0f, 0.0f, 0.0f,

   

    -0.5f, -0.5f, -0.5f,       0.0f, -1.0f, 0.0f,

    0.5f,-0.5f, -0.5f,        0.0f, -1.0f, 0.0f,

    -0.5f, -0.5f, 0.5f,        0.0f, -1.0f, 0.0f,

    -0.5f, -0.5f, 0.5f,        0.0f, -1.0f, 0.0f,

    0.5f, -0.5f, -0.5f,        0.0f, -1.0f, 0.0f,

    0.5f, -0.5f, 0.5f,         0.0f, -1.0f, 0.0f,

   

    0.5f,0.5f, 0.5f,          0.0f, 0.0f, 1.0f,

    -0.5f, 0.5f, 0.5f,         0.0f, 0.0f, 1.0f,

    0.5f, -0.5f, 0.5f,         0.0f, 0.0f, 1.0f,

    0.5f, -0.5f, 0.5f,         0.0f, 0.0f, 1.0f,

    -0.5f, 0.5f, 0.5f,         0.0f, 0.0f, 1.0f,

    -0.5f, -0.5f, 0.5f,        0.0f, 0.0f, 1.0f,

   

    0.5f, -0.5f, -0.5f,        0.0f, 0.0f, -1.0f,

    -0.5f, -0.5f, -0.5f,       0.0f, 0.0f, -1.0f,

    0.5f, 0.5f, -0.5f,         0.0f, 0.0f, -1.0f,

    0.5f, 0.5f, -0.5f,         0.0f, 0.0f, -1.0f,

    -0.5f, -0.5f, -0.5f,       0.0f, 0.0f, -1.0f,

    -0.5f, 0.5f, -0.5f,        0.0f, 0.0f, -1.0f

};

 

 

@interfaceViewController ()

{

 

    GLuint _program;

   

    GLKMatrix4 _modelViewProjectionMatrix;

    GLKMatrix3 _normalMatrix;

    float _rotation;

   

    GLuint _vertexArray;

    GLuint _vertexBuffer;

}

 

@property (strong,nonatomic)EAGLContext*context;

@property (strong,nonatomic)GLKBaseEffect*baseEffect;

 

- (void)setupGL;

- (void)tearDownGL;

 

- (BOOL)loadShaders;

- (BOOL)compileShader:(GLuint*)shader type:(GLenum)type file:(NSString *)file;

- (BOOL)linkProgram:(GLuint)prog;

- (BOOL)validateProgram:(GLuint)prog;

 

@end

 

@implementationViewController

 

- (void)viewDidLoad

{

    [super viewDidLoad];

   

    self.context = [[EAGLContextalloc]initWithAPI:kEAGLRenderingAPIOpenGLES2];

   

    if (!self.context) {

        NSLog(@"Failedto create ES context");

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值