亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Delphi > 正文

Delphi下OpenGL2d繪圖之初始化流程詳解

2020-01-31 20:51:42
字體:
來源:轉載
供稿:網友

一、前言:

Delphi默認支持OpenGl,可以使用uses OpenGL單元進行引用,之后就可以使用OpenGL的函數。OpenGl是跨平臺的,而且Windows很早就支持并集成在系統中,存在于system32中的opengl32.dll,不需要再額外進行安裝。雖然windows本身有d3d,但是其能力有限,相關學習資料頁相對較少。

通常OpenGL僅僅支持以下幾種基本幾何圖形:點,線和多邊形。沒有表面或者更高級的圖形(比如球狀圖形)能被作為基本圖形元素繪制。但是它們能夠用多邊形來完美的模仿出來。隨意看看現代3D游戲,你會發現它們幾乎完全是由三角形建立的。因此,我們不會被此限制所約束。

二、初始化

在使用OpenGL之前,需要先進行一些相關的參數設置。一般流程為:

“設置匹配的像素格式”(ChoosePixelFormat、SetPixelFormat)
“創建一個新的OpenGL渲染描述表”(wglCreateContext)
“設置OpenGL相關參數”、“繪圖”(glBegin、glEnd)
“刪除OpenGL渲染描述表”(wglDeleteContext)

procedure TForm1.FormCreate(Sender: TObject);var pfd:TPIXELFORMATDESCRIPTOR; pixelFormat: Integer;begin With pfd do begin  nSize := sizeof(TPIXELFORMATDESCRIPTOR); // size  nVersion := 1; // version  dwFlags := PFD_SUPPORT_OPENGL or PFD_DRAW_TO_WINDOW or PFD_DOUBLEBUFFER; // support double-buffering  iPixelType := PFD_TYPE_RGBA; // color type  cColorBits := 24; // preferred color depth  cRedBits := 0;  cRedShift := 0; // color bits (ignored)  cGreenBits := 0;  cGreenShift := 0;  cBlueBits := 0;  cBlueShift := 0;  cAlphaBits := 0;  cAlphaShift := 0; // no alpha buffer  cAccumBits := 0;  cAccumRedBits := 0; // no accumulation buffer,  cAccumGreenBits := 0; // accum bits (ignored)  cAccumBlueBits := 0;  cAccumAlphaBits := 0;  cDepthBits := 16; // depth buffer  cStencilBits := 0; // no stencil buffer  cAuxBuffers := 0; // no auxiliary buffers  iLayerType := PFD_MAIN_PLANE; // main layer  bReserved := 0;  dwLayerMask := 0;  dwVisibleMask := 0;  dwDamageMask := 0; end; FDC := GetDC(Handle); pixelFormat := ChoosePixelFormat(FDC, @pfd); if pixelFormat = 0 then  Exit; if not SetPixelFormat(FDC, pixelFormat, @pfd) then  Exit; FHRC := wglCreateContext(FDC); wglMakeCurrent(FDC, FHRC); // 設置背景色為 黑色 參數為 RGBA glClearColor(0, 0, 0, 0); // 設置視圖投影變換矩陣 正投影 glMatrixMode(GL_PROJECTION); // 重置當前指定的矩陣為單位矩陣 glLoadIdentity; // 指定OpenGL在此區域內繪圖 glViewPort(0, 0, ClientWidth, ClientHeight); // 設置世界坐標系的范圍 gluOrtho2D(0, ClientWidth, ClientHeight, 0); // 將矩陣變換對象切換為模型視圖變換 glMatrixMode(GL_MODELVIEW); // 重置當前指定的矩陣為單位矩陣 glLoadIdentity;end;

三、繪圖

OpenGL的基本圖元為點、線、多邊形等,每次繪圖都需要使用glBegin()與glEnd()。如以下繪制函數procedure Draw;

procedure TForm1.Draw;begin // 清空緩沖區 glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); // 清空緩沖區 glColor3ub(0, 255, 0); glBegin(GL_TRIANGLES);//告訴OpenGL將要繪制三角形 glVertex2f(200, 300); //傳輸三角形的三個頂點坐標給OpenGL glVertex2f(400, 300); glVertex2f(300, 150); glEnd; //結束圖元的繪制。 SwapBuffers(FDC); //交換雙緩沖區內容,這將把剛繪制的圖形翻印到屏幕上。end;

四、最后記得釋放。全部代碼如下:

unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, OpenGL;type TForm1 = class(TForm)  procedure FormCreate(Sender: TObject);  procedure FormDestroy(Sender: TObject);  procedure FormPaint(Sender: TObject);  procedure FormResize(Sender: TObject); private  { Private declarations }  FDC: HDC;  FHRC: HGLRC;  procedure Draw; public  { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Draw;begin // 清空緩沖區 glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); // 清空緩沖區 glColor3ub(0, 255, 0); glBegin(GL_TRIANGLES);//告訴OpenGL將要繪制三角形 glVertex2f(200, 300); //傳輸三角形的三個頂點坐標給OpenGL glVertex2f(400, 300); glVertex2f(300, 150); glEnd; //結束圖元的繪制。 SwapBuffers(FDC); //交換雙緩沖區內容,這將把剛繪制的圖形翻印到屏幕上。end;procedure TForm1.FormCreate(Sender: TObject);var pfd:TPIXELFORMATDESCRIPTOR; pixelFormat: Integer;begin With pfd do begin  nSize := sizeof(TPIXELFORMATDESCRIPTOR); // size  nVersion := 1; // version  dwFlags := PFD_SUPPORT_OPENGL or PFD_DRAW_TO_WINDOW or PFD_DOUBLEBUFFER; // support double-buffering  iPixelType := PFD_TYPE_RGBA; // color type  cColorBits := 24; // preferred color depth  cRedBits := 0;  cRedShift := 0; // color bits (ignored)  cGreenBits := 0;  cGreenShift := 0;  cBlueBits := 0;  cBlueShift := 0;  cAlphaBits := 0;  cAlphaShift := 0; // no alpha buffer  cAccumBits := 0;  cAccumRedBits := 0; // no accumulation buffer,  cAccumGreenBits := 0; // accum bits (ignored)  cAccumBlueBits := 0;  cAccumAlphaBits := 0;  cDepthBits := 16; // depth buffer  cStencilBits := 0; // no stencil buffer  cAuxBuffers := 0; // no auxiliary buffers  iLayerType := PFD_MAIN_PLANE; // main layer  bReserved := 0;  dwLayerMask := 0;  dwVisibleMask := 0;  dwDamageMask := 0; end; FDC := GetDC(Handle); pixelFormat := ChoosePixelFormat(FDC, @pfd); if pixelFormat = 0 then  Exit; if not SetPixelFormat(FDC, pixelFormat, @pfd) then  Exit; FHRC := wglCreateContext(FDC); wglMakeCurrent(FDC, FHRC); // 設置背景色為 黑色 參數為 RGBA glClearColor(0, 0, 0, 0); // 設置視圖投影變換矩陣 正投影 glMatrixMode(GL_PROJECTION); // 重置當前指定的矩陣為單位矩陣 glLoadIdentity; // 指定OpenGL在此區域內繪圖 glViewPort(0, 0, ClientWidth, ClientHeight); // 設置世界坐標系的范圍 gluOrtho2D(0, ClientWidth, ClientHeight, 0); // 將矩陣變換對象切換為模型視圖變換 glMatrixMode(GL_MODELVIEW); // 重置當前指定的矩陣為單位矩陣 glLoadIdentity;end;procedure TForm1.FormDestroy(Sender: TObject);begin wglMakeCurrent(FDC, FHRC); wglDeleteContext(FHRC); ReleaseDC(Handle, FDC);end;procedure TForm1.FormPaint(Sender: TObject);begin Draw;end;procedure TForm1.FormResize(Sender: TObject);begin // 窗口改變大小時重新指定繪圖區域 glClearColor(0, 0, 0, 0); glMatrixMode(GL_PROJECTION); glLoadIdentity; glViewPort(0, 0, ClientWidth, ClientHeight); gluOrtho2D(0, ClientWidth, ClientHeight, 0); glMatrixMode(GL_MODELVIEW); glLoadIdentity;end;end.

完整代碼點此下載

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品久久久久久久久久久久久| 久久男人av资源网站| 国产日韩精品在线播放| 欧美日韩国产精品一区二区不卡中文| 2021久久精品国产99国产精品| 欧美精品videossex性护士| 日韩理论片久久| 欧美成人精品在线| 成人国产精品久久久久久亚洲| 欧美日韩国产影院| 久久夜精品香蕉| 久久福利视频网| 国产精品高清在线| 亚洲视频网站在线观看| 日韩中文字幕精品| 欧美激情伊人电影| 国产精品爱久久久久久久| 久久人人爽亚洲精品天堂| 亚洲另类图片色| 高清视频欧美一级| 亚洲第一色中文字幕| 欧美人与性动交a欧美精品| 亚洲精品短视频| 亚洲欧美综合图区| 深夜福利一区二区| 国产精品视频久| 日韩欧美在线视频日韩欧美在线视频| 久久人人爽人人爽人人片av高清| 欧美成人精品三级在线观看| 最新69国产成人精品视频免费| 中文字幕欧美国内| 亚洲大尺度美女在线| 日韩免费在线电影| 午夜免费在线观看精品视频| 欧美怡春院一区二区三区| 亚洲精品成人免费| 国产成人拍精品视频午夜网站| 日本韩国欧美精品大片卡二| 国产精品日韩久久久久| 中文字幕av一区二区| 日本老师69xxx| 69久久夜色精品国产7777| 亚洲丁香久久久| 日韩黄色高清视频| 在线观看日韩www视频免费| 国产精品高精视频免费| 日韩av成人在线| 欧美黑人狂野猛交老妇| 性欧美办公室18xxxxhd| 日韩高清电影免费观看完整版| 日韩毛片在线观看| 国产99久久久欧美黑人| 日韩高清不卡av| 国外色69视频在线观看| 日本成人精品在线| 国产剧情日韩欧美| 国产精品三级美女白浆呻吟| 国产精品视频午夜| 久久精品免费播放| 久久人人97超碰精品888| 亚洲新声在线观看| 欧美激情成人在线视频| 久久这里有精品视频| 国产成人涩涩涩视频在线观看| 精品日韩中文字幕| 久久久精品一区| 成人中文字幕+乱码+中文字幕| 亚洲成人性视频| 欧美日韩免费在线观看| 亚洲的天堂在线中文字幕| 亚洲男人天堂网| 91高潮精品免费porn| 久久乐国产精品| 91国产视频在线播放| 欧美第一淫aaasss性| 久久精品国产免费观看| 亚洲精品综合精品自拍| 国产91精品在线播放| 亚洲视频视频在线| 亚洲专区中文字幕| 久久久久久有精品国产| 自拍视频国产精品| 亚洲精品福利视频| 91sao在线观看国产| 国产区精品视频| 成人做爽爽免费视频| 亚洲第一区中文99精品| 欧美天天综合色影久久精品| 亚洲午夜久久久影院| 中文字幕日韩欧美| 亚洲影院在线看| 亚洲影院污污.| 狠狠色香婷婷久久亚洲精品| 亚洲美女免费精品视频在线观看| 色婷婷av一区二区三区久久| 97久久精品在线| 国产精品久久久久久久一区探花| 国产成人综合精品在线| 国产视频在线观看一区二区| 永久免费看mv网站入口亚洲| 欧美性色xo影院| 久久天天躁狠狠躁夜夜爽蜜月| 在线播放国产一区中文字幕剧情欧美| 日韩在线观看高清| 国产精品一区二区性色av| 亚洲一区二区久久| 成人欧美一区二区三区在线| 成人xvideos免费视频| 日本精品久久久久久久| 45www国产精品网站| 最新的欧美黄色| 538国产精品一区二区免费视频| 欧美国产日韩二区| 中文字幕亚洲综合久久筱田步美| 日本午夜在线亚洲.国产| 国产精品高清在线观看| 欧美香蕉大胸在线视频观看| 亚洲欧美日本伦理| 在线播放国产一区中文字幕剧情欧美| 亚洲美女免费精品视频在线观看| 久久精品亚洲精品| 久久久久久久久久av| 亚洲精品v天堂中文字幕| 欧美日韩中国免费专区在线看| 日韩成人中文电影| 成人网在线免费观看| 在线日韩av观看| 91高潮精品免费porn| 欧美乱人伦中文字幕在线| 欧美精品第一页在线播放| 亚洲成avwww人| 国产精品视频久| 亚洲国产精品小视频| 日韩小视频在线| 综合激情国产一区| 亚洲xxx大片| 日韩精品视频在线观看免费| 亚洲激情国产精品| 美女视频黄免费的亚洲男人天堂| 欧美资源在线观看| 欧美极品第一页| 午夜剧场成人观在线视频免费观看| 精品在线欧美视频| 日韩在线欧美在线| 亚洲国产精品专区久久| 国产va免费精品高清在线| 欧美一级电影免费在线观看| 久久天天躁狠狠躁夜夜躁2014| 乱亲女秽乱长久久久| 精品电影在线观看| 久久夜精品va视频免费观看| 日本精品久久电影| 欧美精品手机在线| 国产精品国产自产拍高清av水多| 国产精品极品在线| 国产欧美日韩高清| 国产成人久久精品| 日韩视频免费看| 国产精品美女久久久免费| 久久91亚洲人成电影网站| 亚洲精品一区av在线播放| 久久夜色撩人精品| 久久91精品国产| 色偷偷综合社区|