main.cpp
#include <GL/glut.h> #include <GL/gl.h> #include <GL/glu.h> //#include "Texture.hpp" float xrot, yrot, zrot; //TTexture *tex1; const GLubyte ix[6][4] = { {0,1,2,3}, {4,5,6,7}, {8,9,10,11}, {12,13,14,15}, {16,17,18,19},{20,21,22,23} }; GLfloat normal[6][4][3] ={ {{0.0f,0.0f,1.0f},{0.0f,0.0f,1.0f},{0.0f,0.0f,1.0f},{0.0f,0.0f,1.0f}},//front {{0.0f,0.0f,-1.0f},{0.0f,0.0f,-1.0f},{0.0f,0.0f,-1.0f},{0.0f,0.0f,-1.0f}},//back {{0.0f,1.0f,0.0f},{0.0f,1.0f,0.0f},{0.0f,1.0f,0.0f},{0.0f,1.0f,0.0f}},//top {{0.0f,-1.0f,0.0f},{0.0f,-1.0f,0.0f},{0.0f,-1.0f,0.0f},{0.0f,-1.0f,0.0f}},//botom {{1.0f,0.0f,0.0f},{1.0f,0.0f,0.0f},{1.0f,0.0f,0.0f},{1.0f,0.0f,0.0f}},//right {{-1.0f,0.0f,0.0f},{-1.0f,0.0f,0.0f},{-1.0f,0.0f,0.0f},{-1.0f,0.0f,0.0f}}//left }; GLfloat col[6][4][3] ={ {{1.0f,0.0f,0.0f},{1.0f,0.0f,0.0f},{1.0f,0.0f,0.0f},{1.0f,0.0f,0.0f}}, {{1.0f,0.0f,0.0f},{1.0f,0.0f,0.0f},{1.0f,0.0f,0.0f},{1.0f,0.0f,0.0f}}, {{0.0f,0.0f,1.0f},{0.0f,0.0f,1.0f},{0.0f,0.0f,1.0f},{0.0f,0.0f,1.0f}}, {{0.0f,0.0f,1.0f},{0.0f,0.0f,1.0f},{0.0f,0.0f,1.0f},{0.0f,0.0f,1.0f}}, {{0.0f,1.0f,0.0f},{0.0f,1.0f,0.0f},{0.0f,1.0f,0.0f},{0.0f,1.0f,0.0f}}, {{0.0f,1.0f,0.0f},{0.0f,1.0f,0.0f},{0.0f,1.0f,0.0f},{0.0f,1.0f,0.0f}} }; GLfloat vx[6][4][3] ={ {{-1.0f, -1.0f, 1.0f},{ 1.0f, -1.0f, 1.0f},{1.0f, 1.0f, 1.0f},{-1.0f, 1.0f, 1.0f}}, {{-1.0f, -1.0f, -1.0f},{-1.0f, 1.0f, -1.0f},{1.0f, 1.0f, -1.0f},{1.0f, -1.0f, -1.0f}}, {{-1.0f, 1.0f, -1.0f},{-1.0f, 1.0f, 1.0f},{1.0f, 1.0f, 1.0f},{1.0f, 1.0f, -1.0f}}, {{-1.0f, -1.0f, -1.0f},{1.0f, -1.0f, -1.0f},{1.0f, -1.0f, 1.0f},{-1.0f, -1.0f, 1.0f}}, {{1.0f, -1.0f, -1.0f},{1.0f, 1.0f, -1.0f},{1.0f, 1.0f, 1.0f},{1.0f, -1.0f, 1.0f}}, {{-1.0f, -1.0f, -1.0f},{-1.0f, -1.0f, 1.0f},{-1.0f, 1.0f, 1.0f},{-1.0f, 1.0f, -1.0f}} }; void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glTranslatef(0,0,-5); glRotatef(xrot,1.0f,0.0f,0.0f); glRotatef(yrot,0.0f,1.0f,0.0f); glRotatef(zrot,0.0f,0.0f,1.0f); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState( GL_COLOR_ARRAY ); glEnableClientState(GL_NORMAL_ARRAY); glVertexPointer(3 , GL_FLOAT , 0 , vx); glColorPointer( 3, GL_FLOAT, 0, col ); glNormalPointer(GL_FLOAT, 0, normal); glDrawElements(GL_QUADS , 24 , GL_UNSIGNED_BYTE , ix); glDisableClientState(GL_COLOR_ARRAY); glDisableClientState(GL_NORMAL_ARRAY); glDisableClientState(GL_VERTEX_ARRAY); xrot+=1.0f; yrot+=1.0f; zrot+=0.0f; glutSwapBuffers(); } void onKeyboard(unsigned char key, int x, int y) { switch (key) { case '\033': exit(0); default: break; } } void onMouse(int button, int state, int x, int y) { switch (button) { case GLUT_LEFT_BUTTON: break; case GLUT_MIDDLE_BUTTON: break; case GLUT_RIGHT_BUTTON: break; default: break; } } void onReshape(int width, int height) { if (height==0) height=1; if (width==0) width=1; glViewport(0,0,width,height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void timer(int value) { glutPostRedisplay(); glutTimerFunc(30 , timer , 0); } void glInit(void) { glClearColor(0.9, 0.9, 0.9, 1.0); glShadeModel(GL_SMOOTH); glClearDepth(1.0f); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); } void glLightingInit() { glColorMaterial(GL_FRONT,GL_AMBIENT_AND_DIFFUSE); glEnable(GL_COLOR_MATERIAL); glEnable(GL_LIGHT0); glEnable(GL_LIGHTING); glEnable(GL_NORMALIZE); } void init() { //tex1 = new TTexture("tartan1.bmp"); } int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); glutInitWindowSize(750,750); int window = glutCreateWindow(argv[0]); glutDisplayFunc(display); glutReshapeFunc(onReshape); glutMouseFunc(onMouse); glutKeyboardFunc(onKeyboard); glutTimerFunc(50 , timer , 0); glInit(); init(); glLightingInit(); glutMainLoop(); //delete tex1; return 1; }
コメントをかく