Skip to main content
gamedev.net
🔒 Locked

Cube Rotation

Started by tirengarfio 4 replies 650+ views
Original Post
tirengarfio
tirengarfio
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.


#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[0],-array[1],-array[2]);
	
	glRotatef(array2, 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 (&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;
}




[Edited by - LessBread on February 26, 2007 3:29:34 PM]
LessBread
LessBread
I added the title. You can correct it if you think it needs correcting.
"I thought what I'd do was, I'd pretend I was one of those deaf-mutes." - the Laughing Man
kidmosey
kidmosey
what view is it supposed to be showing?
tirengarfio
tirengarfio
It should show a view inside the cube.

You can draw the path of the 12 steps easily.

heeeeelp :)
kidmosey
kidmosey
well, I don't have glut atm, so I can't test this. But you might want to check your face culling.

If step 6 works, I see no reason step 7 wouldn't (same point), since it is only rotated the opposite direction.

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.