计算机图形学-OpenGL纹理映射

2019-01-26 20:50

计算机图形学与可视化(含OpenGL)实验报告

实验名称:OpenGL纹理映射(实验七) 班级:信09-1 学号:2108190911211 姓名:王杰

【实验目的】

1、掌握GLUT中多面体和二次曲面的生成 2、掌握基本纹理映射 【实验内容】

1、 源程序

#include #include #include #include static GLuint texName; GLfloat angle=0;

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、 运行结果截图

北京建筑工程学院理学院 信息与计算科学


计算机图形学-OpenGL纹理映射.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2006年中考物理模拟试题 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: