0
votes

I have a human model in an .OBJ file I want to display as a mesh with triangles. No textures. I want also to be able to move, scale, and rotate in 3D.

The first and working option is to project the vertices to 2D using the maths manually and then draw them with Quartz 2D. This works, for I know the underlying math concepts for perspective projection.

However I would like to use OpenGL ES for that method, but I am not sure how to draw the triangles.

For example, the code in - (void)drawRect:(CGRect)rect is:

glClearColor(1,0,0,0);
glClear(GL_COLOR_BUFFER_BIT);
GLKBaseEffect *effect = [[GLKBaseEffect alloc] init];
[effect prepareToDraw];
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);

Now what? I have an array of vertex positions (3 floats per vertex) and an array of triangle indices, so I tried this:

glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, numVertices,pVertices);
glDrawElements(GL_TRIANGLES, numTriangles, GL_UNSIGNED_INT,pTriangles);

but this doesn't show anything. I saw from a sample the usage of glEnableVertexAttribArray(GLKVertexAttribPosition) and glDrawArrays but I 'm not sure how to use them.

I also understand that rendering a wireframe is not possible with ES? So I have to apply color attributes to the vertices. That's ok, but before that the triangles have to be displayed first.

1
@axis I cannot see how this is related to game development in any way. gamedev.se is not a dump for anything graphics-related.Christian Rau
@ChristianRau it's also true that OpenGL is a rendering technology, not something for the "graphics" only and probably the best place for this is Gamedev.axis
@axis Huh? Indeed OpenGL is rendering technology, which means it's for drawing things (thus "graphics"), nothing else. And still this question doesn't ask anything related to game development.Christian Rau
@axis That's utter nonsense. OpenGL questions are perfectly acceptable and well-suited for Stack Overflow. There is no need to recommend migration to the Gamedev SE if they don't particularly focus on game development.Bart

1 Answers

1
votes

The first thing I'd ask is: where are your vertices? OpenGL (ES) draws in a coordinate space that extends from (-1, -1, -1) to (1, 1, 1), so you probably want to transform your points with a projection matrix to get them into that space. To learn about projection matrices and more of the basics of OpenGL ES 2.0 on iOS, I'd suggest finding a book or a tutorial. This one's not bad, and here's another that's specific to GLKit.

Drawing with OpenGL in drawRect: is probably not something you want to be doing. If you're already using GLKit, why not use GLKView? There's good example code to get you started if you create a new Xcode project with the "OpenGL Game" template.

Once you get up to speed with GL you'll find that the function glPolygonMode typically used for wireframe drawing on desktop OpenGL doesn't exist in OpenGL ES. Depending on how your vertex data is organized, though, you might be able to get a decent wireframe with GL_LINES or GL_LINE_LOOP. Or since you're using GLKit, you can skip wireframe and set up some lights and shading pretty easily with GLKBaseEffect.