遊戲製作詳解自----OpenGL入門教程(四)(轉)
遊戲製作詳解自----OpenGL入門教程(四)(轉)[@more@] OpenGL是一種基於客戶/伺服器和管道(PipeLine)的圖形庫。即一個應用程式(客戶)將各種命令和資料寫入管道,這命令和資料將被暫時儲存起來,圖形庫(伺服器)直到收到一條專門的指令才會開始處理它們,並將處理結果透過管道傳給使用者。 所以OpenGL應用程式的基本結構就是: 建立管道 根據需要向管道中寫入資料和指令 關閉管道 在Windows95/NT環境中,這個管道就是OpenGL著色環境――(OpenGL Render Context)簡稱RC。因此建立管道實際上就是獲取一個可用的RC。 而在Windows的GDI系統中進行圖形顯示是透過圖形裝置上下文――(Device Context)簡稱DC――進行的。所以獲取RC就是: ①先獲取一個DC, ②調整這個DC的象素格式(PixelFormat)以便OpenGL庫進行繪製, ③用DC去呼叫wglCreateContext(hDC)建立一個RC, ④呼叫wglMakeCurrent(hRC,hDC)將剛才建立的RC指定為當前的RC。 當一個RC不再使用時就可以刪除它,方法是: 使RC不是“當前RC”: wglMakeCurrent(NULL,NULL); //不再有當前RC wglMakeCurrent(hAnotherRC,hDC); //另一個RC成為當前RC wglDEleteContent(hRC); //刪除之 為了避免反覆建設/刪除RC所帶來的不必要的開支,我們在TForm1中定義了hDC、hRC以儲存DC和RC,並在TForm1的建構函式中建立並儲存RC,直到清除這個Form即Destory()成員函式執行時才刪除RC和DC。 主要程式碼如下: void __fastcall TForm1::CreateParams(TCreateParams& Params) { //再次說明:只在MDI應用有必要進行修改。2000.2.17. TForm::CreateParams(Params); //呼叫原有函式預處理 Params.Style|=WS_CLIPCHILDREN|WS_CLIPSIBLINGS;//加上必要的屬性 } //---------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { hDC=GetDC(Handle); //獲取一個DC,TForm1.Handle中儲存有Form的視窗控制程式碼 SetDCPixelFormat(hDC); //調整該DC的象素格式 hRC=wglCreateContext(hDC); //用這種DC去建立一個RC wglMakeCurrent(hDC,hRC); //指定當前DC、當前RC為hDC、hRC } //------------------------------------------------------------------- void __fastcall TForm1::SetDCPixelFormat(HDC hDC) { //本函式用於調整DC的象素格式,如緩衝區、顏色數等 //先不深究,只要知道它的作用就行 int nPixelFormat; static PIXELFORMATDESCRIPTOR pfd = { sizeof(PIXELFORMATDESCRIPTOR), // Size of this structure 1, // Version of this structure PFD_DRAW_TO_WINDOW | // Draw to Window (not to bitmap) PFD_SUPPORT_OPENGL | // Support OpenGL calls in window PFD_DOUBLEBUFFER // Double buffered mode PFD_TYPE_RGBA, // RGBA Color mode 24, // Want 24bit color 0,0,0,0,0,0, // Not used to select mode 0,0, // Not used to select mode 0,0,0,0,0, // Not used to select mode 32, // Size of depth buffer 0, // Not used to select mode 0, // Not used to select mode PFD_MAIN_PLANE, // Draw in main plane 0, // Not used to select mode 0,0,0 }; // Not used to select mode // Choose a pixel format that best matches that described in pfd nPixelFormat = ChoosePixelFormat(hDC, &pfd); // Set the pixel format for the device context SetPixelFormat(hDC, nPixelFormat, &pfd); } //----------------------------------------------------------------- void __fastcall TForm1::FormPaint(TObject *Sender) { //該Form的繪製響應函式 glClearColor(0.5,0.7,0.9,1.0); //指定背景顏色(依次為RGBA) glClear(GL_COLOR_BUFFER_BIT); //用背景色清視窗 RenderScence(); //場景繪製 SwapBuffers(hDC); //切交緩衝區,這就是可以啟動圖形庫處理流程並得相應結果的兩條命令之一 //如果當前RC相聯DC具有DoubleBuffer的PixelFormat則用本命令 //否則就是單緩衝DC,用glFlush(void)進行更新。 } //----------------------------------------------------- void __fastcall TForm1::FormDestroy(TObject *Sender) { wglMakeCurrent(NULL,NULL); //取消當前RC和當前DC wglDeleteContext(hRC); //刪除該RC DeleteObject(hDC); //刪除Windows DC。 } //------------------------------------------------------------------
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-951747/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 遊戲製作詳解自----OpenGL入門教程(九)(轉)遊戲
- 遊戲製作詳解自----OpenGL入門教程(五)(轉)遊戲
- 遊戲製作相關---HAM教程翻譯本(四)(轉)遊戲
- Docker 入門系列四:Dockerfile-映象製作Docker
- OpenGL 模型載入詳解模型
- 轉一個比較詳盡的XP登入介面製作教程
- Git入門教程,詳解Git檔案的四大狀態Git
- BabyLinux製作過程詳解(轉)Linux
- OpenGL ES 入門
- 詳解前端HTTP協議入門教程前端HTTP協議
- 遊戲製作相關---HAM教程翻譯本(五)(轉)遊戲
- OpenGL系列教程之一:OpenGL(轉)
- 前端自動化-----gulp詳細入門(轉)前端
- 新手入門,webpack入門詳細教程Web
- OpenGL開發入門
- Next.js 入門超詳解教程JS
- 遊戲修改器製作教程四:用API讀寫記憶體遊戲API記憶體
- Toolbar製作選單條過程詳解 (轉)
- 最適合入門的 Laravel 入門教程 (四)Laravel
- OpenGL入門第一課--名稱解釋
- 埠轉發工具Rinetd詳細入門教程
- yarn詳細入門教程Yarn
- gulp入門詳細教程
- GRUB入門教程(轉)
- OpenGL入門(1)——建立一個OpenGL專案
- gitbook 入門教程之常用命令詳解Git
- Struts快速入門(四) (轉)
- 遊戲製作之我見:) (轉)遊戲
- ZWeily的小品文(四)C++入門教程(3) (轉)C++
- OpenGL 紋理詳解
- Java入門教程四(字串處理)Java字串
- Metal入門教程(四)灰度計算
- OpenGL/OpenGL ES入門:紋理初探 - 常用API解析API
- Argo CD 詳細入門教程Go
- 製作遊戲載入進度條遊戲
- RPG 製作大師:古老的遊戲開發入門工具遊戲開發
- unity入門—五分鐘製作一個理論上的遊戲Unity遊戲
- 3個Web入門小遊戲,製作只需基礎三劍客Web遊戲