void drawCube(float size, float x, float y, float z) { // Colour cube data. int i; const GLfloat cube_vertices [8][3] = { /* +z */ {0.5f, 0.5f, 0.5f}, {0.5f, -0.5f, 0.5f}, {-0.5f, -0.5f, 0.5f}, {-0.5f, 0.5f, 0.5f}, /* -z */ {0.5f, 0.5f, -0.5f}, {0.5f, -0.5f, -0.5f}, {-0.5f, -0.5f, -0.5f}, {-0.5f, 0.5f, -0.5f} }; const GLubyte cube_vertex_colors [8][4] = { {255, 255, 255, 255}, {255, 255, 0, 255}, {0, 255, 0, 255}, {0, 255, 255, 255}, {255, 0, 255, 255}, {255, 0, 0, 255}, {0, 0, 0, 255}, {0, 0, 255, 255} }; const GLushort cube_faces [6][4] = { /* ccw-winding */ /* +z */ {3, 2, 1, 0}, /* -y */ {2, 3, 7, 6}, /* +y */ {0, 1, 5, 4}, /* -x */ {3, 0, 4, 7}, /* +x */ {1, 2, 6, 5}, /* -z */ {4, 5, 6, 7} }; glPushMatrix(); // Save world coordinate system. glTranslatef(x, y, z); glScalef(size, size, size); glStateCacheDisableLighting(); glStateCacheDisableTex2D(); glStateCacheDisableBlend(); glColorPointer(4, GL_UNSIGNED_BYTE, 0, cube_vertex_colors); glVertexPointer(3, GL_FLOAT, 0, cube_vertices); glStateCacheEnableClientStateVertexArray(); glEnableClientState(GL_COLOR_ARRAY); for (i = 0; i < 6; i++) { glDrawElements(GL_TRIANGLE_FAN, 4, GL_UNSIGNED_SHORT, &(cube_faces[i][0])); } glDisableClientState(GL_COLOR_ARRAY); glColor4ub(0, 0, 0, 255); for (i = 0; i < 6; i++) { glDrawElements(GL_LINE_LOOP, 4, GL_UNSIGNED_SHORT, &(cube_faces[i][0])); } glPopMatrix(); // Restore world coordinate system. }
void VirtualEnvironmentHandleARViewDrawPreCamera(void) { if (!VirtualEnvironment_AROSG) return; #ifdef USE_OPENGL_ES // Set some state to OSG's expected values. glStateCacheDisableLighting(); glStateCacheDisableTex2D(); glStateCacheDisableBlend(); glStateCacheEnableClientStateVertexArray(); glStateCacheEnableClientStateNormalArray(); glStateCacheEnableClientStateTexCoordArray(); #endif // Save the projection and modelview state. glMatrixMode(GL_PROJECTION); glPushMatrix(); glMatrixMode(GL_MODELVIEW); glPushMatrix(); // Draw the whole scenegraph. arOSGDraw(VirtualEnvironment_AROSG); // OSG modifies the viewport, so restore it. // Also restore projection and modelview. glViewport(viewPort[viewPortIndexLeft], viewPort[viewPortIndexBottom], viewPort[viewPortIndexWidth], viewPort[viewPortIndexHeight]); glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); #ifdef USE_OPENGL_ES // Flush the state cache and ensure depth testing is enabled. glStateCacheFlush(); glStateCacheEnableDepthTest(); #else // Ensure depth testing is re-enabled. glEnable(GL_DEPTH_TEST); #endif }