Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- - (void)startRenderLoop:(GLView *)MeshGLView
- {
- if(displayLink == nil)
- {
- displayLink = [self.view.window.screen displayLinkWithTarget:MeshGLView selector:@selector(drawView)];
- [displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
- NSLog(@"Starting Render Loop");
- }
- }
- - (void)drawView:(GLView *)theView {
- NSLog(@"drawView");
- if (theView.context != nil)
- {
- [EAGLContext setCurrentContext:theView.context];
- if (![theView getFrameBuffer])
- [theView createFramebuffer];
- }
- if (redraw) {
- NSLog(@"drawMesh");
- [self drawMesh:theView];
- redraw = NO;
- }
- }
- - (void)drawMesh:(GLView *)MeshView {
- if (MeshView.context != nil)
- {
- //make it the current context for rendering
- [EAGLContext setCurrentContext:MeshView.context];
- //if our framebuffers have not been created yet, do that now!
- if (![MeshView getFrameBuffer])
- [MeshView createFramebuffer];
- }
- glMatrixMode(GL_MODELVIEW);
- Mesh mesh = _sculpture->getMesh();
- int numberOfTriangles = mesh.getNumberOfTriangles();
- std::vector<float> vertices = mesh.getVertices();
- std::vector<float> normals = mesh.getNormals();
- //Draw mesh
- {
- glColor4f(1,0,1,1);
- glEnable(GL_COLOR_MATERIAL);
- glShadeModel(GL_FLAT);
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_NORMAL_ARRAY);
- static double theta = 0;
- theta += 0.03;
- glRotatef(theta, 1, 1, 0);
- glVertexPointer(3, GL_FLOAT, 0, vertices.data());
- glNormalPointer(GL_FLOAT, 0, normals.data());
- glDrawArrays(GL_TRIANGLES, 0, numberOfTriangles);
- glDisableClientState(GL_NORMAL_ARRAY);
- glDisableClientState(GL_VERTEX_ARRAY);
- glShadeModel(GL_SMOOTH);
- glDisable(GL_COLOR_MATERIAL);
- glColor4f(1, 1, 1, 1);
- }
- //Draw Axes
- {
- const GLfloat lineX[] = {
- FrustumData.left * FrustumData.ratio, (FrustumData.top + FrustumData.bottom) / 2 * FrustumData.ratio, -FrustumData.zFar, //point A
- FrustumData.right * FrustumData.ratio, (FrustumData.top + FrustumData.bottom) / 2 * FrustumData.ratio, -FrustumData.zFar //point B
- };
- const GLfloat lineY[] = {
- (FrustumData.left + FrustumData.right) / 2 * FrustumData.ratio , FrustumData.bottom * FrustumData.ratio, -FrustumData.zFar, //point A
- (FrustumData.left + FrustumData.right) / 2 * FrustumData.ratio , FrustumData.top * FrustumData.ratio, -FrustumData.zFar //point B
- };
- const GLfloat lineZ[] = {
- (FrustumData.left + FrustumData.right) / 2 * FrustumData.ratio, (FrustumData.top + FrustumData.bottom) / 2 * FrustumData.ratio, -FrustumData.zFar, //point A
- (FrustumData.left + FrustumData.right) / 2 * FrustumData.ratio, (FrustumData.top + FrustumData.bottom) / 2 * FrustumData.ratio, -FrustumData.zNear //point B
- };
- glEnableClientState(GL_VERTEX_ARRAY);
- glColor4f(1.0f, 0.0f, 0.0f, 1.0f); // opaque red
- glVertexPointer(3, GL_FLOAT, 0, lineX);
- glDrawArrays(GL_LINES, 0, 2);
- glColor4f(0.0f, 1.0f, 0.0f, 1.0f); // opaque green
- glVertexPointer(3, GL_FLOAT, 0, lineY);
- glDrawArrays(GL_LINES, 0, 2);
- glColor4f(0.0f, 0.0f, 1.0f, 1.0f); // opaque blue
- glVertexPointer(3, GL_FLOAT, 0, lineZ);
- glDrawArrays(GL_LINES, 0, 2);
- glDisableClientState(GL_VERTEX_ARRAY);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment