计算机图形学与可视化(含OpenGL)实验报告
实验名称:OpenGL纹理映射(实验七) 班级:信09-1 学号:2108190911211 姓名:王杰
【实验目的】
1、掌握GLUT中多面体和二次曲面的生成 2、掌握基本纹理映射 【实验内容】
1、 源程序
#include
GLuint LoadBMPTo2DTexture(const char *pName, int nSize) { int m_nSizeImage; BITMAPFILEHEADER bmpFileHeader; BITMAPINFOHEADER bmpInfoHeader; ifstream bmpFile; bmpFile.open(pName, ios::binary); // be careful, here must be binary written. bmpFile.read((char*)&bmpFileHeader, sizeof(BITMAPFILEHEADER)); bmpFile.read((char*)&bmpInfoHeader, sizeof(BITMAPINFOHEADER)); if (bmpFileHeader.bfType != 0x4D42) // it's not a bitmap file. return 0; unsigned char *pImage; int nTexSize; int nBytesPerPixel; nBytesPerPixel = bmpInfoHeader.biBitCount/8; nTexSize = nSize * nSize * nBytesPerPixel; pImage = new unsigned char[nTexSize]; memset(pImage, 0, nTexSize); m_nSizeImage = bmpFileHeader.bfSize - sizeof(BITMAPFILEHEADER) sizeof(BITMAPINFOHEADER); bmpFile.read((char*)pImage, m_nSizeImage); /* Create texture */ GLuint texName; glGenTextures(1, &texName);
北京建筑工程学院理学院 信息与计算科学
-
计算机图形学与可视化(含OpenGL)实验报告
glBindTexture(GL_TEXTURE_2D, texName); /* Wrap parameter for texture coordinate s, t and r */ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); /* User linear filter for magnification / minification */ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); // The internal format use texture compress, frame rate raised from 20 to 40, // and save about 70Mb system memory. glTexImage2D(GL_TEXTURE_2D, /* target */ 0, /* MIPMAP level, 0 == base image */ GL_RGB,//GL_COMPRESSED_RGB_ARB,//GL_RGB, internal format */ nSize, nSize, 0, /* width of border */ GL_BGR_EXT, /* format of pixel data */ GL_UNSIGNED_BYTE, /* type of the pixel data */ pImage); bmpFile.close(); return texName; }
void init(void) {
glClearColor(1.0,1.0,1.0,0.0); glShadeModel(GL_SMOOTH); texName=LoadBMPTo2DTexture(\}
void display(void) {
angle=angle+0.05; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glPushMatrix(); gluLookAt(0.0,0.0,5.0,0.0,0.0,0.0,0.0,1.0,0.0); glScalef(0.5,0.5,0.5); glRotatef(angle,0.0,1.0,0.0); glRotatef(angle,1.0,0.0,0.0); glEnable(GL_TEXTURE_2D); glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE); glBindTexture(GL_TEXTURE_2D,texName); glBegin ( GL_TEXTURE_2D ); glBegin(GL_QUADS);
北京建筑工程学院理学院 信息与计算科学
/*
计算机图形学与可视化(含OpenGL)实验报告
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); glEnd(); glEnd ( );
glDisable ( GL_TEXTURE_2D ); glPopMatrix(); glFlush(); glDisable(GL_TEXTURE_2D); glutSwapBuffers(); }
void reshape(int w, int h) {
glViewport(0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity();
glFrustum(-1.0,1.0,-1.0,1.0,3.0,9.0); glMatrixMode(GL_MODELVIEW);
北京建筑工程学院理学院 信息与计算科学
计算机图形学与可视化(含OpenGL)实验报告
glLoadIdentity(); }
int main(int argc, char** argv) {
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH); glutInitWindowSize(500,500); glutInitWindowPosition(100,100); glutCreateWindow(argv[0]); init();
glutDisplayFunc(display); glutIdleFunc(display);
glutReshapeFunc(reshape); glutMainLoop(); return 0; }
2、 运行结果截图
北京建筑工程学院理学院 信息与计算科学