计算机图形学课程设计报告
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); //打开环境光 glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); //打开漫反射光 glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); //镜面反射光
glShadeModel(GL_SMOOTH); //明使用哪种着色技术,可以取值GL_FLAT和GL_SMOOTH。默认取值是GL_SMOOTH。
glEnable(GL_LIGHTING); //启用灯源
glEnable(GL_LIGHT0); //启用光源,必须启用,否则光照模型无效
glClearColor(1.0, 1.0,1.0,1.0); //glClear利用glClearColor函数设置好的当前清除颜色设置窗口颜色 glMatrixMode (GL_PROJECTION); glLoadIdentity ();
glOrtho(-10.0, 10.0, -10.0, 10.0, -10.0, 10.0);
glMatrixMode (GL_MODELVIEW); glLoadIdentity ();
glMatrixMode (GL_MODELVIEW); glGetFloatv(GL_MODELVIEW_MATRIX, M); glMatrixMode (GL_MODELVIEW); }
int main(intargc, char** argv) {
intbody_menu,wheel_menu,main_menu;
//cout<<\操作规则:(上下左右键控制汽车运动方向,a/k控制加速减速)\ glutInit(&argc,argv); glEnable(GL_TEXTURE_2D);
glEnable(GL_DEPTH_TEST); //启用深度测试。
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH); glutInitWindowSize(500,500); glutInitWindowPosition(150,150); glutCreateWindow(\); init();
glColorMaterial(GL_FRONT,GL_DIFFUSE); glEnable(GL_COLOR_MATERIAL); glutSpecialFunc(specialKeyBoard); glutReshapeFunc(myReshape); glutDisplayFunc(mydisplay);
body_menu=glutCreateMenu(color_car_body_menu); glutAddMenuEntry(\,1); glutAddMenuEntry(\,2); glutAddMenuEntry(\,3);
计算机图形学课程设计报告
glutAddMenuEntry(\,4); glutAddMenuEntry(\,5);
wheel_menu=glutCreateMenu(color_car_wheel_menu); glutAddMenuEntry(\,1); glutAddMenuEntry(\,2); glutAddMenuEntry(\,3); glutAddMenuEntry(\,4); glutAddMenuEntry(\,5);
main_menu=glutCreateMenu(menu);
glutAddSubMenu(\,body_menu); glutAddSubMenu(\,wheel_menu);
glutAttachMenu(GLUT_RIGHT_BUTTON); }
glutMainLoop();//程序运行函数,glutMainLoop()。 return 0;
glutAddMenuEntry(\,3);
2. 帆船模型
#include
#pragmacomment(lib, \) #pragmacomment(lib, \) #pragmacomment(lib, \)
staticint shoulder1 = 0; staticint shoulder2 = 0; staticint hand=0; staticint turn1=0; staticint tag=0;
staticint turn=0 ; //转弯 staticfloat forward=0;//前进
计算机图形学课程设计报告
staticfloat elbow = 0 ,z=0; int w; int h;
int font=(int)GLUT_BITMAP_8_BY_13; char s[30];
intframe,timeOwn,timebase=0;
staticGLfloatxRot = 0.0f; staticGLfloatyRot = 0.0f; //是否停止转动
boolIsStop = false; //光照使用光源
GLfloatlightPos[] = { 1.0f, 0.0f, -1.0f, 0.0f };
GLfloat specular[] = { 1.0f, 1.0f, 1.0f, -1.0f};//反射光 GLfloatspecref[] = { 1.0f, 1.0f, 1.0f, 1.0f };//
GLfloatambientLight[] = { 0.5f, 0.5f, 0.5f, 1.0f};//环绕光 GLfloatspotDir[] = { 0.0f, 0.0f, -1.0f }; GLbooleanbEdgeFlag = true;
GLfloatfogcolor[]={0.5f,0.7f,0.5f,1.0f};
voidshowText(void);
voidresetPerspectiveProjection() ; voidsetOrthographicProjection() ; void Something();
voidrenderBitmapString(float x, float y, void *font,char *string); //设置背景
voidSetupRC(void) {
glEnable(GL_CULL_FACE); glEnable(GL_LIGHTING);
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientLight); glLightfv(GL_LIGHT0,GL_DIFFUSE,ambientLight); glLightfv(GL_LIGHT0,GL_SPECULAR,specular); glLightfv(GL_LIGHT0,GL_POSITION,lightPos);
glLightf(GL_LIGHT0,GL_SPOT_CUTOFF,30.0f); glLightf(GL_LIGHT0,GL_SPOT_EXPONENT,20.0f); glEnable(GL_LIGHT0);
glEnable(GL_COLOR_MATERIAL);
glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
glMaterialfv(GL_FRONT, GL_SPECULAR,specref); glMateriali(GL_FRONT, GL_SHININESS,8);
计算机图形学课程设计报告
glClearColor(1.0f, 1.0f, 1.0f, 1.0f ); }
GLuint texture[2]; // 存储一个纹理 AUX_RGBImageRec *LoadBMP(CHAR *Filename) // 载入位图图象 {
FILE *File=NULL; // 文件句柄
if (!Filename) // 确保文件名已提供 {
returnNULL; // 如果没提供,返回 NULL }
File=fopen(Filename,\); // 尝试打开文件 if (File) // 文件存在么? {
fclose(File); // 关闭句柄
returnauxDIBImageLoadA(Filename); // 载入位图并返回指针 }
returnNULL; // 如果载入失败,返回 NULL }
intLoadGLTextures() // 载入位图(调用上面的代码)并转换成纹理 {
int Status=FALSE; // 状态指示器 AUX_RGBImageRec *TextureImage[2]; // 创建纹理的存储空间 memset(TextureImage,0,sizeof(void *)*1); // 将指针设为 NULL // 载入位图,检查有无错误,如果位图没找到则退出 if
((TextureImage[0]=LoadBMP(\))&&(TextureImage[1]=LoadBMP(\\))) {
Status=TRUE; // 将 Status 设为 TRUE glGenTextures(2, &texture[0]); // 创建纹理
for(int loop=0;loop<2;loop++) {
glBindTexture(GL_TEXTURE_2D,texture[loop]);//绑定纹理
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);//设置滤波glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[loop]->sizeX,
模式
TextureImage[loop]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[loop]->data);//生成纹理
}
计算机图形学课程设计报告
} }
voidDrawCube(void) // 从这里开始进行所有的绘制 {
glLoadIdentity(); // 重置当前的模型观察矩阵 glRotatef(xRot,1.0f,0.0f,0.0f); // 绕X轴旋转 glRotatef(yRot,0.0f,1.0f,0.0f); // 绕Y轴旋转 glTranslatef(0.0f,0.0f,-10.0f); // 移入屏幕 5 个单位 glColor3f(1.0,1.0,0.0); glPushMatrix();
glTranslatef (forward,0.0,z);
glRotatef ((GLfloat) turn, 0.0, 1.0, 0.0);
glBindTexture(GL_TEXTURE_2D, texture[0]); // 选择纹理 glBegin(GL_QUADS); // 右面
glTexCoord2f(1.0f, 0.0f); glVertex3f( 0.0f, 1.5f, 0.0f); // 纹理和四边形的右下 glTexCoord2f(1.0f, 1.0f); glVertex3f( 0.0f, 2.5f, 0.0f); // 纹理和四边形的右上 glTexCoord2f(0.0f, 1.0f); glVertex3f( 0.0f, 2.5f, 1.0f); // 纹理和四边形的左上 glTexCoord2f(0.0f, 0.0f); glVertex3f( 0.0f, 1.5f, 1.0f); // 纹理和四边形的左下
glEnd();
glBindTexture(GL_TEXTURE_2D, texture[1]); // 选择纹理 glBegin(GL_QUADS); // 左面
glTexCoord2f(0.0f, 0.0f); glVertex3f(-0.0f, 1.5f, 0.0f); // 纹理和四边形的左下 glTexCoord2f(1.0f, 0.0f); glVertex3f(-0.0f, 1.5f, 1.0f); // 纹理和四边形的右下 glTexCoord2f(1.0f, 1.0f); glVertex3f(-0.0f, 2.5f, 1.0f); // 纹理和四边形的右上
for (int loop=0; loop<2; loop++) { }
if (TextureImage[loop]!=NULL) { }
if (TextureImage[loop]->data!=NULL) { }
free(TextureImage[loop]);
free(TextureImage[loop]->data);
return Status; // 返回 Status