}
void motion(int x,int y) { }
void keyboard(unsigned char key,int x,int y) {
if(flag_move == 0) else { }
switch(flag_xyz) { case 1: case 2: }
glutPostRedisplay(); mousex = x; mousey = y;
movex = x-mousex+movex; movey = -y+mousey+movey; break;
movez = x-mousex+movez; break; return; }
if(key == GLUT_LEFT_BUTTON && state == GLUT_UP) { }
flag_move = 0;
hits = glRenderMode(GL_RENDER); process(hits,select_Buffer); HITS = hits; glutPostRedisplay();
glMatrixMode(GL_PROJECTION); glPopMatrix(); glFlush();
draw(GL_SELECT);
gluLookAt(eyex,eyey,eyez,0,0,0,0,1,0);
case 3:
}
void MenuFunc(int data) {
switch(data) { case 1: switch(key) { case 'x':
eyex -=0.1; break; eyey -=0.1; break; eyez -=0.1; break; eyex +=0.1; break; eyey +=0.1; break; eyez +=0.1; break;
case 'y':
case 'z':
case 'X':
case 'Y':
case 'Z':
case 'h': case 'H':
flag_xyz = 1; break;
case 's': case 'S':
flag_xyz = 2; break;
case 'l': case 'L': }
glutPostRedisplay();
flag_xyz = 3; break; return; break;
default:
}
static GLint ImageWidth; static GLint ImageHeight; static GLint PixelLength; static GLubyte* PixelData;
Data* imageInit(char * path_name){
fseek(pFile, 54, SEEK_SET); fread(PixelData, PixelLength, 1, pFile); // 读取像素数据
PixelData = (GLubyte*)malloc(PixelLength); if( PixelData == 0 )
exit(0); // 计算像素数据长度 PixelLength = ImageWidth * 3; while( PixelLength % 4 != 0 )
++PixelLength; PixelLength *= ImageHeight; // 读取图象的大小信息 fseek(pFile, 0x0012, SEEK_SET);
fread(&ImageWidth, sizeof(ImageWidth), 1, pFile); fread(&ImageHeight, sizeof(ImageHeight), 1, pFile); // 打开文件
FILE* pFile = fopen(path_name, \); if( pFile == 0 ) { }
printf(\文件未找到\); exit(0); }
glutPostRedisplay();
flag_light = 0; break; flag_light = 1; break; break;
case 2:
default:
} int Menu;
int main(int argc,char ** argv) { }
glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE|GLUT_DEPTH); glutInit(&argc,argv);
glutInitWindowSize(wide_screen,height_screen); glutCreateWindow(argv[0]); init();
Menu = glutCreateMenu(MenuFunc); glutAddMenuEntry(\关闭光源!\,1); glutAddMenuEntry(\打开光源!\,2); glutAttachMenu(GLUT_RIGHT_BUTTON); glutDisplayFunc(display); glutKeyboardFunc(keyboard); glutMouseFunc(mouse); glutMotionFunc(motion); glutKeyboardFunc(keyboard); glutReshapeFunc(reshape); glutMainLoop(); return 0;
char* tupian[4]={\,\,\,\}; for(int i=0;i<4;i++){ }
data[i] = imageInit(tupian[i]); // 关闭文件 fclose(pFile);
Data* rv = (Data *)malloc(sizeof(Data)); rv->image_data = PixelData; rv->width = ImageWidth; rv->height = ImageHeight; return rv;
七.实验结果:
开灯之后的情况