#include <GL/glut.h> #include <stdio.h> #include <stdlib.h> #include <math.h> //vector structure struct vector { float x; float y; float z; float posx; float posy; float posz; }; struct vertex { float x; float y; float z; }; struct cubelet { int ID; int faceColors[6]; struct cubelet *children[3][8]; }; //constants #define TRANSLATE 0 #define SCALE 1 #define ROTATE 2 #define RED 0 #define ORANGE 1 #define WHITE 2 #define BLUE 3 #define GREEN 4 #define YELLOW 5 #define BLACK 6 #define GREY 7 #define FRONT 0 #define BACK 1 #define TOP 2 #define BOTTOM 3 #define LEFT 4 #define RIGHT 5 #define FR 0 #define BA 2 #define LE 0 #define RI 2 #define BO 0 #define TO 2 #define MID 1 #define CLOCKWISE 10 #define C_CLOCKWISE 20 #define X_AXIS 0 #define Y_AXIS 1 #define Z_AXIS 2 #define C_W .3 //cubelet width #define ANGLE_INCREMENT 5 #define PICK_REGION 5 #define BUFSIZE 512 //function declarations float dot(struct vector *, struct vector *); struct vector *cross_product(struct vector *, struct vector *); void drawCube(); void display(); void reshape(int, int); float p2w_x(int); float p2w_y(int); void mouse(int, int, int, int); void mouseMove(int, int); void keyboard(unsigned char, int, int); void initialize_vectors(); void setColor(int); void drawCubelet(struct cubelet *, struct vertex *); void initCube(); void setFaceColor(int,int); void updateHierarchy(); void rotateSlice(int,int,int); void initCenterPositions(); void resetCubeletFaces(struct cubelet *); void rotateCubelet(int,int,struct cubelet *); void animateTurn(int,int,int); void idle(); void renderObjs(); int doPicking(int, int); void rotateSlice(int,int); int getCubeletLocation(int); void drawFacesPicking(); float p2i_x(int); float p2i_y(int); void trackBall();