I finished porting the Nice3D engine from fixed function pipe OpenGL|ES 1.1 to programmable OpenGL|ES 2, using the new GLKit and GLView. GLKit is available since iOS 5 and provides you with low level functions to make the transition between fixed function and shader based OpenGL as easy as possible.
But still, you have to manage a lot of the OpenGL projection and model view matrix stuff, the lightning and shader configuration yourself. It took me a lot of time to get the lightning right. A reason for this is for sure that I decided to switch the coordinate system in the engine to a left handed one.
The default OpenGL coordinate system is right handed, that means the default forward direction into the scene is along the negative Z axis. But I didn’t like that and I could never explain to me, why anyone want to have a right handed coordinate system?! So I decided to switch the default OpenGL behaviour and take the DirectX approach. The left handed coordinate system direction into the scene is along the positive Z axis and feels much more natural to me. In the end that helps me to imagine things better in my 3D world.
But switching coordinate system comes with some caveats. First off, I had to implement my modelview setup and camera transformation to work with the switched coordinate system. And second I had to replace some GLKit math functions to work correctly with the left handed coordinate system.