- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
正六面体贴
目 录
TOC \o 1-3 \h \u HYPERLINK \l _Toc27168 【设计题目及说明】 PAGEREF _Toc27168 2
HYPERLINK \l _Toc27341 设计需求 PAGEREF _Toc27341 2
HYPERLINK \l _Toc25559 设计分析 PAGEREF _Toc25559 3
HYPERLINK \l _Toc28344 【程序代码】 PAGEREF _Toc28344 3
HYPERLINK \l _Toc30342 【程序流程图】 PAGEREF _Toc30342 9
HYPERLINK \l _Toc5433 【参考文献】 PAGEREF _Toc5433 12
【设计题目及说明】
设计需求
以3维坐标xyz的原点为正方形体体心绘制一个正方体,任选六张图片,将图片作为纹理贴图映射到旋转的立方体的6个表面上。我选用的图片是一下6个图:
实现的效果图:
具体说明:
导入6张图片,分别读取图片的信息,作为正方体表面的纹理。
将每张图片绑定在正方体表面上,以图片每个像素的颜色填充正方体表面。
使用键盘:“1”暂停正方体旋转,“2”开始旋转,“esc”退出播放。
位图图片存放在data文件夹中。
运行环境需安装opengl库函数。
开发工具:visual C++ 6.0。
设计分析
本次设计的目的是对正六面体进行纹理映射,使用六张不同的图片作为纹理,分别映射到六面体的六个面上。
设计步骤:
创建纹理对象并指定纹理。
指定纹理应用。
启用纹理。
指定纹理坐标。
纹理映射需要建立纹理(u,v)与物体空间坐标(x,y,z的映射关系,也就是把物体空间的x,y,z和,u,v建立等式关系。
【程序代码】
#include windows.h
#include gl\GL.h
#include gl\GLU.h
#include gl\GLAux.h
#include stdio.h
#include gl\glut.h
#pragma comment (lib,glaux)
GLfloat xrot=0;
GLfloat yrot=0;
GLfloat zrot=0;
GLuint texture[6];
bool flag = true;
void Reshape(int w, int h)
{
glViewport(0,0,w,h); // 重置当前的视口
glMatrixMode(GL_PROJECTION);
glLoadIdentity( );
gluPerspective(45.0f, (GLfloat)w/(GLfloat)h, 0.1f, 100.0f); //// 设置视口的大小
glMatrixMode(GL_MODELVIEW);
glLoadIdentity( );
}
//获得位图
AUX_RGBImageRec *LoadBMP(char *Filename)
{
FILE *File=NULL;
if (!Filename)
{
return NULL;
}
File=fopen(Filename,r);
if (File)
{
fclose(File);
return auxDIBImageLoad(Filename);
}
return NULL;
}
// 位图转换成纹理
int LoadGLTextures()
{
int Status=FALSE;
AUX_RGBImageRec *TextureImage[6];
memset(TextureImage,0,sizeof(AUX_RGBImageRec *)*6);
if ((TextureImage[0] = LoadBMP(data/image1.bmp))(TextureImage[1] = LoadBMP(data/image2.bmp))
(TextureImage[2] = LoadBMP(data/image3.bmp))(TextureImage[3] = LoadBMP(data/image4.bmp))
(TextureImage[4] = LoadBMP(data/image5.bmp))(TextureIm
文档评论(0)