printf("%s: %d %d\n", filename, info->bmiHeader.biWidth, info->bmiHeader.biHeight); printf("read %s successfully\n", filename); *w = info->bmiHeader.biWidth; *h = info->bmiHeader.biHeight; /* * Free the bitmap and RGB images, then return 0 (no errors). */ free(info); free(bits); return (rgb); } GLubyte *texground = TextureLoadBitmap("grass.bmp", &texground_w, &texground_h); GLubyte *texball = TextureLoadBitmap("ball.bmp", &texball_w, &texball_h); GLubyte *texcar = TextureLoadBitmap("car.bmp", &texcar_w, &texcar_h); TrainView::TrainView(int x, int y, int w, int h, const char* l) : Fl_Gl_Window(x,y,w,h,l) { mode( FL_RGB|FL_ALPHA|FL_DOUBLE | FL_STENCIL ); resetArcball(); curveMode = CurveModeCatmull; trackMode = TrackModeNormal; trainHeadPoint = NULL; trainHeadTarget = NULL; } void TrainView::resetArcball()
void init() { // Clear Screen color //glEnable(GL_COLOR_MATERIAL); glClearColor(0.0,0.3,0.6,0.6); glClear(GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT); glEnable(GL_DEPTH_TEST); glShadeModel(GL_SMOOTH); // Texture mapping setting for Microsoft's OpenGL implementation glPixelStorei(GL_UNPACK_ALIGNMENT, 4); glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); glPixelStorei(GL_UNPACK_SKIP_ROWS, 0); glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0); /* Add code here to initialize lighting, read bitmap images, initialize different GLU geometry * use glLight, TextureLoadBitmap, gluNewQuadric...etc */ //light 0 //position //GLfloat light0pos[] = {-1.f, -1.f, 1.f, 0.f}; GLfloat light0pos[] = {0.f, 0.f, 1.f, 1.f}; //ambient GLfloat light0_emb[] = {0.1, 0.1, 0.1, 1.f}; //diffuse GLfloat light0_diff1[] = {1.0, 1.0, 1.0, 1.f}; glLightfv(GL_LIGHT0, GL_POSITION, light0pos); glLightfv(GL_LIGHT0, GL_AMBIENT, light0_emb); glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diff1); //glEnable(GL_LIGHT2); //Init ground texture groundImage = TextureLoadBitmap("kawori.bmp",&groundTex_w,&groundTex_h); glGenTextures(1,&groundTex); glBindTexture(GL_TEXTURE_2D,groundTex); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); //Assign the image to a texture glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, groundTex_w, groundTex_h, 0, GL_RGB, GL_UNSIGNED_BYTE, groundImage); carImage = TextureLoadBitmap("car.bmp", &carTex_w, &carTex_h); glGenTextures(1,&carTex); glBindTexture(GL_TEXTURE_2D,carTex); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); //Assign the image to a texture glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, carTex_w, carTex_h, 0, GL_RGB, GL_UNSIGNED_BYTE, carImage); //init texture to wheel wheelImage = TextureLoadBitmap("wheel.bmp", &wheelTex_w, &wheelTex_h); glGenTextures(1,&wheelTex); glBindTexture(GL_TEXTURE_2D,wheelTex); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); //Assign the image to a texture glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, wheelTex_w, wheelTex_h, 0, GL_RGB, GL_UNSIGNED_BYTE, wheelImage); // init quadric object cylinder = gluNewQuadric(); gluQuadricTexture(cylinder, GL_TRUE); //light1,car light double inten_mat = 0.9*4; double inten_diff = 0.9*4; static GLfloat light1_mat[] = {inten_mat, inten_mat, 0, 0.9f }; //static GLfloat light1_diff[] = {inten_diff, inten_diff, 0, 0.9f }; glLightModelf(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE); glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE); glEnable(GL_LIGHT1); glLightfv(GL_LIGHT1, GL_AMBIENT, light1_mat); glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, 25.f); glLightf(GL_LIGHT1,GL_SPOT_EXPONENT,100); glLightf(GL_LIGHT1, GL_CONSTANT_ATTENUATION, 0.1); glLightf(GL_LIGHT1, GL_LINEAR_ATTENUATION, 0.0); glLightf(GL_LIGHT1, GL_QUADRATIC_ATTENUATION, 0.0); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); }