glLightfv(GL_LIGHT0,GL_POSITION,light_position); glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient); glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse); glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular); //设置材质参数
GLfloat material_ambient[]={0.2f,0.2f,0.2f,0.2f}; GLfloat material_diffuse[]={0.2f,0.8f,0.4f,0.8f}; GLfloat material_specular[]={0.2f,0.8f,0.4f,0.8f}; GLfloat material_emission[]={0.2f,0.2f,0.2f,1.0f}; GLfloat material_shiness[]={10.0f};
glMaterialfv(GL_BACK,GL_DIFFUSE,material_diffuse); glMaterialfv(GL_BACK,GL_SPECULAR,material_specular); glMaterialfv(GL_BACK,GL_EMISSION,material_emission); glMaterialfv(GL_BACK,GL_SHININESS,material_shiness); glColor3f(1.0f,0.0f,0.0f);//红色 glRotated(60.0,1.0,1.0,1.0); auxSolidTeapot(2.0);
SwapBuffers(pDC->m_hDC); //双缓冲 wglMakeCurrent(NULL,NULL);
glMaterialfv(GL_BACK,GL_AMBIENT,material_ambient);//FRONT_AND_BACK
实验结果:
实验四 纹理映射
一:实验目的
1. 掌握二维纹理映射方法。
2. 掌握利用OpenGL编写绘制具有真实感效果的图形方法。
二:实验内容
掌握二维纹理映射方法。
三:实验要求
通过本实验,掌握掌握二维纹理映射方法。
四:实验程序
实验步骤1~4与上述实验1相同
5在OpenGLPlatView.cpp中OnDraw函数中添加以下代码:
wglMakeCurrent(pDC->m_hDC,m_hRC);
glClearColor(1.0f,1.0f,1.0f,1.0f);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glEnable(GL_COLOR_MATERIAL); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_NORMALIZE); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS); glLoadIdentity();
GLfloat light_position[]={1.0f,1.0f,1.0f,0.0f}; GLfloat light_ambient[]={0.2f,0.2f,0.2f,0.2f}; GLfloat light_diffuse[]={0.5f,0.5f,0.2f,0.2f}; GLfloat light_specular[]={0.5f,0.5f,0.5f,0.2f}; glLightfv(GL_LIGHT0,GL_POSITION,light_position); glLightfv(GL_LIGHT0,GL_AMBIENT,light_ambient); glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse); glLightfv(GL_LIGHT0,GL_SPECULAR,light_specular); //设置材质参数
GLfloat material_ambient[]={0.2f,0.2f,0.2f,0.2f}; GLfloat material_diffuse[]={0.2f,0.8f,0.4f,0.8f};
glEnable(GL_AUTO_NORMAL);
glMatrixMode(GL_MODELVIEW); //设置光源参数
GLfloat material_specular[]={0.2f,0.8f,0.4f,0.8f}; GLfloat material_emission[]={0.2f,0.2f,0.2f,1.0f}; GLfloat material_shiness[]={10.0f};
glMaterialfv(GL_BACK,GL_DIFFUSE,material_diffuse); glMaterialfv(GL_BACK,GL_SPECULAR,material_specular); glMaterialfv(GL_BACK,GL_EMISSION,material_emission); glMaterialfv(GL_BACK,GL_SHININESS,material_shiness); glRotated(80.0,1.0,1.0,1.0);
AUX_RGBImageRec *picture=auxDIBImageLoad(_T(\));//(此处图片路径为C盘根目if(picture!=NULL) { }
glBegin(GL_QUADS); glColor3f(0.0,1.0,0.0);
glTexCoord2d(-2.0,-2.0);glVertex3d(-2.5,-2.5,3); glTexCoord2d(-2.0,2.0);glVertex3d(2.5,-2.5,3); glTexCoord2d(2.0,2.0);glVertex3d(2.5,2.5,3); glTexCoord2d(2.0,-2.0);glVertex3d(-2.5,2.5,3); glColor3f(1.0,1.0,0.0);
glTexCoord2d(0.0,0.0);glVertex3d(-2.5,2.5,0); glTexCoord2d(0.0,1.0);glVertex3d(2.5,2.5,0); glTexCoord2d(1.0,1.0);glVertex3d(2.5,2.5,3); glTexCoord2d(1.0,0.0);glVertex3d(-2.5,2.5,3); glColor3f(1.0,0.0,1.0);
glEnable(GL_TEXTURE_2D);
glPixelStorei(GL_UNPACK_ALIGNMENT,1); glTexImage2D(GL_TEXTURE_2D,//二维纹理
0,//纹理层次 3,//颜色分量个数
picture->sizeX,//纹理宽度 picture->sizeY,//纹理高度 0,//纹理边框宽度(或) GL_RGB,//像素数据格式
GL_UNSIGNED_BYTE,//像素数据类型 picture->data);//存储图象数据
glMaterialfv(GL_BACK,GL_AMBIENT,material_ambient);//FRONT_AND_BACK
录下)
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);
glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE);//GL_DECAL,GL_
glTexCoord2d(0.4,0.4);glVertex3d(-2.5,-2.5,0); glTexCoord2d(0.4,0.6);glVertex3d(-2.5,-2.5,3); glTexCoord2d(0.6,0.6);glVertex3d(-2.5,2.5,3); glTexCoord2d(0.4,0.4);glVertex3d(-2.5,2.5,0); glEnd();
SwapBuffers(pDC->m_hDC); //双缓冲 wglMakeCurrent(NULL,NULL); if (picture!=NULL) {
delete picture->data; delete picture; } // if结构结束 // 添加新的代码结束。
// //////////////////////////////////////////////////////////