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

首頁 > 編程 > C++ > 正文

在C++ Builder中使用OpenGL編程的優(yōu)化框架

2019-09-06 23:34:00
字體:
供稿:網(wǎng)友

                    姑且不談?wù)揙penGL的名貴背景和光明前途,單憑其實(shí)用性和有效性就足以使其成為我們圖形輸出編程的首選。但是在實(shí)際工程應(yīng)用中程序員沒必要仔細(xì)地深究OpenGL的運(yùn)作機(jī)制,也往往不需要掌握各種高級的效果制作,真正需要的是最簡捷地利用這個(gè)得力的工具實(shí)現(xiàn)輸出數(shù)據(jù)的可視化,如波形、譜圖、立體統(tǒng)計(jì)圖表等的顯示。有鑒于此,本文總結(jié)出了在C++Builder中OpenGL編程的實(shí)用框架。筆者經(jīng)過實(shí)踐,對于一般的圖形輸出的應(yīng)用,此框架足以應(yīng)付。對于復(fù)雜些的程序可以在本框架的基礎(chǔ)上進(jìn)行擴(kuò)充。
在Windows環(huán)境下用OpenGL編程至少要了解如下預(yù)備知識:
OpenGL本身:對于一般的應(yīng)用,我們可以認(rèn)為OpenGL就是一套與窗口系統(tǒng)和操作系統(tǒng)無關(guān)的三維圖形函數(shù)庫。
DC和RC:每個(gè)Win32應(yīng)用程序都有一個(gè)設(shè)備描述表(Device Context)簡稱DC,在這個(gè)設(shè)備描述表中包含了圖形怎樣顯示在窗口的設(shè)置( GDI)信息。調(diào)用OpenGL函數(shù)必須使用設(shè)備描述表才能正確地在窗口輸出。圖形操作描述表(Rendering Context)簡稱RC,是一種設(shè)備描述表的形式,在圖形操作描述表中存放一些OpenGL和操作系統(tǒng)相聯(lián)系的信息。圖形操作描述表是傳遞所有OpenGL命令的端口。
像素格式:像素格式定義了OpenGL繪圖的屬性,創(chuàng)建圖形操作描述表首先要定義象素格式。它由這樣一個(gè)數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)
typedef struct tagPIXELFORMATDESCRIPTOR  
{  
WORD nSize; //結(jié)構(gòu)大小  
WORD nVersion; //版本  
DWORD dwFlags; //象素緩沖的位標(biāo)志  
BYTE iPixelType; //RGBA模式或顏色索引模式  
BYTE cColorBits; //顏色位數(shù)  
BYTE cRedBits; //RGBA模式下R所占位數(shù)  
BYTE cRedShift; //RGBA模式下R位數(shù)偏移  
BYTE cGreenBits; //RGBA模式下G所占位數(shù)  
BYTE cGreenShift; //RGBA模式下G位數(shù)偏移  
BYTE cBlueBits; //RGBA模式下B所占位數(shù)  
BYTE cBlueShift; //RGBA模式下B位數(shù)偏移  
BYTE cAlphaBits; //RGBA模式下Alpha所占位數(shù)  
BYTE cAlphaShift; //RGBA模式下Alpha位數(shù)偏移  
BYTE cAccumBits; //累計(jì)緩沖區(qū)位面總數(shù)  
BYTE cAccumRedBits; //累計(jì)緩沖區(qū)R位面總數(shù)  
BYTE cAccumGreenBits; //累計(jì)緩沖區(qū)G位面總數(shù)  
BYTE cAccumBlueBits; //累計(jì)緩沖區(qū)B位面總數(shù)  
BYTE cAccumAlphaBits; //累計(jì)緩沖區(qū)Alpaha位面總數(shù)  
BYTE cDepthBits; //深度緩沖位數(shù)  
BYTE cStencilBits; //模板緩沖位數(shù)  
BYTE cAuxBuffers; //Win32 下不支持  
BYTE iLayerType; //不再使用  
BYTE bReserved; //0  
DWORD dwLayerMask; //不再使用  
DWORD dwVisibleMask; //0  
DWORD dwDamageMask; //不再使用  
} PIXELFORMATDESCRIPTOR;  
雙緩沖技術(shù):OpenGL支持一個(gè)顯示緩沖和一個(gè)非顯示緩沖。缺省的情況是所有的OpenGL繪制命令在非顯示緩沖中繪制,繪制完成后再將其內(nèi)容拷貝到顯示緩沖區(qū)中(使用SwapBuffers函數(shù))。雙緩沖使圖象轉(zhuǎn)換更平滑,這就是在快速動畫(如波形等的實(shí)時(shí)輸出)時(shí)沒有屏幕閃爍的奧妙所在。
反走樣技術(shù):實(shí)際中需要畫出的往往是曲線,由于計(jì)算機(jī)以離散點(diǎn)生成圖形,曲線上會有鋸齒,這就是一種走樣現(xiàn)象。在用一般語言畫圖時(shí),這一現(xiàn)象是難以避免的。OpenGL中利用混合技術(shù),把原來邊界的鋸齒部分用低飽和度的點(diǎn)補(bǔ)上從而實(shí)現(xiàn)反走樣,達(dá)到平滑的邊界效果。
好,我們現(xiàn)在可以啟用下面的程序框架了。
在*.h文件的類聲明中添加private成員:
private:
HGLRC hRC;  
HDC hDC;
以下是相應(yīng)*.cpp文件
首先加上兩個(gè)包含文件:
#include <glgl.h> //程序使用OpenGL的核心函數(shù)
#include <glglu.h> //程序使用實(shí)用庫中的函數(shù)
一、在FormCreate()函數(shù)中完成OpenGL的初始化
使用OpenGL必須首先進(jìn)行一些初始化工作,具體包含以下步驟:
1、創(chuàng)建DC  
hDC=GetDC(Handle);  
此句獲取一個(gè)設(shè)備描述表,TForm1->Handle中保存有Form的窗口句柄;很多情況下我們希望在一個(gè)Panel中輸出圖形,那么可以用Panel1->Handle作為此函數(shù)的參數(shù)。
2、創(chuàng)建RC  
(1)定義像素格式
static PIXELFORMATDESCRIPTOR pfd={
sizeof(PIXELFORMATDESCRIPTOR), //此結(jié)構(gòu)的大小
1, //此結(jié)構(gòu)的版本
PFD_DRAW_TO_WINDOW| //在窗口上繪圖(而不是在位圖上)
PFD_SUPPORT_OPENGL| //在窗口中支持使用OpenGL
PFD_DOUBLEBUFFER, //使用雙緩沖模式
PFD_TYPE_RGBA, //使用RGBA色彩模式
24, //存儲顏色數(shù)據(jù)的位數(shù)
0,0,0,0,0,0,
0,0,0,0,0,0,0,
32, //深度緩沖區(qū)大小
0,0,
PFD_MAIN_PLANE, //在主平面上繪圖
0,
0,0,0
};
(2)選擇最佳像素格式
int iPixelFormat=ChoosePixelFormat(hDC,&pfd);
選擇一最適合上述pfd結(jié)構(gòu)的像素格式,并把保存索引號。
SetPixelFormat(hDC,iPixelFormat,&pfd);
按選擇的索引號設(shè)置設(shè)備描述表的像素格式。
(3)用DC創(chuàng)建RC
hRC=wglCreateContext(hDC);  
用指定的設(shè)備描述表產(chǎn)生一個(gè)圖形操作描述表,使它在該設(shè)備描述表上繪圖,并且有與此設(shè)備描述表相同的像素格式。
3、指定當(dāng)前的DC、RC
wglMakeCurrent(hDC,hRC);  
把產(chǎn)生的圖形操作描述表置為當(dāng)前的,程序此后的所有OpenGL函數(shù)都通過此圖形操作描述表執(zhí)行,并將圖形繪制在設(shè)備描述表引用的設(shè)備上。
到此就完成了初始化工作,這些步驟基本上是固定的(像素格式的參數(shù)設(shè)置也是如此),對于一般的應(yīng)用可以直接使用上述語句。
二、在FormDestroy()中作清理工作以釋放資源
1、清屏
glClearColor(0.0,0.0,0.0,1.0);  
設(shè)置背景色為黑色。
glClear(GL_COLOR_BUFFER_BIT);  
清屏以防止對以后窗口操作的影響。
2、當(dāng)前DC、RC置空
wglMakeCurrent(NULL,NULL);  
使不再有當(dāng)前的圖形操作描述表。
3、刪除DC、RC
wglDeleteContext(hRC);  
刪除該圖形操作描述表。
DeleteObject(hDC);  
刪除該設(shè)備描述表。
如果在同一個(gè)程序里對多個(gè)窗體用繪圖必須嚴(yán)格進(jìn)行清理,否則輸出會出現(xiàn)混亂。
三、在FormPaint()中實(shí)施繪圖的相關(guān)操作
每當(dāng)窗體重畫時(shí)進(jìn)行繪圖的動作。OnPaint事件可能由系統(tǒng)觸發(fā)例如置為當(dāng)前窗口;也可以由程序觸發(fā)即在需要改變繪圖時(shí)調(diào)用TForm->FormPaint(Sender)。把所有繪圖操作統(tǒng)一歸入FormPaint()事件的響應(yīng)函數(shù)中使我們很容易控制繪圖的時(shí)機(jī),程序變得很有條理。
1、繪圖準(zhǔn)備
(1)指定DC  
HDC hDC;
hDC=wglGetCurrentDC();
在多個(gè)設(shè)備描述表如多個(gè)繪圖面板時(shí)有必要指定此后OpenGL命令輸出的目標(biāo)。
(2)清屏
動態(tài)的圖形輸出必須有清屏的操作將上此繪圖的結(jié)果以背景色覆蓋掉,以便畫新的圖形。
glClearColor(0.0,0.0,0.0,1.0);  
背景色以黑色為例。
glClear(GL_COLOR_BUFFER_BIT);  
清屏命令。
(3)啟動反走樣功能(可選)
glEnable(GL_BLEND);  
啟動混合。
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);  
指定混合的屬性。
glEnable(GL_LINE_SMOOTH);  
啟動線反走樣。
glHint(GL_LINE_SMOOTH_HINT,GL_NICEST);  
指定為線反走樣且為最好質(zhì)量。
注意在繪圖結(jié)束后要有相應(yīng)的關(guān)閉反走樣的操作,以防止影響程序以后的操作,語句如下
glDisable(GL_LINE_SMOOTH);
glDisable(GL_BLEND);
2、繪圖
調(diào)用自定義的繪圖函數(shù)RenderSence()。
3、緩沖操作
glFlush();  
強(qiáng)制完成繪圖工作。
SwapBuffers(hDC);  
完成兩個(gè)圖形緩沖區(qū)的交換,把畫完的非顯示緩沖圖形顯示出來。
四、編寫繪圖函數(shù)
即定義RenderSence()函數(shù),完成真正的繪圖操作。實(shí)際上是把工程計(jì)算的結(jié)果作為參數(shù)調(diào)用OpenGL的各種繪圖庫函數(shù)。具體函數(shù)與畫法請參閱有關(guān)書籍。我們把單純的繪圖和效果設(shè)定單列出來作為一個(gè)函數(shù)供FormPaint()調(diào)用,這樣的結(jié)構(gòu)使畫圖編程變得非常靈活。更復(fù)雜的情況可以寫多個(gè)自定義繪圖函數(shù),也可以引入?yún)?shù)列表。
五、視口變換
OpenGL中有多種圖形變換,其中視口變換是比較簡單而且常用的變換方式,所以也歸為本框架的一部分。事實(shí)上只需要使用一個(gè)函數(shù)
glViewport(0,0, ClientWidth, ClientHeight);  
此函數(shù)可以指定全部圖形最后投影的一個(gè)矩形區(qū)域,上句以整個(gè)窗體的客戶區(qū)為例。在FormResize()事件響應(yīng)函數(shù)中調(diào)用這個(gè)函數(shù)可以使圖形在窗體大小形狀變化時(shí)保持相同比例的縮放。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

