我想看一级黄色大片_久久亚洲国产精品一区二区_久久精品免视看国产明星_91久久青青青国产免费

您的位置:網(wǎng)站首頁 > CAD新聞

用OpenGL開發(fā)虛擬制造環(huán)境

時間:2011-02-26 10:04:25 來源:

  1 計算機(jī)圖形

  1.1 幾何圖形信息的數(shù)組結(jié)構(gòu)

  圖形顯示是從點的顯示開始的。線段是所有在它上面的點的集合。幾何學(xué)上的點是沒有大小的。線段的顯示實際上用有限個點來產(chǎn)生圖形,因而每個點都有一定的大小。此時的點不再是真正的幾何點,而是像素(圖像基本元素)。每個像素是顯示屏上可以編址的最小單元,也是在顯示屏上能夠被控制的最小部分。顯示屏如同由像素組成的二維數(shù)組。每個像素對應(yīng)數(shù)組的一個元素。每個像素有一個地址,對應(yīng)數(shù)組的下標(biāo)。像素亮度值對應(yīng)元素值。設(shè)定顯示屏上每一像素的亮度可以產(chǎn)生一幅圖像。

  1.2 幾何圖形信息的存儲

   

  圖1 幀緩沖器與圖像顯示

  一幅圖像是由有限數(shù)量的像素組成。一個分辨率較高的顯示設(shè)備若在x和y方向各有1000個像素,則這個顯示屏將含有100萬個像素。為了顯示每一點的亮暗,每一像素至少需要1比特的亮度信息,其存儲空間至少需要100萬/8個字節(jié)。用來存儲像素亮度數(shù)組的存儲器稱為幀緩沖器。幀緩沖器是指顯視卡上的顯視存儲器。

  1.3 幾何圖形信息的顯示

  光柵顯示是用得較多的圖形顯示方法。光柵顯示是利用掃描發(fā)生器每秒鐘掃描幀緩沖器30到60次,將代表像素亮度的信息一行一行取出,然后送往顯示器。幀緩沖器的存取地址與光柵掃描信號同步地產(chǎn)生。幀緩沖器的內(nèi)容用來輸出視屏信號控制陰極射線管電子束強(qiáng)度。強(qiáng)度大小決定像素的顯示明暗。幀緩沖器地址用來輸出水平與垂直偏轉(zhuǎn)信號控制陰極射線管電子束的偏轉(zhuǎn)。電子束的偏轉(zhuǎn)決定像素的屏幕坐標(biāo)(x,y)。每一次掃描幀緩沖器都使屏幕得到刷新。由于光柵顯示系統(tǒng)利用直接存儲器存取(DMA)硬件不斷地掃描幀緩沖器,并把圖形顯示出來,因而圖像生成不受中央處理器(CPU)控制。

  1.4 顯示設(shè)備驅(qū)動程序與應(yīng)用程序的可移植性

  應(yīng)用中,應(yīng)用程序編寫的幾何圖形信息不是直接改變幀緩沖器的內(nèi)容而是作為標(biāo)準(zhǔn)顯示指令存入顯示文件中,然后利用顯示設(shè)備驅(qū)動程序解釋顯示指令以產(chǎn)生需要的圖象。顯示文件驅(qū)動程序形成圖形應(yīng)用程序與顯示設(shè)備之間的接口。若應(yīng)用程序可以產(chǎn)生標(biāo)準(zhǔn)顯示文件代碼,那么每個帶有驅(qū)動程序的具體顯示設(shè)備就能正確地運(yùn)行應(yīng)用程序,從而提高了應(yīng)用程序的可移植性。顯示設(shè)備與顯示驅(qū)動程序通常由硬件商一起提供。

  1.5 應(yīng)用程序圖形顯示步驟

  幀緩沖器數(shù)組直接與顯示屏內(nèi)容相對應(yīng),并且以亮度編碼的形式保存了被顯示的圖形。圖形應(yīng)用程序的實現(xiàn)步驟包括:首先由初始化程序分配顯示設(shè)備和存儲器。其次應(yīng)用程序把圖形信息寫入幀緩沖器,由幀緩沖器直接傳送到顯示設(shè)備。空幀緩沖器對應(yīng)空白的顯示屏。最后由結(jié)束圖形程序釋放顯示設(shè)備包括重新分配存儲器。

  2 Windows環(huán)境下的圖形顯示

  2.1 Windows環(huán)境下的虛屏顯示

  在MS-DOS應(yīng)用中,圖形和文本程序不僅常常直接寫到視屏上,而且這樣做時經(jīng)常繞過BIOS屏幕調(diào)用。然而在Windows環(huán)境下避免了這種狀況。首先在多任務(wù)Windows環(huán)境下物理視屏是一個共享資源。所有應(yīng)用程序的顯示活動,都必須通過Windows API函數(shù)來操作。任何試圖繞過API函數(shù)都視為擾亂系統(tǒng)的行為。其次在Windows環(huán)境下屏幕操作根本不寫到物理視屏上,即使使用API函數(shù)時也是這樣。應(yīng)用程序請求寫文本或圖形的操作,都是將信息寫到虛擬屏幕也稱為設(shè)備環(huán)境DC。最后Windows把虛擬屏幕映像到物理顯示屏上。

  2.2 圖形用戶接口(GDI)的客戶/服務(wù)器本質(zhì)

  Windows將應(yīng)用程序從具體輸出設(shè)備中分離出來。在MS-DOS中,應(yīng)用程序負(fù)責(zé)為所有輸出設(shè)備編程。Windows應(yīng)用程序不負(fù)責(zé)對輸出設(shè)備編程。圖形用戶接口GDI為應(yīng)用程序提供了一套獨立于設(shè)備的標(biāo)準(zhǔn)繪圖指令集。對于添加的新硬件,由硬件制造商提供驅(qū)動程序,而應(yīng)用程序則通過GDI創(chuàng)建并維護(hù)設(shè)備環(huán)境(DC)。Win32應(yīng)用程序在Windows95環(huán)境下都被分隔成了用戶模式與核心模式。在用戶模式下禁止直接取用圖形設(shè)備資源,而是交給操作系統(tǒng)核心模式來完成。這種模式稱為GDI的客戶/服務(wù)器模式如圖2。GDI的客戶/服務(wù)器模式有效地將應(yīng)用程序彼此分離,從而提高了Windows 環(huán)境的安全特性。而且任何訪問輸出設(shè)備的函數(shù)都留在GDI的服務(wù)器方,從而保證了入侵應(yīng)用程序不能直接訪問到其它應(yīng)用程序的屏幕數(shù)據(jù)。

   

  圖2

  3 OpenGL應(yīng)用程序的圖形支持

  3.1 OpenGL圖形軟件在應(yīng)用中的地位

  OpenGL是SGI公司的IRIS GL圖形工作站的分支。近年來,作為工業(yè)標(biāo)準(zhǔn)圖形程序庫,在CAD/CAM等需要高級的三維對象可視化和圖形繪制領(lǐng)域得到廣泛應(yīng)用。OpenGL為應(yīng)用程序員提供了程序和圖形輸入輸出設(shè)備之間的功能接口,定義了一個獨立于語言的圖形核心系統(tǒng)。編寫應(yīng)用程序過程中,用符合語言的約定方式把OpenGL嵌入到相應(yīng)的語言之中。OpenGL在圖形應(yīng)用中的地位如圖3所示。由于OpenGL本身與硬件及操作系統(tǒng)的底層軟件無關(guān),從而使圖形應(yīng)用程序獲得較高的可移植性。

   

  圖3

  3.2 OpenGL客戶/服務(wù)器圖形顯示方式

  OpenGL通過客戶/服務(wù)器方式實現(xiàn)圖形顯示。應(yīng)用程序作為客戶工作并調(diào)用OpenGL API。OpenGL客戶模塊同OpenGL服務(wù)模塊通信并發(fā)出應(yīng)用程序的OpenGL命令。OpenGL服務(wù)模塊調(diào)用Win32設(shè)備驅(qū)動接口來使用驅(qū)動程序。一個OpenGL服務(wù)程序往往同時維護(hù)幾個OpenGL環(huán)境。OpenGL環(huán)境是OpenGL客戶所處的OpenGL狀態(tài)。OpenGL環(huán)境又叫著色環(huán)境,是OpenGL與Windows系統(tǒng)之間的橋梁。所有的OpenGL調(diào)用都通過著色環(huán)境來完成。 OpenGL著色環(huán)境與設(shè)備環(huán)境有相同的像素格式。在為一個設(shè)備環(huán)境設(shè)置好了像素格式后就可以產(chǎn)生一個與之接近的著色環(huán)境。通過給出的設(shè)備環(huán)境,著色環(huán)境就可以在設(shè)備環(huán)境指出的設(shè)備上繪圖。其邏輯模式如圖4。

   

  圖4

  用OpenGL去著色一個Windows窗口的典型操作過程如下:

  . 建立正確的窗口格式;

  . 建立像素格式;

  . 創(chuàng)建設(shè)備環(huán)境;

  . 創(chuàng)建一個著色環(huán)境;

  . 將著色環(huán)境設(shè)為一個線程的當(dāng)前著色環(huán)境;

  . 線程進(jìn)行有關(guān)OpenGL的初始化;

  . 線程調(diào)用OpenGL著色函數(shù);

  . 當(dāng)OpenGL處理結(jié)束后,將著色環(huán)境設(shè)為非當(dāng)前使用的(斷開與著色環(huán)境的聯(lián)系);

  . 釋放著色環(huán)境與設(shè)備環(huán)境。