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[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 (&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;
}