亚洲午夜免费| 久久96国产精品久久99软件| 写真福利片hd在线观看| 日本网站在线看| 99热免费精品在线观看| 久久久www成人免费毛片| 18av千部影片| 久久精品国产av一区二区三区| 亚洲精品一二三区| 超碰在线中文字幕| av在线不卡免费观看| 国产女人伦码一区二区三区不卡| 在线观看国产一区二区三区| 久久免费精品国产久精品久久久久| 97久久久久久| 美女三级黄色片| 肥熟一91porny丨九色丨| 国产精品第七影院| 久久亚洲国产视频| 国产乱码精品一区二区三区四区| 欧美四级电影网| 波多野结衣的一区二区三区| 翔田千里一区| 91禁外国网站| 国产日韩av一区二区| 亚洲成在人线免费视频| 亚洲国产精品成人精品| 亚洲图片欧美日产| 视频在线观看一区二区三区| 色综合视频在线观看| 国产精品免费视频一区一| a级片在线播放| 免费在线观看亚洲| 精品国产一二三四区| 曰本大片免费观看视频| 无码一区二区精品| 91av手机在线| 7777精品久久久久久| av色综合久久天堂av色综合在| 神马电影网我不卡| 欧美日韩精品系列| 久久久日本电影| 中文字幕久久亚洲| 欧美日韩国产影片| 日韩一级性生活片| 国产精品久久久久久久久影视| www.国产三级| 国产麻豆一精品一男同| 欧美日韩成人一区二区| 色伦专区97中文字幕| 国产激情综合五月久久| 网曝91综合精品门事件在线| 国产精品视频流白浆免费视频| 极品美乳网红视频免费在线观看| 亚洲视频精品在线观看| 亚洲精品7777xxxx青睐| 久久久久久久久久久亚洲| 国产欧美一区二区精品仙草咪| 无码av天堂一区二区三区| 理论片播放午夜国外| 欧美视频小说| 久久无码专区国产精品s| 成人免费图片免费观看| 成人免费视频网址| 亚洲福利在线看| 久久国产精品72免费观看| 91精品国产综合久久国产大片| 国产在线一区二区三区| 国产在线视精品麻豆| 激情综合丝袜美女一区二区| 亚洲国产美女久久久久| 亚洲国产日韩a在线播放性色| 99国产精品久久久久久久成人热| yy1111111| 精品国偷自产在线| 日韩在线精品强乱中文字幕| 日韩资源在线观看| 亚洲美女精品成人在线视频| 51精品秘密在线观看| 在线播放黄网| 国产欧美一区视频| 国产午夜精品美女毛片视频| 久久xxx视频| 亚洲第五色综合网| 国产一级二级在线| wwwww黄色| 日韩免费电影一区二区三区| 伊人网伊人影院| 欧美成人手机在线| 久久久一本精品99久久精品| 日韩少妇与小伙激情| 最新中文字幕久久| 国产精品区在线| 久久这里只精品| 国产美女精品视频国产| 最近2019中文字幕mv免费看| h片视频在线观看| 国产黑丝一区二区| 91 com成人网| 成人亚洲网站| 日日干夜夜骑| 日韩三级电影网站| 精品美女久久久久| 婷婷精品视频| 年下总裁被打光屁股sp| 欧美午夜精品一区二区蜜桃| 久久久久久噜噜噜久久久精品| 黄页视频在线播放| 亚洲欧洲av在线| 免费大片在线观看www| 亚洲剧情一区二区| 精品国产一区二区三区成人影院| 精品国产一区二区三区久久久狼牙| 国产午夜视频在线播放| 国内精品小视频| 亚洲国产精品女人| 午夜精品短视频| 牛牛电影国产一区二区| 欧美性猛交xxxx| 97国产精品视频| 最新中文字幕2018| 亚洲婷婷影院| 欧美一区二区三区| 久久精品夜夜夜夜夜久久| 亚洲国产成人精品激情在线| 亚洲欧美卡通动漫| 欧美精品乱人伦久久久久久| 亚洲成人网上| 五月婷婷导航| 可以在线观看的黄色| 久久久久亚洲| www日韩在线| 国产极品尤物在线| www.午夜精品| 国产又粗又猛又黄又爽无遮挡| 91在线视频网址| 国产三级电影在线| 精品国产免费观看| 九色综合狠狠综合久久| 中文字幕综合一区| 在线视频你懂得一区二区三区| 亚洲国产精品久久久久婷婷老年| 欧美日韩一区在线视频| 亚洲无线视频| 真实国产乱子伦精品一区二区三区| 亚洲av成人精品日韩在线播放| 国产绿帽刺激高潮对白| 亚洲护士老师的毛茸茸最新章节| 少妇被狂c下部羞羞漫画| 日韩成人精品在线观看| 在线中文免费视频| 色婷婷久久综合中文久久蜜桃av| 日韩视频在线免费看| 黄色一级a毛片| 天堂√最新版中文在线| 日韩一区二区三区视频在线| 成人午夜一级| 老女人av在线| 精品少妇人妻一区二区黑料社区| av一区二区在线播放| 成人免费xxxxx在线视频| 91a在线视频| 国产男男gay体育生白袜| 成人免费在线视频播放| 精品三区视频| 亚洲国产精品毛片av不卡在线| 国产网站在线播放| 国产乱码一区二区三区| 理论不卡电影大全神| 人妻夜夜添夜夜无码av| 久久久精品国产网站| 国产欧美高清视频在线| 91精品国产66| 全部孕妇毛片丰满孕妇孕| 欧美日韩一区自拍| 国产香蕉精品视频一区二区三区| 日本福利小视频| 激情五月综合婷婷| 怡红院怡春院首页| 精品人妻一区二区三区四区不卡| 亚洲视频二区| 天天av天天爱| 午夜激情福利电影| 成人小说亚洲一区二区三区| 亚洲精品videosex极品| 日本精品在线视频| 成视频在线免费观看| 国产欧美精品| 黄网站免费看| 中文字幕一区二区三区四区五区| 特黄特色特刺激视频免费播放| 成人午夜免费av| 中文字幕人成高视频| 欧美亚洲一区二区在线观看| 日韩av中文字幕一区二区三区| 国产一区二区在线不卡| 国产毛片毛片毛片毛片| 色综合一区二区| 欧洲杯半决赛直播| 精品国产美女| 国产精品vvv| 久久99蜜桃综合影院免费观看| 波多野结衣 作品| 日韩在线观看网址| 久久蜜桃香蕉精品一区二区三区| 一区二区三区高清在线| 在线亚洲+欧美+日本专区| 久久国产精品色av免费看| 自拍小视频在线观看| 精品国产欧美日韩不卡在线观看| 欧美性猛交一区二区三区精品| 99riav久久精品riav| 涩涩视频免费看| 九九色在线观看| 国产精品久免费的黄网站| 日韩精品www| 国产精品中文字幕欧美| 亚洲无人区码一码二码三码| 国产欧美日韩小视频| 亚洲色图影院| 超碰在线人人干| 91在线一区二区三区| 亚洲精品一区二区三区在线播放| 欧美精品成人网| 日av在线播放中文不卡| 99久久国产综合精品麻豆| 亚洲 美腿 欧美 偷拍| 欧美日韩美女一区二区| 三年中文高清在线观看第6集| 精品一区二区三区免费毛片爱| 7777kkk亚洲综合欧美网站| 一区二区亚洲视频| 影音先锋欧美在线| 在线视频xx| 不许穿内裤随时挨c调教h苏绵| 国产伦精品一区二区三区照片91| 深夜福利亚洲导航| 亚洲国产日韩a在线播放性色| 成人在线视频中文字幕| 2020中文字幕在线| 欧美影院一区二区三区| 欧美极品免费| 久久人妻免费视频| 国产成人三级在线观看| 99re免费视频精品全部| 亚洲码国产岛国毛片在线| 不卡av影片| 青春草国产成人精品久久| 97久久精品一区二区三区的观看方式| 一区二区三区小说| 国产精品不卡一区二区三区| 七七婷婷婷婷精品国产| 欧美黄色性视频| 毛片免费在线播放| 国产精品精品一区二区三区午夜版| 小草av在线播放| 午夜黄色在线观看| 欧美另类在线播放| 成人资源www网在线最新版| 97理论电影| 三级影片在线观看欧美日韩一区二区| 中文字幕一区二区三区精彩视频| 五月天亚洲一区| 最近2018年手机中文在线| 久久精品国产一区二区三区日韩| 搞黄在线观看| 免费黄色在线视频网站| 国产69精品久久| 粉嫩av一区二区三区四区五区| 卡一精品卡二卡三网站乱码| 岛国视频一区| 在线观看18视频网站| 亚欧洲精品在线视频免费观看| 在线看国产日韩| 伊人再见免费在线观看高清版| 2017亚洲天堂| 国产精品偷伦免费视频观看的| 精品欧美一区二区久久久久| 国产精品久久久久久久无码| 美女视频久久黄| 国产鲁鲁视频在线观看免费| 99久久国产综合色|国产精品| av毛片午夜不卡高**水| 韩国日本不卡在线| 欧美午夜不卡影院在线观看完整版免费| 亚洲韩国一区二区三区| 无码小电影在线观看网站免费| 亚洲免费成人在线| 潘金莲一级淫片aaaaa免费看| 99久久婷婷国产一区二区三区| 久久久久久国产精品免费免费| 欧美精品日韩精品| 国产亚洲精品成人a| 欧美超碰在线观看| 中文在线字幕免费观看| 午夜精品久久久久久久久久久久久| 欧美gay囗交囗交| 男人皇宫亚洲男人2020| 欧美性猛交xxxx乱大交极品| 精品国产一区三区| 香蕉久久国产av一区二区| 成人在线免费观看一区| 羞羞色午夜精品一区二区三区| 亚州精品一二三区| 午夜久久av| 午夜国产不卡在线观看视频| 国产高清自产拍av在线| 香蕉视频色在线观看| 日韩精品无码一区二区三区| 国产精品99久久久久久久久久久久| 少妇按摩一区二区三区| 黄色片视频在线观看| 国产在线美女| 欧美老熟妇喷水| 亚洲人成高清| 欧美第一区第二区| 一本久久精品一区二区| 在线欧美一区| 国产99久久久久久免费看农村| 久久久久久久久电影| 视频在线亚洲| 美女不穿衣服的网站| 俄罗斯av网站| 欧美精品777| 亚洲成人精品av| 久久精品国产一区| 一区二区三区在线资源| 小鲜肉gaygays免费动漫|