freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

簡(jiǎn)單的三維場(chǎng)景制作畢業(yè)論文-資料下載頁

2025-06-02 00:30本頁面
  

【正文】 RC 的應(yīng)用程序中,在相應(yīng) WM_CREATE 消息時(shí)創(chuàng)建 RC,當(dāng) WM_CLOSE 或 WM_DESTROY 到來時(shí)再刪除它。在使用 OpenGL 命令往窗口中繪圖之前,必須先建立一個(gè) RC,并使之成為現(xiàn)行 RC。 OpenGL 命令無需提供 RC,它將自動(dòng)使用現(xiàn)行 RC。若無現(xiàn)行 RC, OpenGL 將簡(jiǎn)單地忽略所有的繪圖命令。一個(gè) RC是指現(xiàn)行 RC,這是針對(duì)調(diào)用線程而言的。一個(gè)線程在擁有現(xiàn)行 RC 進(jìn)行繪圖時(shí),別的線程將無法同時(shí)繪圖 。一個(gè)線程一次只能擁有一個(gè)現(xiàn)行 RC,但是可以擁有多個(gè) RC;一個(gè) RC 也可以由多個(gè)線程共享,但是它每次只能在一個(gè)線程中是現(xiàn)行RC。在使用現(xiàn)行 RC 時(shí),不應(yīng)該釋放或者刪除與之關(guān)聯(lián)的 DC。如果應(yīng)用程序在整個(gè)生命期內(nèi)保持一個(gè)現(xiàn)行 RC,則應(yīng)用程序也一直占有一個(gè) DC資源。注意, Windows系統(tǒng)只有有限的 DC 資源。 下面介紹兩種管理 RC與 DC 的方法。 方法一: RC 由 WM_CREATE 消息響應(yīng)時(shí)創(chuàng)建,創(chuàng)建后立即釋放 DC;當(dāng) WM_PAINT消息到來時(shí),程序再獲取 DC 句柄,并與 RC關(guān)聯(lián)起來,繪圖完成后,立即解除RC與 DC 的關(guān)聯(lián), 并釋放 DC;當(dāng) WM_DESTROY 消息到來時(shí),程序只需簡(jiǎn)單地刪除RC即可。如圖 所示。 圖 RC與 DC的管理方法一 WM_CREATE Get the DC handle(GetDC) Create the DC Release the DC handle(Release DC) WM_DESTROY Delete the RC WM_PAINT Get the DC handle(GetDC) Make the RC current Draw with OpenGL Make the RC not current Release the DC handle(Release DC) 消息循環(huán) 方法二: RC 在程序開始時(shí)創(chuàng)建并使之成為現(xiàn)行 RC。它將保持為現(xiàn)行 RC 直至程序結(jié)束。相應(yīng)地, GetDC 在程序開始時(shí)調(diào)用, ReleaseDC 在程序結(jié)束時(shí)才調(diào)用。此種方法的好處是在響應(yīng) WM_PAINT 消息時(shí),無需調(diào)用十分耗時(shí)的wglMakeCurrent 函數(shù),一般它要消耗幾千個(gè)時(shí)鐘周期。如圖 所示。如果應(yīng)用程序需要使用動(dòng)畫或?qū)?時(shí)圖形,建立采用第二種方法。 圖 RC與 DC的管理方法 二 調(diào)色板的使用 (1) Windows 下的調(diào)色板 WM_CREATE Get the DC handle(GetDC) Create the RC and make it current WM_PAINT Draw with OpenGL WM_DESTROY Make the RC not current and delete Release the DC handle(ReleaseDC ) 消息循環(huán) OpenGL 可以使用 16 色、 256 色、 64K 和 16M 真彩色。真彩模式下不需要調(diào)色板,而在 16 色模式下根本不可能得到較為滿意的效果,因此對(duì) OpenGL 而言,調(diào)色板只有在 256 色模式下才有意義。 Windows 把調(diào)色板分為系統(tǒng)調(diào)色板和邏輯調(diào)色板。每個(gè)應(yīng)用程序都擁有一套自己的邏輯調(diào)色板(或 使用缺省調(diào)色板),當(dāng)該應(yīng)用程序擁有鍵盤輸入焦點(diǎn)時(shí)可以最多使用從 16M 種色彩中選取的 256 種顏色( 20 種系統(tǒng)保留顏色和 236 種自由選取的顏色),而失去焦點(diǎn)的應(yīng)用程序可能會(huì)有某些顏色顯示不正常。系統(tǒng)調(diào)色板由 Windows 內(nèi)核來管理,它是由系統(tǒng)保留的 20 種顏色和經(jīng)仲裁后各個(gè)應(yīng)用程序設(shè)置的顏色組成,并與硬件的 256 個(gè)調(diào)色板相對(duì)應(yīng)。應(yīng)用程序的邏輯調(diào)色板與硬件的調(diào)色板沒有直接的對(duì)應(yīng)關(guān)系,而是按照最小誤差的原則映射到系統(tǒng)調(diào)色板中,因此即使應(yīng)用程序自由選取 256 種不同顏色構(gòu)成自己的邏輯調(diào)色板,也有可能某些顏色顯示到屏幕上時(shí) 是一樣的。 當(dāng)應(yīng)用程序的窗口接收到鍵盤輸入焦點(diǎn)時(shí), Windows 會(huì)向它發(fā)送一條WMQUERYNEWPALETTE 消息,讓它設(shè)置自己的邏輯調(diào)色板,此時(shí) Windows會(huì)在系統(tǒng)調(diào)色板中盡量多地加入該應(yīng)用程序需要的顏色,并生成相應(yīng)的映射關(guān)系。接著 Windows 會(huì)向系統(tǒng)中所有的覆蓋型窗口和頂級(jí)窗口(包括擁有鍵盤輸入焦點(diǎn)的窗口)發(fā)送一條 WMPALETTECHANGED 消息,讓它們?cè)O(shè)置邏輯調(diào)色板和重繪客戶區(qū),以便能更充分地利用系統(tǒng)調(diào)色板,已擁有鍵盤輸入焦點(diǎn)的窗口不應(yīng)再處理這條消息,以避免出現(xiàn)死循環(huán)。 (2) OpenGL的顏色表示與轉(zhuǎn)換 OpenGL 內(nèi)部用浮點(diǎn)數(shù)來表示和處理顏色,紅綠藍(lán)和 Alpha 值這四種成份每種的最大值為 ,最小值為 。在 256 色模式下, OpenGL 把一個(gè)象素顏色的內(nèi)部值按線性關(guān)系轉(zhuǎn)換為 8 比特( Bit)來輸出到屏幕上,其中紅色占最低位的 3比特,綠色占中間的 3 比特,藍(lán)色占最高位的 2 比特, Windows 將這個(gè) 8 比特值看作邏輯調(diào)色板的索引值。例如 OpenGL 的顏色值( 、 、 )經(jīng)過轉(zhuǎn)換后二進(jìn)制值為 10001111(紅色為 11綠色為 00藍(lán)色為 10),即第 143 號(hào)調(diào)色板, 該調(diào)色板指定的顏色的 RGB 值應(yīng)與( 、 、 )有相同的比率,為( 25 3 170),如果不是該值,那么顯示出來的顏色就會(huì)有誤差。 (3) 調(diào)色板的生成算法 很明顯, OpenGL 輸出的 8 比特值中直接表明了顏色的組成,為了使圖形顯示正常,我們應(yīng)以線性關(guān)系來設(shè)置邏輯調(diào)色板,使其索引值直接表明顏色的組成。因此生成調(diào)色板時(shí),把索引值從低位到高位分成 33- 2 共三個(gè)部分,將每一部分映射到 0 — 255 中去,這樣 3 比特映射為{ 0、 3 7 10 14 18 21255}, 2 比特映射為{ 0、 8 170、 255},最后把三部分組合起來成為一種顏色。 經(jīng)過上面的處理后, 256 種顏色均勻分布在顏色空間中,并沒有完全包含系統(tǒng)保留的 20 種顏色(只包含了 7 種),這意味著將會(huì)有數(shù)種顏色顯示成一樣,從而影響效果。一個(gè)較好的解決辦法是按照最小均方誤差的原則把 13 種系統(tǒng)顏色納入到邏輯調(diào)色板中。 從原理上來說,并非一定要使用線性映射,還可以用其它一些映射關(guān)系,如加入 Gamma 校正以便更能符合人眼的視覺特性,不過這些映射關(guān)系應(yīng)用得并不廣泛,在此不再討論。 像素格式設(shè)置 像素格式是 OpenGL 窗口的重要 屬性,它包括是否使用雙緩沖,顏色位數(shù)和類型以及深度位數(shù)等。像素格式可由 Windows 系統(tǒng)定義的所謂像素格式描述子結(jié)構(gòu)來定義( PIXELFORMATDESCRIPTOR),該結(jié)構(gòu)定義在 中。在該結(jié)構(gòu)中包含有 26 個(gè)屬性信息,其形式為: typedef struct tagPIXELFORMATDESCRIPTOR { WORD nSize。 WORD nVersion。 DWORD dwFlags。 BYTE iPixelType。 BYTE cColorBits。 BYTE cRedBits。 BYTE cRedShift。 BYTE cGreenBits。 BYTE cGreenShift。 BYTE cBlueBits。 BYTE cBlueShift。 BYTE cAlphaBits。 BYTE cAlphaShift。 BYTE cAccumBits。 BYTE cAccumRedBits。 BYTE cAccumGreenBits。 BYTE cAccumBlueBits。 BYTE cAccumAlphaBits。 BYTE cDepthBits。 BYTE cStencilBits。 BYTE cAuxBuffers。 BYTE iLayerType。 BYTE bReserved。 DWORD dwLayerMask。 DWORD dwVisibleMask。 DWORD dwDamageMask。 } PIXELFORMATDESCRIPTOR。 各變量的含義如下: nSize:該結(jié)構(gòu)所占內(nèi)存空間。 nVersion:版本號(hào),當(dāng)前為 1。 dwFlags:指定像素格式屬性,可選參量如表 。 表 像素格式屬性 標(biāo)識(shí)符 解釋 PFD_DRAW_TO_BITMAP 支持內(nèi)存中繪制位圖 PFD_DRAW_TO_WINDOW 支持屏幕繪圖 PFD_DOUBLEBUFFER 支持雙緩沖 PFD_CENERIC_FORMAT 指定選擇 GDI 支持的像素格式 PFD_NEED_PALETTE 指定需要邏輯調(diào)色板 PFD_NEED_SYSTEM_PALETTE 指定需要硬件調(diào)色板 PFD_STEREO NT 不支持 PFD_SUPPORT_OPENGL 支持 OpenGL PFD_SUPPORT_GDI 支持 GDI,此時(shí)不可使用 PFD_DOUBLEBUFFER iPixelType:像素顏色模式,可選項(xiàng)為 PFD_TYPE_RGBA 或 PFD_TYPE_INDEX,分別對(duì)應(yīng)于 RGBA 模式和顏色索引模式。 cColorBits:指定顏色的位數(shù)。 cRedBits:采用 RGBA 模式時(shí),紅色組分占用位數(shù)。 cRedShift:采用 RGBA 模式時(shí),紅色組分偏移量。 cGreenBits:采用 RGBA 模式時(shí),綠色組分占用位數(shù)。 cGreenShift:采用 RGBA 模式時(shí),綠色組分偏移量。 cBlueBits:采用 RGBA 模式時(shí),藍(lán)色組分占用位數(shù)。 cBlueShift: 采用 RGBA 模式時(shí),藍(lán)色組分偏移量。 cAlphaBits:采用 RGBA 模式時(shí), Alpha 組分占用位數(shù)。 cAlphaShift:采用 RGBA 模式時(shí), Alpha 組分偏移量。 cAccumBits:指定累積緩沖區(qū)表示一個(gè)像素所用位數(shù)。 cAccumRedBits:指定累積緩沖區(qū)表示紅色組分占用位數(shù)。 cAccumGreenBits:指定累積緩沖區(qū)表示綠色組分占用位數(shù)。 cAccumBlueBits:指定累積緩沖區(qū)表示藍(lán)色組分占用位數(shù)。 cAccumAlphaBits:指定累積緩沖區(qū)表示 Alpha 組分占用位數(shù)。 cDepthBits:指定深度緩沖區(qū)表示一個(gè)像素所用位數(shù)。 cStencilBits:指定模板緩沖區(qū)表示一個(gè)像素所用位數(shù)。 cAuxBuffers:指定輔助緩沖區(qū), Windows9x、 NT 不支持。 iLayerType: Windows9x、 NT 下只能是 PFD_MAIN_PLANE。 bReserved:= 0。 dwLayerMask:指定覆蓋層的屏蔽, Windows9x、 NT 不支持。 dwVisibleMask: Windows9x、 NT 不支持。 dwDamageMask: Windows9x、 NT不支持。 Windows 提供了四個(gè)像素格式管理函數(shù),分別介紹如下: (1) int ChoosePixelFormat(HDC hdc,PIXELFORMATDESCRIPTOR *ppdf) 該函數(shù)比較傳過來的像素格式描述和 OpenGL 支持的像素格式,返回一個(gè)最佳匹配的像素格式索引。該索引值可傳給 SetPixelFormat 為 DC 設(shè)置像素格式。返回值為 0表示失敗。在比較像素格式時(shí),匹配優(yōu)先級(jí)順序 為像素格式描述子結(jié)構(gòu)中的下述各域: dwFlags- cColorBits- cAlphaBits- cAccumBits - cDepthBits- cStencilBits- cAuxBuffers- iLayerType 硬件支持的像素格式優(yōu)先。 (2) int DescribePixelFormat(HDC hdc, int iPixelFormat, UINT nBytes, LPPIXELFORMATDESCRIPTOR *ppfd) 該函數(shù)用格式索引 iPixelFormat 說明的像素格式來填寫由 ppfd 所指向的像素格式描述子結(jié)構(gòu),利用該函數(shù)可以枚舉像素格式。 (3) int GetPixelFormat(HDC hdc)該函數(shù)用于獲取 hdc 的格式索引。 (4) BOOL SetPixelFormat(HDC hdc, int iPixelFormat, LPPIXELFORMATDESCRIPTOR *ppfd)該函數(shù)用格式索引 iPixelFormat 來設(shè)置hdc 的像素格式。在使用該函數(shù)之前應(yīng)該調(diào)用 ChoosePixelFormat 來獲取像素格式索引。另外, OpenGL 窗口 風(fēng)格必須包含 WS_CLIPCHILDREN 和 WS_CLIPSIBLINGS類型,否則設(shè)置失敗。 應(yīng)該注意的是 ChoosePixelFormat 函數(shù)并不一定返回一個(gè)最佳的像素格式值,可以利用 Descr
點(diǎn)擊復(fù)制文檔內(nèi)容
高考資料相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1