-
大小: 356KB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2021-05-22
- 語言: 其他
- 標(biāo)簽:
資源簡(jiǎn)介
做的是把一個(gè)旋轉(zhuǎn)立方體的6個(gè)面貼上6幅不同的圖片,設(shè)置了兩個(gè)鍵盤控制,一個(gè)是通過glutKeyboardFunc(keyboard);來控制燈光的開和關(guān),用glutSpecialFunc(special);來分別改變立方體延x,y,z軸的旋轉(zhuǎn)角度。

代碼片段和文件信息
#pragma?comment?(lib“glaux.lib“)?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
GLuint?texture[6];????//存儲(chǔ)紋理數(shù)據(jù)
GLfloat?x?=?0.0fy?=?0.0fz?=?0.0f;//旋轉(zhuǎn)角度
GLfloat?deltax?=?0.0fdeltay?=?0.0f;//旋轉(zhuǎn)變化量
GLfloat?depth?=?0.0f;//縮放變化量
bool?lightlp;
GLfloat?LightAmbient[]?=?{0.0f0.0f1.0f1.0f};//環(huán)境光顏色:藍(lán)色
GLfloat?LightDiffuse[]?=?{1.0f1.0f1.0f1.0f};//散射光顏色
GLfloat?LightPosition[]?=?{0.0f0.0f2.0f1.0f};//指定光源的位置
AUX_RGBImageRec?*LoadBMP(char?*Filename) //?載入位圖圖象?
{
FILE?*File=NULL;
if?(!Filename) //確定給定的文件名有效
{
return?NULL; //?如果沒提供,返回?NULL???
}
File?=?fopen(Filename“r“); //?打開文件
if?(File)?
{
fclose(File); //?關(guān)閉文件句柄
File?=?NULL;
return?auxDIBImageLoad(Filename);???????//?載入位圖并返回指針
}
return?NULL; //?如果載入失敗,返回?NULL???
}
int?LoadGLTextures()?????????//?根據(jù)加載的位圖創(chuàng)建紋理
{
int?Status=FALSE;?????????//?指示紋理創(chuàng)建是否成功的標(biāo)志
AUX_RGBImageRec?*TextureImage[6];?????//?創(chuàng)建一個(gè)紋理圖像數(shù)組,這里指定數(shù)組大小為6
memset(TextureImage0sizeof(void?*)*6);???????????//?初始化紋理圖像數(shù)組,為其分配內(nèi)存
char?*pictures[]?=?{?//?創(chuàng)建一個(gè)位圖名稱數(shù)組,對(duì)應(yīng)6幅位圖
“d:/我的文檔/Visual?Studio?2005/Projects/黃美燕的作業(yè)/Data/data1.bmp“
“d:/我的文檔/Visual?Studio?2005/Projects/黃美燕的作業(yè)/Data/data2.bmp“
“d:/我的文檔/Visual?Studio?2005/Projects/黃美燕的作業(yè)/Data/data3.bmp“
“d:/我的文檔/Visual?Studio?2005/Projects/黃美燕的作業(yè)/Data/data4.bmp“
“d:/我的文檔/Visual?Studio?2005/Projects/黃美燕的作業(yè)/Data/data5.bmp“
“d:/我的文檔/Visual?Studio?2005/Projects/黃美燕的作業(yè)/Data/data6.bmp“
};
for(int?i=0;?i<6;?i++)?//?遍歷位圖名稱數(shù)組,根據(jù)位圖名稱分別生成
{
if?(TextureImage[i]=LoadBMP(pictures[i]))?//?加載位圖i成功,修改狀態(tài)標(biāo)志變量Status為TRUE
{
Status=TRUE;???????
glGenTextures(1?&texture[i]);?????//?為第i個(gè)位圖創(chuàng)建紋理
glBindTexture(GL_TEXTURE_2D?texture[i]);?//?將生成的紋理的名稱綁定到指定的紋理上
glTexImage2D(GL_TEXTURE_2D?0?3?TextureImage[i]->sizeX?TextureImage[i]->sizeY?0?GL_RGB?GL_UNSIGNED_BYTE?TextureImage[i]->data);//用來指定二維紋理圖像
glTexParameteri(GL_TEXTURE_2DGL_TEXTURE_MIN_FILTERGL_LINEAR);//實(shí)現(xiàn)線形濾波的功能,當(dāng)紋理映射到圖形表面以后,如果因?yàn)槠渌鼦l件的設(shè)置導(dǎo)致紋理不能更好地顯示的時(shí)候,進(jìn)行過濾,按照指定的方式進(jìn)行顯示,可能會(huì)過濾掉顯示不正常的紋理像素。
glTexParameteri(GL_TEXTURE_2DGL_TEXTURE_MAG_FILTERGL_LINEAR);//線性濾波
}
if?(TextureImage[i])?????????//?紋理是否存在
{
if?(TextureImage[i]->data)?//?紋理圖像是否存在??????
{
free(TextureImage[i]->data);?//?釋放紋理圖像占用的內(nèi)存??
}
free(TextureImage[i]);?//?釋放圖像結(jié)構(gòu)???????
}
}
return?Status;??????????//?創(chuàng)建紋理并加載,返回成功或者失敗的標(biāo)志Status
}
void?reshape(int?wint?h)
{
glViewport(00(GLsizei)w(GLsizei)h);//?指定視口的位置和大小
glMatrixMode(GL_PROJECTION);//?切換當(dāng)前矩陣到投影矩陣
glLoadIdentity();//?設(shè)置投影矩陣為一個(gè)單位矩陣
gluPerspective(6015-5);//設(shè)置透視投影矩陣
glMatrixMode(GL_MODELVIEW);//?切換當(dāng)前矩形到模型視景矩陣
glLoadIdentity();//?設(shè)置模型視景矩陣為一個(gè)單位矩陣
gluLookAt(0.00.010.00.00.00.00.01.00.0);//設(shè)置眼睛參數(shù)
}
void?display(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);?
glPushMatrix()
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????10413??2011-01-06?10:17??opengl紋理貼圖\aa.cpp
?????文件?????196662??2011-01-04?12:48??opengl紋理貼圖\Data\data1.bmp
?????文件?????196662??2011-01-04?12:48??opengl紋理貼圖\Data\data2.bmp
?????文件?????196662??2011-01-04?12:48??opengl紋理貼圖\Data\data3.bmp
?????文件?????196662??2011-01-04?12:48??opengl紋理貼圖\Data\data4.bmp
?????文件?????196662??2011-01-04?12:48??opengl紋理貼圖\Data\data5.bmp
?????文件?????196662??2011-01-04?12:49??opengl紋理貼圖\Data\data6.bmp
????..A.SH.?????82944??2011-01-04?12:49??opengl紋理貼圖\Data\Thumbs.db
?????目錄??????????0??2011-03-11?17:04??opengl紋理貼圖\Data
?????目錄??????????0??2011-03-11?17:04??opengl紋理貼圖
-----------?---------??----------?-----??----
??????????????1273329????????????????????10
評(píng)論
共有 條評(píng)論