Advertisement
Fonix

Rendering Code

Aug 22nd, 2012
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. - (void) setup{
  2.  
  3.     vertices = d12vertices;
  4.         numVertices = sizeof(d12vertices)/sizeof(GLfloat);
  5.        
  6.         indices = d12indices;
  7.         numIndices = sizeof(d12indices)/sizeof(GLushort);
  8.        
  9.         normals = d12normals;
  10.         numNormals = sizeof(d12normals)/sizeof(GLfloat);
  11.        
  12.         tex = d12tex;
  13.         numTex = sizeof(d12tex)/sizeof(GLfloat);
  14.  
  15.     glGenVertexArraysOES(1, &_vertexArray);
  16.     glBindVertexArrayOES(_vertexArray);
  17.    
  18.     glGenBuffers(1, &_indexBuffer);
  19.     glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _indexBuffer);
  20.     glBufferData(GL_ELEMENT_ARRAY_BUFFER, numIndices*sizeof(GLushort), indices, GL_STATIC_DRAW);
  21.    
  22.     glGenBuffers(1, &_vertexBuffer);
  23.     glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer);
  24.     glBufferData(GL_ARRAY_BUFFER, numVertices*sizeof(GLfloat), vertices, GL_STATIC_DRAW);
  25.    
  26.     glEnableVertexAttribArray(effect->vertCoord);//(GLKVertexAttribPosition);        
  27.     glVertexAttribPointer(effect->vertCoord, 3, GL_FLOAT, GL_FALSE, 0, 0);
  28.    
  29.     glGenBuffers(1, &_normalBuffer);
  30.     glBindBuffer(GL_ARRAY_BUFFER, _normalBuffer);
  31.     glBufferData(GL_ARRAY_BUFFER, numNormals*sizeof(GLfloat), normals, GL_STATIC_DRAW);
  32.    
  33.     glEnableVertexAttribArray(effect->normal);//(GLKVertexAttribNormal);
  34.     glVertexAttribPointer(effect->normal, 3, GL_FLOAT, GL_FALSE, 0, 0);
  35.  
  36.     glGenBuffers(1, &_textureBuffer);
  37.     glBindBuffer(GL_ARRAY_BUFFER, _textureBuffer);
  38.     glBufferData(GL_ARRAY_BUFFER, numTex*sizeof(GLfloat), tex, GL_STATIC_DRAW);
  39.        
  40.     glEnableVertexAttribArray(effect->texCoord);
  41.     glVertexAttribPointer(effect->texCoord, 2, GL_FLOAT, GL_FALSE, 0, 0);
  42.    
  43.     glBindVertexArrayOES(0);
  44.  
  45. }
  46.  
  47. - (void) draw {
  48.    
  49.     [EAGLContext setCurrentContext:context];
  50.    
  51.     glBindVertexArrayOES(_vertexArray);
  52.    
  53.     effect->modelViewMatrix = mvm;
  54.    
  55.     if(selected){
  56.         effect->lightDiffuseColour = GLKVector4Make(1, 0.3, 0.3, 1);
  57.     }
  58.     else {
  59.         effect->lightDiffuseColour = GLKVector4Make(1, 1, 1, 1);
  60.     }
  61.    
  62.     effect->numberColour = GLKVector4Make(numbers[colorSelected].r, numbers[colorSelected].g, numbers[colorSelected].b, 1);
  63.     effect->faceColour = GLKVector4Make(faceColors[colorSelected].r, faceColors[colorSelected].g, faceColors[colorSelected].b, 1);
  64.    
  65.     [effect prepareToDraw];
  66.          
  67.     glDrawElements(GL_TRIANGLES, numIndices, GL_UNSIGNED_SHORT, 0);
  68. }
  69.  
  70. // ----- IN THE EFFECT CLASS ---- (used above)
  71. // Mainly for sending stuff to the shader, all models/objects use the same instance of effect
  72. - (void) prepareToDraw {
  73.    
  74.     camModelViewMatrix = GLKMatrix4Multiply(cameraMatrix, modelViewMatrix);
  75.    
  76.     modelViewProjectionMatrix = GLKMatrix4Multiply(projectionMatrix, camModelViewMatrix);
  77.    
  78.     GLKMatrix3 normalMatrix = GLKMatrix3InvertAndTranspose(GLKMatrix4GetMatrix3(modelViewMatrix), NULL);
  79.    
  80.     glUniformMatrix4fv(uniforms[UNIFORM_MODELVIEWPROJECTION_MATRIX], 1, 0, modelViewProjectionMatrix.m);
  81.     glUniformMatrix3fv(uniforms[UNIFORM_NORMAL_MATRIX], 1, 0, normalMatrix.m);
  82.    
  83.    
  84.     float* lp = [self vec3ToFloat:lightPosition];
  85.     glUniform3fv(uniforms[UNIFORM_VEC3_lightPosition], 1, lp);
  86.     delete lp;
  87.    
  88.     float* ldc = [self vec4ToFloat:lightDiffuseColour];
  89.     glUniform4fv(uniforms[UNIFORM_VEC4_lightDiffuseColour], 1, ldc);
  90.     delete ldc;
  91.    
  92.     float* lsc = [self vec4ToFloat:lightSpecularColour];
  93.     glUniform4fv(uniforms[UNIFORM_VEC4_lightSpecularColour], 1, lsc);
  94.     delete lsc;
  95.    
  96.     GLKVector3 lightHalfVec = GLKVector3Normalize(GLKVector3Add(cameraPosition, lightPosition));
  97.     float* lhv = [self vec3ToFloat:lightHalfVec];
  98.     glUniform3fv(uniforms[UNIFORM_VEC3_lightHalfVector], 1, lhv);
  99.     delete lhv;
  100.    
  101.     float* nc = [self vec4ToFloat:numberColour];
  102.     glUniform4fv(uniforms[UNIFORM_VEC4_NumberColour], 1, nc);
  103.     delete nc;
  104.    
  105.     float* fc = [self vec4ToFloat:faceColour];
  106.     glUniform4fv(uniforms[UNIFORM_VEC4_FaceColour], 1, fc);
  107.     delete fc;
  108.  
  109.    
  110.     glActiveTexture(GL_TEXTURE0);
  111.     glBindTexture(GL_TEXTURE_2D, texture);
  112.     glUniform1i(uniforms[UNIFORM_Texture], 0);
  113.  
  114.    
  115.     glUseProgram(_program);
  116.    
  117.    
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement