Part of the Khronos Group
OpenGL.org

The Industry's Foundation for High Performance Graphics

from games to virtual reality, mobile phones to supercomputers

Results 1 to 2 of 2

Thread: glTraslate, glRotate, a cube and some steps

  1. #1
    Intern Contributor
    Join Date
    Jun 2006
    Location
    Spain
    Posts
    81

    glTraslate, glRotate, a cube and some steps

    Hello,

    the code below gives 12 positions and 12 angle rotations on the Y axis to a cube.

    The positions and the angles are inside of two matrices.

    When you push the key 'b' you go to next position and angle.

    My problem is at the 7th step: the window doesnt show the view it should and I cannot understand why.


    Code :
     
     
    #include <stdafx.h>
    #include <glut.h>
    #include <math.h>
     
    #include <iostream>
    using namespace std;
     
     
    double m=5;
    double n=6;
    double o=10;
    double b=m/n;
    double c=2*b;
    double f=3*b;
    int i=0;
    double p=2;
    double q=12;
    double d1=(m*sqrt(p))/q;
     
     
    double array[12][3]={   0,   0,  0, //posicion0 
                            0,   0,  0, //1
    			0,   0,  b, //2
    		        0,   0,  c, //3
    		        0,   0,  c, //4
    		      -d1,   0,  c+d1, //5
    	            -2*d1,   0,  c+d1*2, //6
                        -2*d1,   0,  c+d1*2, //7 -> //THIS IS THE STEP I CANT UNDERStand
                          -d1,   0,  c+d1*3, //8 
    			0,   0,  c+d1*4, //9
                            0,   0,  c+d1*4, //10
    			0,   0,  f+d1*4}; //11
     
     
     
    float xpos = 0, ypos = 0, zpos = 0, xrot = 0, yrot = 0, angle=0.0;
     
     
    double array2[12]={    0,  //posicion inicial
    					0,   //1
    					0,
    					0,
    				  -45,   //4
    				  -45,
    				  -45,
    				   45,   //7 -> THIS IS THE STEP I CANT NOT UNDERSTAND
    				   45,   //8
    				   45,
    					0,
    					0,   //11
    };
     
     
     
     
    void init (void) {
     
    }
     
    void enable (void) {
    	glEnable (GL_DEPTH_TEST); //enable the depth testing
    	//dglEnable (GL_LIGHTING); //enable the lighting
    	glEnable (GL_LIGHT0); //enable LIGHT0, our Diffuse Light
    	glShadeModel (GL_SMOOTH); //set the shader to smooth shader
    }
     
    void camera (void) {
     
    	glTranslated(-array[i][0],-array[i][1],-array[i][2]);
     
    	glRotatef(array2[i], 0.0, 1.0, 0.0);
     
     
    }
     
    void display (void) {
    	glClearColor (0.0,0.0,0.0,1.0); //clear the screen to black
        glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //clear the color buffer and the depth buffer
        glLoadIdentity();  
    	gluLookAt (0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0); //camera position, x,y,z, looking at x,y,z, Up Positions of the camera
    	camera();
    	enable();
     
     
     
    	glBegin(GL_QUADS);           // Draw The Cube Using quads
    		glColor3f(0.0f,1.0f,0.0f);     // Color Blue
    		glVertex3f( 2.5f, 2.5f, 0.0f);    // Top Right Of The Quad (Top)
    		glVertex3f(-2.5f, 2.5f, 0.0f);    // Top Left Of The Quad (Top)
    		glVertex3f(-2.5f, 2.5f, 5.0f);    // Bottom Left Of The Quad (Top)
    		glVertex3f( 2.5f, 2.5f, 5.0f);    // Bottom Right Of The Quad (Top)
     
    		glColor3f(1.0f,0.5f,0.0f);     // Color Orange
    		glVertex3f( 2.5f,-2.5f, 5.0f);    // Top Right Of The Quad (Bottom)
    		glVertex3f(-2.5f,-2.5f, 5.0f);    // Top Left Of The Quad (Bottom)
    		glVertex3f(-2.5f,-2.5f, 0.0f);    // Bottom Left Of The Quad (Bottom)
    		glVertex3f( 2.5f,-2.5f, 0.0f);    // Bottom Right Of The Quad (Bottom)
     
    		glColor3f(1.0f,0.0f,0.0f);     // Color Red      
    		glVertex3f( 2.5f, 2.5f, 5.0f);    // Top Right Of The Quad (Front)
    		glVertex3f(-2.5f, 2.5f, 5.0f);    // Top Left Of The Quad (Front)
    		glVertex3f(-2.5f,-2.5f, 5.0f);    // Bottom Left Of The Quad (Front)
    		glVertex3f( 2.5f,-2.5f, 5.0f);    // Bottom Right Of The Quad (Front)
     
    		glColor3f(1.0f,1.0f,0.0f);     // Color Yellow
    		glVertex3f( 2.5f,-2.5f, 0.0f);    // Top Right Of The Quad (Back)
    		glVertex3f(-2.5f,-2.5f, 0.0f);    // Top Left Of The Quad (Back)
    		glVertex3f(-2.5f, 2.5f, 0.0f);    // Bottom Left Of The Quad (Back)
    		glVertex3f( 2.5f, 2.5f, 0.0f);    // Bottom Right Of The Quad (Back)
     
    		glColor3f(0.0f,0.0f,1.0f);     // Color Blue
    		glVertex3f(-2.5f, 2.5f, 5.0f);    // Top Right Of The Quad (Left)
    		glVertex3f(-2.5f, 2.5f, 0.0f);    // Top Left Of The Quad (Left)
    		glVertex3f(-2.5f,-2.5f, 0.0f);    // Bottom Left Of The Quad (Left)
    		glVertex3f(-2.5f,-2.5f, 5.0f);    // Bottom Right Of The Quad (Left)
     
    		glColor3f(1.0f,0.0f,1.0f);     // Color Violet
    		glVertex3f( 2.5f, 2.5f, 0.0f);    // Top Right Of The Quad (Right)
    		glVertex3f( 2.5f, 2.5f, 5.0f);    // Top Left Of The Quad (Right)
    		glVertex3f( 2.5f,-2.5f, 5.0f);    // Bottom Left Of The Quad (Right)
    		glVertex3f( 2.5f,-2.5f, 0.0f);    // Bottom Right Of The Quad (Right)
     
        glEnd();
     
     
     
    	glutSwapBuffers(); //swap the buffers
    	angle++; //increase the angle
    }
     
    void reshape (int w, int h) {
    	glViewport (0, 0, (GLsizei)w, (GLsizei)h); //set the viewport to the current window specifications
    	glMatrixMode (GL_PROJECTION); //set the matrix to projection
    	glLoadIdentity ();
    	gluPerspective (60, (GLfloat)w / (GLfloat)h, 0.1, 1000.0); //set the perspective (angle of sight, width, height, , depth)
    	glMatrixMode (GL_MODELVIEW); //set the matrix back to model
    }
     
    void keyboard (unsigned char key, int x, int y) {
     
     
    	if (key=='b')
    	{		
     
    		cout << "Posicion" << i+1 << endl;
    		cout << array[i+1][0] << endl << array[i+1][1] << endl << array[i+1][2] << endl;
    		cout << array2[i+1] << endl << endl;
    		i++;
    	}
     
     
     
    }
     
    int main (int argc, char **argv) {
        glutInit (&amp;argc, argv);
    	glutInitDisplayMode (GLUT_DOUBLE | GLUT_DEPTH); //set the display to Double buffer, with depth
    	glutInitWindowSize (500, 500); //set the window size
    	glutInitWindowPosition (100, 100); //set the position of the window
        glutCreateWindow ("A basic OpenGL Window"); //the caption of the window
    	init (); //call the init function
        glutDisplayFunc (display); //use the display function to draw everything
    	glutIdleFunc (display); //update any variables in display, display can be changed to anyhing, as long as you move the variables to be updated, in this case, angle++;
    	glutReshapeFunc (reshape); //reshape the window accordingly
    	glutKeyboardFunc (keyboard); //check the keyboard
        glutMainLoop (); //call the main loop
        return 0;
    }

  2. #2
    Super Moderator OpenGL Guru dorbie's Avatar
    Join Date
    Jul 2000
    Location
    Bay Area, CA, USA
    Posts
    4,388

    Re: glTraslate, glRotate, a cube and some steps

    You don't describe what you see or what you expect to see.

    You may want to interpolate the positions and rotations for a few frames just so you know what is going on.

    An alternative would be to place the same transformation on the modelview (inverse or transpose) draw an arrow and view it all from a birdseye vantage point.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •