摘 要 在大數(shù)據(jù)量條件下,實(shí)時(shí)動(dòng)態(tài)顯示三維曲面較困難,其關(guān)鍵在于提高三維圖形數(shù)據(jù)處理和圖形繪制速度。
通過對(duì)基于圖形工業(yè)標(biāo)準(zhǔn)OpenGL實(shí)現(xiàn)三維曲面動(dòng)態(tài)顯示的原理和方法的討論,提出采用OpenGL的雙緩存、顯示列表技術(shù),大幅度提高了圖形數(shù)據(jù)處理和刷新速度,保證了每幀數(shù)據(jù)圖形繪制的連續(xù)性和完整性,成功實(shí)現(xiàn)了三維曲面數(shù)據(jù)場實(shí)時(shí)動(dòng)態(tài)顯示。
關(guān)鍵詞 OpenGL 三維曲面 動(dòng)態(tài)顯示
引言
在某三維數(shù)據(jù)場中,數(shù)據(jù)隨時(shí)間的變化而發(fā)生變化,為直觀觀察數(shù)據(jù)隨時(shí)間變化的態(tài)勢,需對(duì)數(shù)據(jù)場的變化實(shí)時(shí)動(dòng)態(tài)顯示。利用網(wǎng)格曲面顯示三維數(shù)據(jù)場是一種直觀的方法,但需經(jīng)過數(shù)據(jù)插值、投影、曲面拼接、消隱等處理后方可繪制圖形,計(jì)算量較大。在數(shù)據(jù)量較大的情況下,實(shí)時(shí)動(dòng)態(tài)顯示三維曲面圖形較困難,其關(guān)鍵在于提高每幀圖形處理和繪制刷新速度,以保證每幀三維曲面顯示時(shí)的連貫性和完整性。
OpenGL是性能卓越的圖形處理工具,采用OpenGL雙緩存和繪圖操作予編譯技術(shù),較好解決了三維圖形數(shù)據(jù)處理和繪圖刷新速度問題。利用Visual C++調(diào)用OpenGL的三維圖形編程接口成功實(shí)現(xiàn)了大數(shù)據(jù)量的三維曲面圖形的實(shí)時(shí)動(dòng)態(tài)顯示。
基于OpenGL的三維曲面動(dòng)態(tài)顯示原理
1、基于OpenGL三維曲面圖形顯示原理
OpenGL是獨(dú)立于操作系統(tǒng)的開放式三維圖形軟件接口。其主要功能是將三維曲面通過頂點(diǎn)序列或像素點(diǎn)進(jìn)行描述,并進(jìn)行相應(yīng)的透視、光照、紋理操作,最終轉(zhuǎn)換成幀緩存中的圖像數(shù)據(jù),利用該圖像數(shù)據(jù)進(jìn)行三維曲面圖形的著色。三維曲面圖形顯示歸納為以下幾個(gè)步驟:
(1)在三維場景中建立曲面繪制的模型。選用插值方法、參數(shù)曲面函數(shù),計(jì)算曲面控制點(diǎn),進(jìn)行曲面重構(gòu);
(2)設(shè)置視點(diǎn)和透視方式;
(3)進(jìn)行消隱、光照、紋理、明暗處理;
(4)繪制場景,輸出到屏幕窗口。
圖1 三維曲面圖形顯示基本流程
2、利用雙緩存實(shí)現(xiàn)動(dòng)態(tài)顯示原理
三維曲面動(dòng)態(tài)顯示需要連續(xù)地繪制三維曲面并顯示場景,用不同的曲面數(shù)據(jù)刷新屏幕視窗。
在OpenGL中利用雙緩存技術(shù),分配兩個(gè)幀緩存區(qū),在連續(xù)顯示三維曲面時(shí),一個(gè)幀緩沖區(qū)中的數(shù)據(jù)執(zhí)行繪制曲面命令的同時(shí),另一個(gè)幀緩存區(qū)中的數(shù)據(jù)進(jìn)行圖形顯示。當(dāng)前可見視頻緩存稱為前臺(tái)視頻緩存,不可見的正在繪圖的視頻緩存稱為后臺(tái)視頻緩存。當(dāng)后臺(tái)視頻緩存中的數(shù)據(jù)要求顯示時(shí),OpenGL就將它拷貝至前臺(tái)視頻緩存,顯示硬件不斷地讀可見視頻緩存中的內(nèi)容,并把結(jié)果顯示在屏幕上。
應(yīng)用雙緩存,每一幀三維曲面只在繪制完成之后才顯示出來,所以觀察者可以看到每一幀完整三維曲面,而不是曲面的繪制過程。
使用雙緩存實(shí)現(xiàn)三維曲面動(dòng)態(tài)顯示的步驟如下:
(1)設(shè)置OpenGL窗口顯示屬性為雙緩存機(jī)制:auxInitDisplayMode(AUX_DOUBLE|AUX_RGBA);
(2)利用OpenGL基本繪圖命令繪制三維曲面;
(3)一幀曲面繪圖結(jié)束后緩存拷貝,切換緩存:auxSwapBuffers();
SwapBuffers(wglGetCurrentDC());
3、利用顯示列表提高程序運(yùn)行效率
顯示列表是一組預(yù)先存儲(chǔ)起來留待以后調(diào)用的函數(shù)語句。調(diào)用顯示列表時(shí)就按次序執(zhí)行其中的函數(shù)。顯示列表將反復(fù)執(zhí)行的繪圖操作以編譯好的命令方式進(jìn)行存儲(chǔ),設(shè)計(jì)成命令的高速緩存,而不是動(dòng)態(tài)的數(shù)據(jù)庫緩存,所以可以優(yōu)化程序運(yùn)行性能。
實(shí)現(xiàn)和調(diào)用顯示列表的方法:
(1)創(chuàng)建列表:
void glNewList(Gluint list,Glenm mode);
void glBegin(Glenum mode);
void glEnd(void);
void glEndList();
(2)調(diào)用列表:
void glCallList(Gluint list);
基于OpenGL的三維曲面動(dòng)態(tài)顯示實(shí)現(xiàn)
通過對(duì)基于圖形工業(yè)標(biāo)準(zhǔn)OpenGL實(shí)現(xiàn)三維曲面動(dòng)態(tài)顯示的原理和方法的討論,提出采用OpenGL的雙緩存、顯示列表技術(shù),大幅度提高了圖形數(shù)據(jù)處理和刷新速度,保證了每幀數(shù)據(jù)圖形繪制的連續(xù)性和完整性,成功實(shí)現(xiàn)了三維曲面數(shù)據(jù)場實(shí)時(shí)動(dòng)態(tài)顯示。
關(guān)鍵詞 OpenGL 三維曲面 動(dòng)態(tài)顯示
引言
在某三維數(shù)據(jù)場中,數(shù)據(jù)隨時(shí)間的變化而發(fā)生變化,為直觀觀察數(shù)據(jù)隨時(shí)間變化的態(tài)勢,需對(duì)數(shù)據(jù)場的變化實(shí)時(shí)動(dòng)態(tài)顯示。利用網(wǎng)格曲面顯示三維數(shù)據(jù)場是一種直觀的方法,但需經(jīng)過數(shù)據(jù)插值、投影、曲面拼接、消隱等處理后方可繪制圖形,計(jì)算量較大。在數(shù)據(jù)量較大的情況下,實(shí)時(shí)動(dòng)態(tài)顯示三維曲面圖形較困難,其關(guān)鍵在于提高每幀圖形處理和繪制刷新速度,以保證每幀三維曲面顯示時(shí)的連貫性和完整性。
OpenGL是性能卓越的圖形處理工具,采用OpenGL雙緩存和繪圖操作予編譯技術(shù),較好解決了三維圖形數(shù)據(jù)處理和繪圖刷新速度問題。利用Visual C++調(diào)用OpenGL的三維圖形編程接口成功實(shí)現(xiàn)了大數(shù)據(jù)量的三維曲面圖形的實(shí)時(shí)動(dòng)態(tài)顯示。
基于OpenGL的三維曲面動(dòng)態(tài)顯示原理
1、基于OpenGL三維曲面圖形顯示原理
OpenGL是獨(dú)立于操作系統(tǒng)的開放式三維圖形軟件接口。其主要功能是將三維曲面通過頂點(diǎn)序列或像素點(diǎn)進(jìn)行描述,并進(jìn)行相應(yīng)的透視、光照、紋理操作,最終轉(zhuǎn)換成幀緩存中的圖像數(shù)據(jù),利用該圖像數(shù)據(jù)進(jìn)行三維曲面圖形的著色。三維曲面圖形顯示歸納為以下幾個(gè)步驟:
(1)在三維場景中建立曲面繪制的模型。選用插值方法、參數(shù)曲面函數(shù),計(jì)算曲面控制點(diǎn),進(jìn)行曲面重構(gòu);
(2)設(shè)置視點(diǎn)和透視方式;
(3)進(jìn)行消隱、光照、紋理、明暗處理;
(4)繪制場景,輸出到屏幕窗口。
圖1 三維曲面圖形顯示基本流程
2、利用雙緩存實(shí)現(xiàn)動(dòng)態(tài)顯示原理
三維曲面動(dòng)態(tài)顯示需要連續(xù)地繪制三維曲面并顯示場景,用不同的曲面數(shù)據(jù)刷新屏幕視窗。
在OpenGL中利用雙緩存技術(shù),分配兩個(gè)幀緩存區(qū),在連續(xù)顯示三維曲面時(shí),一個(gè)幀緩沖區(qū)中的數(shù)據(jù)執(zhí)行繪制曲面命令的同時(shí),另一個(gè)幀緩存區(qū)中的數(shù)據(jù)進(jìn)行圖形顯示。當(dāng)前可見視頻緩存稱為前臺(tái)視頻緩存,不可見的正在繪圖的視頻緩存稱為后臺(tái)視頻緩存。當(dāng)后臺(tái)視頻緩存中的數(shù)據(jù)要求顯示時(shí),OpenGL就將它拷貝至前臺(tái)視頻緩存,顯示硬件不斷地讀可見視頻緩存中的內(nèi)容,并把結(jié)果顯示在屏幕上。
應(yīng)用雙緩存,每一幀三維曲面只在繪制完成之后才顯示出來,所以觀察者可以看到每一幀完整三維曲面,而不是曲面的繪制過程。
使用雙緩存實(shí)現(xiàn)三維曲面動(dòng)態(tài)顯示的步驟如下:
(1)設(shè)置OpenGL窗口顯示屬性為雙緩存機(jī)制:auxInitDisplayMode(AUX_DOUBLE|AUX_RGBA);
(2)利用OpenGL基本繪圖命令繪制三維曲面;
(3)一幀曲面繪圖結(jié)束后緩存拷貝,切換緩存:auxSwapBuffers();
SwapBuffers(wglGetCurrentDC());
3、利用顯示列表提高程序運(yùn)行效率
顯示列表是一組預(yù)先存儲(chǔ)起來留待以后調(diào)用的函數(shù)語句。調(diào)用顯示列表時(shí)就按次序執(zhí)行其中的函數(shù)。顯示列表將反復(fù)執(zhí)行的繪圖操作以編譯好的命令方式進(jìn)行存儲(chǔ),設(shè)計(jì)成命令的高速緩存,而不是動(dòng)態(tài)的數(shù)據(jù)庫緩存,所以可以優(yōu)化程序運(yùn)行性能。
實(shí)現(xiàn)和調(diào)用顯示列表的方法:
(1)創(chuàng)建列表:
void glNewList(Gluint list,Glenm mode);
void glBegin(Glenum mode);
void glEnd(void);
void glEndList();
(2)調(diào)用列表:
void glCallList(Gluint list);
基于OpenGL的三維曲面動(dòng)態(tài)顯示實(shí)現(xiàn)

