資源簡介
本例使用了opengl的基礎(chǔ)知識(shí),實(shí)現(xiàn)了星星公轉(zhuǎn),自轉(zhuǎn),閃爍的效果。
代碼片段和文件信息
//?OpenGLWindow.cpp?:?定義應(yīng)用程序的入口點(diǎn)。
//
#include?“stdafx.h“
#include?“OpenGLWindow.h“
#include?//標(biāo)準(zhǔn)輸入輸出庫頭文件
#include?
#define?MAX_LOADSTRING?100
//?全局變量:?
HINSTANCE?hInst; //?當(dāng)前實(shí)例
TCHAR?sztitle[MAX_LOADSTRING]; //?標(biāo)題欄文本
TCHAR?szWindowClass[MAX_LOADSTRING]; //?主窗口類名
//?此代碼模塊中包含的函數(shù)的前向聲明:?
ATOM MyRegisterClass(HINSTANCE?hInstance);
BOOL InitInstance(HINSTANCE?int);
LRESULT?CALLBACK WndProc(HWND?UINT?WPARAM?LPARAM);
INT_PTR?CALLBACK About(HWND?UINT?WPARAM?LPARAM);
//user?varible
HGLRC?hRC?=?NULL;//窗口著色描述表句柄
HDC?hDC?=?NULL;//opengl渲染設(shè)備描述表句柄
HWND?hWnd?=?NULL;//保存我們的窗口句柄
HINSTANCE?hInstance;//保存我們程序的實(shí)例
bool?keys[256];//保存鍵盤按鍵的數(shù)組
bool?active?=?true;//窗口的活動(dòng)標(biāo)志,缺省為true
bool?fullscreen?=?true;//全屏標(biāo)志,缺省為true
GLuint?texture[1];//存儲(chǔ)紋理
BOOL?light;//光源開關(guān)
BOOL?lp;//L鍵是否按下
BOOL?fp;//F鍵是否按下
bool?blend;//是否進(jìn)行色彩混合
bool?bp;//B鍵按下了嗎?
//載入一個(gè)位圖,并用它創(chuàng)建三種不同的紋理。使用glaux輔助庫來載入位圖,因此在編譯時(shí)您應(yīng)該確認(rèn)是否包含了glaux庫。glaux是OpenGL輔助庫,根據(jù)OpenGL的跨平臺(tái)特性,所有平臺(tái)上的代碼都應(yīng)通用。但輔助庫不是正式的OpenGL標(biāo)準(zhǔn)庫,沒有出現(xiàn)在所有的平臺(tái)上。
GLuint?filter;//濾波類型
GLuint?texture3[3];//三種紋理的存儲(chǔ)空間
BOOL?twinkle;//閃爍的效果是否啟用
BOOL?tp;//T鍵是否按下
int?const?num?=?2;//常量,屏幕上繪制的星星數(shù)量。
typedef?struct?//星星結(jié)構(gòu)體
{
int?r?g?b;//星星顏色
GLfloat?dist;//星星距離中心的距離
GLfloat?angle;//當(dāng)前星星所處的角度,以屏幕中心為原點(diǎn)的任意360度中的一個(gè)角度
}?star;
star?stars[num];
GLfloat?zoom?=?-15.0f;//星星距離觀察者的距離
GLfloat?tilt?=?90.0f;//星星的傾角
GLfloat?spin;//閃爍星星的自轉(zhuǎn)
GLuint?loop;//全局loop變量
AUX_RGBImageRec?*?LoadBMP(char*?Filename)//載入圖像位圖
{
FILE?*File?=?NULL;//文件句柄
if?(!Filename)//確保文件名提供
{
return?NULL;
}
File?=?fopen(Filename?“r“);//嘗試打開文件
if?(File)
{
fclose(File);
WCHAR?wsztitleName[256];
memset(wsztitleName?0?sizeof(wsztitleName));
int?l?=?MultiByteToWideChar(CP_ACP?0?Filename?lstrlenA(Filename)?wsztitleName?sizeof(wsztitleName)?/?sizeof(wsztitleName[0]));
return?auxDIBImageLoad(wsztitleName);//載入位圖并返回指針
}
return?NULL;//載入失敗
}
//載入位圖并轉(zhuǎn)換成紋理
int?LoadGLTextures()
{
int?Status?=?FALSE;//狀態(tài)指示器
AUX_RGBImageRec?*TextureImage[1];//創(chuàng)建存儲(chǔ)位圖的圖像記錄,記錄包含位圖的寬度,高度和數(shù)據(jù)
memset(TextureImage?0?sizeof(void*)*?1);//清除圖像記錄,確保為空
//載入位圖
if?(TextureImage[0]?=?LoadBMP(“Data/Star.bmp“))
{
Status?=?TRUE;
//現(xiàn)在使用中?TextureImage[0]?的數(shù)據(jù)創(chuàng)建紋理
glGenTextures(1?&texture[0]);//告訴OpenGL我們想生成一個(gè)紋理:創(chuàng)建紋理
glBindTexture(GL_TEXTURE_2D?texture[0]);//告訴OpenGL將紋理?texture[0]?綁定到紋理目標(biāo)上。2D紋理只有高度(在?Y?軸上)和寬度(在?X?軸上)。主函數(shù)將紋理指派給紋理數(shù)據(jù),我們創(chuàng)建的紋理將存儲(chǔ)在?&texture[0]?的?指向的內(nèi)存區(qū)域
//創(chuàng)建真正的紋理
//下面一行告訴OpenGL此紋理是一個(gè)2D紋理?(?GL_TEXTURE_2D?)。參數(shù)“0”代表圖像的詳細(xì)程度,通常就由它為零去了。參數(shù)三是數(shù)據(jù)的成分?jǐn)?shù)。因?yàn)閳D像是由紅色數(shù)據(jù),綠色數(shù)據(jù),藍(lán)色數(shù)據(jù)三種組分組成。?TextureImage[0]->sizeX?是紋理的寬度。如果您知道寬度,您可以在這里填入,但計(jì)算機(jī)可以很容易的為您指出此值。?TextureImage[0]->sizey?是紋理的高度。參數(shù)零是邊框的值,一般就是“0”。?GL_RGB?告訴OpenGL圖像數(shù)據(jù)由紅、綠、藍(lán)三色數(shù)據(jù)組成。GL_UNSIGNED_BYTE?意味著組成圖像的數(shù)據(jù)是無符號(hào)字節(jié)類型的。最后...?TextureImage[0]->data?告訴OpenGL紋理數(shù)據(jù)的來源。此例中指向存放在?TextureImage[0]?記錄中的數(shù)據(jù)。
glTexImage2D(GL_TEXTURE_2D?0?3?TextureImage[0]->sizeX?TextureImage[0]->sizeY?0?GL_RGB?GL_UNSIGNED_BYTE?TextureIma
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????82944??2015-06-04?10:38??OpenGLWindowMovePic\Debug\OpenGLWindow.exe
?????文件?????606156??2015-06-04?10:38??OpenGLWindowMovePic\Debug\OpenGLWindow.ilk
?????文件????1313792??2015-06-04?10:38??OpenGLWindowMovePic\Debug\OpenGLWindow.pdb
?????文件???21561344??2015-06-02?10:35??OpenGLWindowMovePic\ipch\openglwindow-95a38eaa\openglwindow-c55ee149.ipch
?????文件???21561344??2015-06-01?17:22??OpenGLWindowMovePic\ipch\openglwindow-c62ecc37\openglwindow-c55ee149.ipch
?????文件?????196662??2015-05-27?22:17??OpenGLWindowMovePic\OpenGLWindow\Data\CooperOpengl.bmp
?????文件??????49206??2015-06-02?16:47??OpenGLWindowMovePic\OpenGLWindow\Data\Star.bmp
?????文件???????1525??2015-06-01?17:57??OpenGLWindowMovePic\OpenGLWindow\Debug\OpenGLWindow.Build.CppClean.log
?????文件???????1802??2015-06-04?10:38??OpenGLWindowMovePic\OpenGLWindow\Debug\OpenGLWindow.log
?????文件??????49993??2015-06-04?10:38??OpenGLWindowMovePic\OpenGLWindow\Debug\OpenGLWindow.obj
?????文件????6094848??2015-06-02?10:45??OpenGLWindowMovePic\OpenGLWindow\Debug\OpenGLWindow.pch
?????文件???????6824??2015-06-02?10:45??OpenGLWindowMovePic\OpenGLWindow\Debug\OpenGLWindow.res
?????文件???????3386??2015-06-04?10:38??OpenGLWindowMovePic\OpenGLWindow\Debug\OpenGLWindow.tlog\cl.command.1.tlog
?????文件??????28948??2015-06-04?10:38??OpenGLWindowMovePic\OpenGLWindow\Debug\OpenGLWindow.tlog\CL.read.1.tlog
?????文件???????2772??2015-06-04?10:38??OpenGLWindowMovePic\OpenGLWindow\Debug\OpenGLWindow.tlog\CL.write.1.tlog
?????文件???????3970??2015-06-04?10:38??OpenGLWindowMovePic\OpenGLWindow\Debug\OpenGLWindow.tlog\li
?????文件???????7598??2015-06-04?10:38??OpenGLWindowMovePic\OpenGLWindow\Debug\OpenGLWindow.tlog\li
?????文件???????1798??2015-06-04?10:38??OpenGLWindowMovePic\OpenGLWindow\Debug\OpenGLWindow.tlog\li
?????文件????????182??2015-06-04?10:38??OpenGLWindowMovePic\OpenGLWindow\Debug\OpenGLWindow.tlog\OpenGLWindow.lastbuildstate
?????文件???????1234??2015-06-02?10:45??OpenGLWindowMovePic\OpenGLWindow\Debug\OpenGLWindow.tlog\rc.command.1.tlog
?????文件???????5644??2015-06-02?10:45??OpenGLWindowMovePic\OpenGLWindow\Debug\OpenGLWindow.tlog\rc.read.1.tlog
?????文件????????638??2015-06-02?10:45??OpenGLWindowMovePic\OpenGLWindow\Debug\OpenGLWindow.tlog\rc.write.1.tlog
?????文件?????150220??2015-06-02?10:45??OpenGLWindowMovePic\OpenGLWindow\Debug\stdafx.obj
?????文件?????445440??2015-06-04?10:38??OpenGLWindowMovePic\OpenGLWindow\Debug\vc120.idb
?????文件?????512000??2015-06-04?10:38??OpenGLWindowMovePic\OpenGLWindow\Debug\vc120.pdb
?????文件??????28312??2015-06-04?10:39??OpenGLWindowMovePic\OpenGLWindow\OpenGLWindow.cpp
?????文件?????????37??2015-05-19?10:10??OpenGLWindowMovePic\OpenGLWindow\OpenGLWindow.h
?????文件???????2998??2013-07-22?01:18??OpenGLWindowMovePic\OpenGLWindow\OpenGLWindow.ico
?????文件???????6616??2015-05-18?21:45??OpenGLWindowMovePic\OpenGLWindow\OpenGLWindow.rc
?????文件???????5064??2015-05-30?20:51??OpenGLWindowMovePic\OpenGLWindow\OpenGLWindow.vcxproj
............此處省略23個(gè)文件信息
評(píng)論
共有 條評(píng)論