Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- - (void) setup{
- vertices = d12vertices;
- numVertices = sizeof(d12vertices)/sizeof(GLfloat);
- indices = d12indices;
- numIndices = sizeof(d12indices)/sizeof(GLushort);
- normals = d12normals;
- numNormals = sizeof(d12normals)/sizeof(GLfloat);
- tex = d12tex;
- numTex = sizeof(d12tex)/sizeof(GLfloat);
- glGenVertexArraysOES(1, &_vertexArray);
- glBindVertexArrayOES(_vertexArray);
- glGenBuffers(1, &_indexBuffer);
- glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _indexBuffer);
- glBufferData(GL_ELEMENT_ARRAY_BUFFER, numIndices*sizeof(GLushort), indices, GL_STATIC_DRAW);
- glGenBuffers(1, &_vertexBuffer);
- glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer);
- glBufferData(GL_ARRAY_BUFFER, numVertices*sizeof(GLfloat), vertices, GL_STATIC_DRAW);
- glEnableVertexAttribArray(effect->vertCoord);//(GLKVertexAttribPosition);
- glVertexAttribPointer(effect->vertCoord, 3, GL_FLOAT, GL_FALSE, 0, 0);
- glGenBuffers(1, &_normalBuffer);
- glBindBuffer(GL_ARRAY_BUFFER, _normalBuffer);
- glBufferData(GL_ARRAY_BUFFER, numNormals*sizeof(GLfloat), normals, GL_STATIC_DRAW);
- glEnableVertexAttribArray(effect->normal);//(GLKVertexAttribNormal);
- glVertexAttribPointer(effect->normal, 3, GL_FLOAT, GL_FALSE, 0, 0);
- glGenBuffers(1, &_textureBuffer);
- glBindBuffer(GL_ARRAY_BUFFER, _textureBuffer);
- glBufferData(GL_ARRAY_BUFFER, numTex*sizeof(GLfloat), tex, GL_STATIC_DRAW);
- glEnableVertexAttribArray(effect->texCoord);
- glVertexAttribPointer(effect->texCoord, 2, GL_FLOAT, GL_FALSE, 0, 0);
- glBindVertexArrayOES(0);
- }
- - (void) draw {
- [EAGLContext setCurrentContext:context];
- glBindVertexArrayOES(_vertexArray);
- effect->modelViewMatrix = mvm;
- if(selected){
- effect->lightDiffuseColour = GLKVector4Make(1, 0.3, 0.3, 1);
- }
- else {
- effect->lightDiffuseColour = GLKVector4Make(1, 1, 1, 1);
- }
- effect->numberColour = GLKVector4Make(numbers[colorSelected].r, numbers[colorSelected].g, numbers[colorSelected].b, 1);
- effect->faceColour = GLKVector4Make(faceColors[colorSelected].r, faceColors[colorSelected].g, faceColors[colorSelected].b, 1);
- [effect prepareToDraw];
- glDrawElements(GL_TRIANGLES, numIndices, GL_UNSIGNED_SHORT, 0);
- }
- // ----- IN THE EFFECT CLASS ---- (used above)
- // Mainly for sending stuff to the shader, all models/objects use the same instance of effect
- - (void) prepareToDraw {
- camModelViewMatrix = GLKMatrix4Multiply(cameraMatrix, modelViewMatrix);
- modelViewProjectionMatrix = GLKMatrix4Multiply(projectionMatrix, camModelViewMatrix);
- GLKMatrix3 normalMatrix = GLKMatrix3InvertAndTranspose(GLKMatrix4GetMatrix3(modelViewMatrix), NULL);
- glUniformMatrix4fv(uniforms[UNIFORM_MODELVIEWPROJECTION_MATRIX], 1, 0, modelViewProjectionMatrix.m);
- glUniformMatrix3fv(uniforms[UNIFORM_NORMAL_MATRIX], 1, 0, normalMatrix.m);
- float* lp = [self vec3ToFloat:lightPosition];
- glUniform3fv(uniforms[UNIFORM_VEC3_lightPosition], 1, lp);
- delete lp;
- float* ldc = [self vec4ToFloat:lightDiffuseColour];
- glUniform4fv(uniforms[UNIFORM_VEC4_lightDiffuseColour], 1, ldc);
- delete ldc;
- float* lsc = [self vec4ToFloat:lightSpecularColour];
- glUniform4fv(uniforms[UNIFORM_VEC4_lightSpecularColour], 1, lsc);
- delete lsc;
- GLKVector3 lightHalfVec = GLKVector3Normalize(GLKVector3Add(cameraPosition, lightPosition));
- float* lhv = [self vec3ToFloat:lightHalfVec];
- glUniform3fv(uniforms[UNIFORM_VEC3_lightHalfVector], 1, lhv);
- delete lhv;
- float* nc = [self vec4ToFloat:numberColour];
- glUniform4fv(uniforms[UNIFORM_VEC4_NumberColour], 1, nc);
- delete nc;
- float* fc = [self vec4ToFloat:faceColour];
- glUniform4fv(uniforms[UNIFORM_VEC4_FaceColour], 1, fc);
- delete fc;
- glActiveTexture(GL_TEXTURE0);
- glBindTexture(GL_TEXTURE_2D, texture);
- glUniform1i(uniforms[UNIFORM_Texture], 0);
- glUseProgram(_program);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement