資源簡介
做的是把一個旋轉立方體的6個面貼上6幅不同的圖片,設置了兩個鍵盤控制,一個是通過glutKeyboardFunc(keyboard);來控制燈光的開和關,用glutSpecialFunc(special);來分別改變立方體延x,y,z軸的旋轉角度。

代碼片段和文件信息
#pragma?comment?(lib“glaux.lib“)?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
GLuint?texture[6];????//存儲紋理數據
GLfloat?x?=?0.0fy?=?0.0fz?=?0.0f;//旋轉角度
GLfloat?deltax?=?0.0fdeltay?=?0.0f;//旋轉變化量
GLfloat?depth?=?0.0f;//縮放變化量
bool?lightlp;
GLfloat?LightAmbient[]?=?{0.0f0.0f1.0f1.0f};//環境光顏色:藍色
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); //?關閉文件句柄
File?=?NULL;
return?auxDIBImageLoad(Filename);???????//?載入位圖并返回指針
}
return?NULL; //?如果載入失敗,返回?NULL???
}
int?LoadGLTextures()?????????//?根據加載的位圖創建紋理
{
int?Status=FALSE;?????????//?指示紋理創建是否成功的標志
AUX_RGBImageRec?*TextureImage[6];?????//?創建一個紋理圖像數組,這里指定數組大小為6
memset(TextureImage0sizeof(void?*)*6);???????????//?初始化紋理圖像數組,為其分配內存
char?*pictures[]?=?{?//?創建一個位圖名稱數組,對應6幅位圖
“d:/我的文檔/Visual?Studio?2005/Projects/黃美燕的作業/Data/data1.bmp“
“d:/我的文檔/Visual?Studio?2005/Projects/黃美燕的作業/Data/data2.bmp“
“d:/我的文檔/Visual?Studio?2005/Projects/黃美燕的作業/Data/data3.bmp“
“d:/我的文檔/Visual?Studio?2005/Projects/黃美燕的作業/Data/data4.bmp“
“d:/我的文檔/Visual?Studio?2005/Projects/黃美燕的作業/Data/data5.bmp“
“d:/我的文檔/Visual?Studio?2005/Projects/黃美燕的作業/Data/data6.bmp“
};
for(int?i=0;?i<6;?i++)?//?遍歷位圖名稱數組,根據位圖名稱分別生成
{
if?(TextureImage[i]=LoadBMP(pictures[i]))?//?加載位圖i成功,修改狀態標志變量Status為TRUE
{
Status=TRUE;???????
glGenTextures(1?&texture[i]);?????//?為第i個位圖創建紋理
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);//實現線形濾波的功能,當紋理映射到圖形表面以后,如果因為其它條件的設置導致紋理不能更好地顯示的時候,進行過濾,按照指定的方式進行顯示,可能會過濾掉顯示不正常的紋理像素。
glTexParameteri(GL_TEXTURE_2DGL_TEXTURE_MAG_FILTERGL_LINEAR);//線性濾波
}
if?(TextureImage[i])?????????//?紋理是否存在
{
if?(TextureImage[i]->data)?//?紋理圖像是否存在??????
{
free(TextureImage[i]->data);?//?釋放紋理圖像占用的內存??
}
free(TextureImage[i]);?//?釋放圖像結構???????
}
}
return?Status;??????????//?創建紋理并加載,返回成功或者失敗的標志Status
}
void?reshape(int?wint?h)
{
glViewport(00(GLsizei)w(GLsizei)h);//?指定視口的位置和大小
glMatrixMode(GL_PROJECTION);//?切換當前矩陣到投影矩陣
glLoadIdentity();//?設置投影矩陣為一個單位矩陣
gluPerspective(6015-5);//設置透視投影矩陣
glMatrixMode(GL_MODELVIEW);//?切換當前矩形到模型視景矩陣
glLoadIdentity();//?設置模型視景矩陣為一個單位矩陣
gluLookAt(0.00.010.00.00.00.00.01.00.0);//設置眼睛參數
}
void?display(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);?
glPushMatrix()
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????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
評論
共有 條評論