freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于opengl動(dòng)態(tài)三維地形設(shè)計(jì)論文(編輯修改稿)

2024-12-14 00:54 本頁面
 

【文章內(nèi)容簡介】 { if(bActive()) { ()。 DrawGLScene()。 ::SwapBuffers(wglGetCurrentDC())。 } else { ShowWindow(m_hWnd,SW_SHOWMINIMIZED)。 WaitMessage()。 } } } 使用 PeekMessage 而不是 GetMessage,這樣當(dāng)消息隊(duì)列中沒有消息時(shí)便不會(huì)等待而是返回一個(gè) FALSE 值,這樣我們就可能知道當(dāng)前應(yīng)用程序處理空閑狀態(tài)了。另外值得注意的是,如果得到的消息是 WM_QUIT, PeekMessage 一樣會(huì)返回 FALSE 值,所以我們需要做一些特殊處理。 當(dāng)允許 Active 運(yùn)行時(shí),調(diào)用 CScene 類中的 CheckForMovement()。以及DrawGLScene()函數(shù)。 函數(shù) InitInstance(HINSTANCE hInstance,int nCmdShow)其中改動(dòng)比較大,并且將注冊(cè)窗口類融入其中。即定義的注冊(cè)窗口類 wc,其中參數(shù)如下: = CS_HREDRAW | CS_VREDRAW | CS_OWNDC。//刷新屏幕,添加句柄 = (WNDPROC) WndProc。 //窗口句柄消息 = 0。 //無特別窗體數(shù)據(jù) = 0。 = GetModuleHandle(NULL)。 //設(shè)置實(shí)例 = LoadIcon(NULL, IDI_WINLOGO)。 //讀取默認(rèn)圖標(biāo) = LoadCursor(NULL, IDC_ARROW)。 //讀取箭頭指針 = NULL。 //無 GL 必需的背景 = NULL。 //無菜單 = OpenGL。 //設(shè)置類 名 該函數(shù)中定義窗口默認(rèn)大小為 1024*800,像素格式為 16 位。 構(gòu)建 Windows 窗口則使用函數(shù) CreateWindowEx( dwExStyle, //繼承 windows 窗口風(fēng)格 szWindowClass, //類名 13 szTitle, //窗口標(biāo)題 dwStyle | //定義窗口風(fēng)格 WS_CLIPSIBLINGS | //必需的窗口風(fēng)格 WS_CLIPCHILDREN, //必需的窗口風(fēng)格 0, 0, //窗口位置 , //窗口寬 , //窗口高 NULL, //沒有父窗口 NULL, //沒有菜單 GetModuleHandle(NULL), //實(shí)例 NULL) 用來設(shè)置一個(gè)匹配的像素格式 static PIXELFORMATDESCRIPTOR pfd= { sizeof(PIXELFORMATDESCRIPTOR), // 像素格式描述的大小 1, // 指定像素格式的數(shù)據(jù)結(jié)構(gòu) PFD_DRAW_TO_WINDOW | // 格式支持 window PFD_SUPPORT_OPENGL | // 格式支持 OpenGL PFD_DOUBLEBUFFER, // 支持雙緩沖 PFD_TYPE_RGBA, // 要求 RGBA 格式 bits, // 選擇顏色深度 0, 0, 0, 0, 0, 0, // 忽視色位 0, // 無 Alpha 緩沖 0, // 忽視位轉(zhuǎn)移 0, // 無堆緩沖 0, 0, 0, 0, // 忽視堆位數(shù)據(jù) 16, // 16 位 Z 緩沖深度 0, // 無模版深度 0, // 無輔助緩沖 PFD_MAIN_PLANE, // 主繪圖層 0, // 保留的參數(shù) 0, 0, 0 // 忽略修飾層 }。 出錯(cuò)處理: 判斷注冊(cè)窗口類是否建立。 判斷是否 獲取你需要在上面繪圖的設(shè)備環(huán)境 。 判斷是否獲得匹配的環(huán)境設(shè)備的像素格式。 判斷是否設(shè)置像素格式。 判斷創(chuàng)建 OpenGl 設(shè)備是否成功。 判斷 OpenGl 設(shè)備是否啟動(dòng)。 判斷初始化是否成功。 設(shè)置 窗口的消息相應(yīng): LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM 14 wParam, LPARAM lParam) WM_ACTIVATE 監(jiān)視 Avtivate 消息。 WM_SYSCOMMAND 用來截獲系統(tǒng)消息。 WM_CLOSE 關(guān)閉消息。 WM_COMMAND 控制消息。 IDM_EXIT 關(guān)閉窗口。 WM_KEYDOWN 鍵盤響應(yīng)消息 設(shè)置 L 鍵,切換三角形填充模式與接線框模式。 WM_SIZE 調(diào)整窗口大小,重新刷新屏幕。 其他情況下, DefWindowProc(hWnd, message, wParam, lParam)。不然 GDI 的繪圖會(huì)與 OpenGL 沖突,并且阻止程序空閑。 函數(shù) ReSizeGLScene(GLsizei width, GLsizei height)用于調(diào)整窗口大小時(shí)刷新屏幕。 函數(shù) KillGLWindow(GLvoid)用于釋放窗口,其中判斷是否能夠釋放 DC 與 RC 設(shè)備,判斷是否能夠刪除 RC,判斷是否能夠釋放 DC 設(shè)備,是否能夠刪除窗口,是否成功能夠注冊(cè) OpenGL 類 . 各個(gè)類( Class)、結(jié)構(gòu)體( struct)詳細(xì)設(shè)計(jì)說明: 4. 3. 1 結(jié)構(gòu)體 CVector3 任何像素點(diǎn)在三維空間內(nèi)都存在著他自己的坐標(biāo)值,該結(jié)構(gòu)體用來定義空間點(diǎn)的存在。 在該結(jié)構(gòu)體定義的頭文件中,重載了一些基本的運(yùn)算符操作。 定義出計(jì)算點(diǎn)到原點(diǎn)距離的成員函數(shù) ComputeLength()。 在 中,定義給出了計(jì)算兩個(gè)點(diǎn)乘積的函數(shù) DotProduct(); 計(jì)算向量積,也就是交叉乘積的函數(shù) CrossProduct(); 計(jì)算向量大小的函數(shù) Magnitude(); 單位規(guī)格化向量的函數(shù) Normalize(); 判斷兩點(diǎn)是否同一邊的函數(shù) SameSign(); 判斷點(diǎn)是否在射線上的函數(shù) PntFrontOrBack(); PntFrontOrBack2(); 計(jì)算兩點(diǎn)之間距離的函數(shù) Dist(); 以上列出的成員函數(shù),一些并沒有被用到,只是作為完善,不時(shí)之需。 4. 3. 2 類 CTexture 該類用來控制紋理的映射。 該類定義如下: class CTexture { GLuint m_nTxt。 public: 15 inline GLint GetTxtID(){return m_nTxt。} int LoadGLTextures(char *Filename)。 CTexture() { m_nTxt = 1。 } ~CTexture() { if(m_nTxt!=1) glDeleteTextures(1,amp。m_nTxt)。 } }。 其中主要包括了,讀取 bmp 紋理文件的函數(shù) LoadGLTextures( char *Filename) 實(shí)現(xiàn)步驟如下: 設(shè)置一個(gè) file 型指針,以及指向內(nèi)存紋理數(shù)據(jù)的指針 AUX_RGBImageRec *pImage 出錯(cuò)判斷, Filename 為空的情況,文件沒有能夠讀取到的情況。 讀取 bitmap 在 中使用的輔助存儲(chǔ)函數(shù) auxDIBImageLoad(Filename); 確認(rèn)讀入了有效的圖像數(shù)據(jù) 通過結(jié)合存儲(chǔ)在數(shù)據(jù)隊(duì)列中的紋理 ID 產(chǎn)生一個(gè)可用紋理 語句: glGenTextures(1, amp。m_nTxt)。 放置從起點(diǎn)開始每一行的像素點(diǎn)的隊(duì)列需求 . 語句: glPixelStorei (GL_UNPACK_ALIGNMENT, 1)。 從紋 理索引中確定紋理,并初始化它們 語句: glBindTexture(GL_TEXTURE_2D, m_nTxt)。 建立 Mipmaps (紋理的目標(biāo),紋理中顏色數(shù)量的成分,紋理圖像的寬,紋理圖像的高,像素點(diǎn)數(shù)據(jù)格式,內(nèi)存中指向數(shù)據(jù)的指針 ) 語句: gluBuild2DMipmaps(GL_TEXTURE_2D, 3, pImagesizeX, pImagesizeY, GL_RGB, GL_UNSIGNED_BYTE, pImagedata)。 分配 映射地圖和紋理信息 語句: glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST)。 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE)。 釋放內(nèi)存紋理數(shù)據(jù) 4. 3. 3 類 CText 該類控制字體產(chǎn)生并顯示輸出。 該類定義如下: class CText { typedef struct tagINFO { float x,y,z。 16 char sInfo[128]。 }INFO。 UINT m_fontLstID。 public: void EditItem(int nID,float x,float y,float z,char *str)。 int AddText(float x,float y,float z,char *str)。 void Draw()。 CText()。 virtual ~CText()。 bool InitRasterText()。 void PrintString(char* string)。 void CreateOpenGLFont(LPSTR strFontName, int height)。 void glDrawText(int x, int y, const char *strString, ...)。 private: bool makeRasterFont()。 unsigned int fontOffset。 int m_nInfo。 INFO m_Info[MAXINFO]。 }。 其中設(shè)置光柵顯示的字體的函數(shù) makeRasterFont(); 初始化光柵字符文檔 InitRasterText();主要就是確定字體是否讀入。 顯示串的函數(shù) PrintString(); 通過調(diào)用 PrintString()在指定的光柵位置顯示串的函數(shù) Draw() 創(chuàng)建 OpenGL 字體的函數(shù) CreateOpenGLFont(); 由于一般情況下,字體是不可能存在在三維的空間中,所以通過轉(zhuǎn)換來設(shè)置字體的顯示位置的函數(shù) PositionText(); 將字符串在屏幕 上顯示的函數(shù) glDrawText(); 實(shí)現(xiàn)的運(yùn)行情況如圖 41 圖 41 屏幕顯示 fps 值與繪制的三角形數(shù)量 4. 3. 4 類 CFrustum 17 用來控制視野,也就是可見范圍的確定 [6] 該類定義如下: enum FrustumSide { RIGHT = 0, // 截體右面 LEFT = 1, // 截體左面 BOTTOM = 2, // 截體底面 TOP = 3, // 截體頂面 BACK = 4, // 截體背面 FRONT = 5 // 截體前面 }。 enum PlaneData { A = 0, // X B = 1, // Y C = 2, // Z D = 3 // 平面到原點(diǎn)距離 }。 class CFrustum { friend class CTerrain。 //聲明友類 public: void CalculateFr
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1