eleni@0: #include eleni@0: #include eleni@0: eleni@0: #include eleni@0: #include eleni@0: elene@6: #include "volume.h" eleni@1: eleni@0: //static void init(void); eleni@0: static void display(void); eleni@0: static void reshape(int x, int y); eleni@0: static void keyboard(unsigned char key, int x, int y); eleni@0: static void mouse(int button, int state, int x, int y); eleni@0: static void motion(int x, int y); eleni@0: eleni@0: static int win_xsz, win_ysz; eleni@0: eleni@1: ///////////////////////////// eleni@1: // debug TODO remove eleni@1: //////////////////////////// eleni@1: static bool init(); elene@6: elene@6: static Volume *vol; elene@6: static float cur_z; eleni@1: eleni@0: int main(int argc, char **argv) eleni@0: { eleni@0: glutInit(&argc, argv); eleni@0: glutInitWindowSize(1280, 720); eleni@0: glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); eleni@0: eleni@0: //TODO parse arguments eleni@0: eleni@0: glutCreateWindow("My Colonoscopie OEO!"); eleni@0: eleni@0: glutDisplayFunc(display); eleni@0: glutReshapeFunc(reshape); eleni@0: glutKeyboardFunc(keyboard); eleni@0: glutMouseFunc(mouse); eleni@0: glutMotionFunc(motion); eleni@0: eleni@0: glewInit(); eleni@1: if(!init()) { eleni@1: fprintf(stderr, "Failed to initialize La votre Colonoscopie\n"); eleni@1: return 1; eleni@1: } eleni@0: eleni@0: //call init eleni@0: eleni@0: glutMainLoop(); eleni@0: return 0; eleni@0: } eleni@0: eleni@0: void display(void) eleni@0: { eleni@0: //render elene@6: glBindTexture(GL_TEXTURE_3D, vol->get_texture()); elene@6: glEnable(GL_TEXTURE_3D); eleni@1: glBegin(GL_QUADS); elene@6: glTexCoord3f(0, 0, cur_z); glVertex3f(-1, -1, 0); elene@6: glTexCoord3f(0, 1, cur_z); glVertex3f(-1, 1, 0); elene@6: glTexCoord3f(1, 1, cur_z); glVertex3f(1, 1, 0); elene@6: glTexCoord3f(1, 0, cur_z); glVertex3f(1, -1, 0); eleni@1: glEnd(); elene@6: glDisable(GL_TEXTURE_3D); eleni@0: eleni@0: glutSwapBuffers(); eleni@0: assert(glGetError() == GL_NO_ERROR); eleni@0: } eleni@0: eleni@0: void reshape(int x, int y) eleni@0: { eleni@0: glViewport(0, 0, x, y); eleni@0: if(x != win_xsz || y != win_ysz) { eleni@0: //TODO raytex_needs_recalc = 1; eleni@0: win_xsz = x; eleni@0: win_ysz = y; eleni@0: } eleni@0: } eleni@0: eleni@0: void keyboard(unsigned char key, int x, int y) eleni@0: { eleni@0: switch(key) { eleni@0: case 27: eleni@0: exit(0); eleni@0: default: eleni@0: break; eleni@0: } eleni@0: } eleni@0: eleni@0: static int prev_x, prev_y; eleni@0: void mouse(int bn, int state, int x, int y) eleni@0: { eleni@0: prev_x = x; eleni@0: prev_y = y; eleni@0: } eleni@0: eleni@0: void motion(int x, int y) eleni@0: { eleni@0: int dx = x - prev_x; eleni@0: int dy = y - prev_y; eleni@0: prev_x = x; eleni@0: prev_y = y; elene@6: elene@6: if(dx != 0) { elene@6: cur_z = (float)x / (float)win_xsz; elene@6: glutPostRedisplay(); elene@6: } eleni@0: } eleni@1: eleni@1: bool init() eleni@1: { elene@6: vol = new Volume; elene@6: if(!vol->load("data/test1.vol")) { elene@6: fprintf(stderr, "Failed to load test1.vol"); eleni@1: return false; eleni@1: } elene@6: cur_z = 0.5; eleni@1: eleni@1: return true; eleni@1: }