Jump to content
  • Advertisement


This topic is now archived and is closed to further replies.


Problems with glPushMatrix()

This topic is 5528 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

When i paint a background (Ortho Mode) and then in the foreground (in Perspective Mode) 3 Layers of Alpha Blended Cubes having some special MAterial and Lighning but no textures the cubes do not rotate as i expected and also the background switches to solid white after a very short while. I played around with glPushMatrix() at some positions of my code, but nothing seems to help. I post parts of the Code here, because it might be easier to see what i''m doing wrong: Would be nice, if someone could help.... void Draw (void) { glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); RenderBackground(); RenderCubes(); glFlush (); } void RenderBackground() { // switch to Ortho2D glMatrixMode (GL_PROJECTION); glLoadIdentity(); glOrtho(0.0f, g_window->init.width, g_window->init.height, 0.0f, -1.0f, 1.0f); glMatrixMode (GL_MODELVIEW); glLoadIdentity(); // glTranslatef(0.375, 0.375, 0.0); glEnable(GL_TEXTURE_2D); glDepthMask(GL_FALSE); // Draw Background int x_pos, y_pos; float width, height; y_pos = 0; x_pos = 0; for (int i=0; i < sizeof(tiles); i++) { glBindTexture(GL_TEXTURE_2D, tiles.texture); glBegin(GL_TRIANGLE_STRIP); glColor3f(1.0f, 1.0f, 1.0f); glTexCoord2d(1,1); glVertex2i( x_pos+tiles[i].width, y_pos); glTexCoord2d(0,1); glVertex2i( x_pos, y_pos); glTexCoord2d(1,0); glVertex2i( x_pos+tiles[i].width, y_pos+tiles[i].height); glTexCoord2d(0,0); glVertex2i( x_pos, y_pos+tiles[i].height); glEnd(); x_pos += tiles[i].width; if (x_pos >= g_window->init.width) { x_pos=0; y_pos += tiles[i].height; } } glDepthMask(GL_TRUE); } void RenderCubes() { long y = tickCount/1000; glPushMatrix(); // Switch to 3D Perspective glMatrixMode (GL_PROJECTION); glLoadIdentity (); // Calculate The Aspect Ratio Of The Window gluPerspective (45.0f, (GLfloat)(g_window->init.width)/(GLfloat)(g_window->init.height), 1.0f, 1000.0f); glMatrixMode (GL_MODELVIEW); glLoadIdentity (); // Setup Lights glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glLightfv(GL_LIGHT0, GL_AMBIENT, light0.ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, light0.diffuse); glLightfv(GL_LIGHT0, GL_SPECULAR, light0.specular); glLightfv(GL_LIGHT0, GL_POSITION, light0.position); glEnable(GL_LIGHT1); glLightfv(GL_LIGHT1, GL_AMBIENT, light1.ambient); glLightfv(GL_LIGHT1, GL_DIFFUSE, light1.diffuse); glLightfv(GL_LIGHT1, GL_SPECULAR, light1.specular); glLightfv(GL_LIGHT1, GL_POSITION, light1.position); // Enable Alpha Blending glDisable( GL_DEPTH_TEST ); glEnable( GL_BLEND ); glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glDisable(GL_COLOR_SUM_EXT); for (int i=0; i < noCubeLayers; i++) { for (int j=0; j < noCubes; j++) { // update y position to move cubes from bottom // to top of screen cubes[i][j].pos.y += speedLayers[i]; if (cubes[i][j].pos.y > cubes[i][j].pos.z/-2 ) { cubes[i][j].pos.y = cubes[i][j].pos.z/2; } glTranslatef(cubes[i][j].pos.x, cubes[i][j].pos.y, cubes[i][j].pos.z); glRotatef(cubes[i][j].rot.rotX, 1.0f, 0.0f, 0.0f); glRotatef(cubes[i][j].rot.rotY, 0.0f, 1.0f, 0.0f); glRotatef(cubes[i][j].rot.rotZ, 0.0f, 0.0f, 1.0f); glBegin( GL_TRIANGLES ); SetMaterial(&outerMaterial); for (int count=0; count < outer.num_faces; count++) { glNormal3f( outer.normals[outer.n_idx[count]].x, outer.normals[outer.n_idx[count]].y, outer.normals[outer.n_idx[count]].z ); glVertex3f( outer.vertices[outer.v_idx[count]].x/100, outer.vertices[outer.v_idx[count]].y/100, outer.vertices[outer.v_idx[count]].z/100 ); } SetMaterial(&innerMaterial); for (int count=0; count < inner.num_faces; count++) { glNormal3f( inner.normals[innerCube.n_idx[count]].x, inner.normals[innerCube.n_idx[count]].y, inner.normals[innerCube.n_idx[count]].z); glVertex3f( inner.vertices[inner.v_idx[count]].x/100*1.35, inner.vertices[inner.v_idx[count]].y/100*1.35, inner.vertices[inner.v_idx[count]].z/100*1.35 ); } glEnd(); } } glDisable(GL_LIGHTING); glEnable(GL_DEPTH_TEST); glDisable( GL_BLEND ); glPopMatrix(); }

Share this post

Link to post
Share on other sites

  • Advertisement

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!