程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 在CB中進行DirectX編程(3)

在CB中進行DirectX編程(3)

編輯:vc教程

2.3 裝入並顯示圖形文件

為了簡明地說明采用DirectDraw圖形文件的顯示技術,我們以示例程序dx2介紹圖面、圖形文件裝入、圖形縮放、圖形在圖面上顯示等的初步概念和實現技術。

2.3.1 DirectDraw顯示圖形的技術

為了顯示圖象,DirectDraw必需首先擁有類似畫布(canvas)的繪圖空間,DirectDraw並不向在DOS下那樣簡單地將顯示緩存作為繪畫的對象,而是通過DirectDraw對象創建各種不同種類的“圖面”(Suerface),圖面上的內容可以被應用程序自由地拷貝、組合,生成千變萬化的圖形。

2.3.1.1圖面分以下幾種類型:

(1)主圖面(Primary圖面):即在屏幕上顯示出來的圖面,就是GDI用於繪制Windows用戶界面的圖面。每個DirectDraw對象只能有一個主圖面,主圖面的尺寸、位置和格式由系統當前的顯示模式決定,不能改動。

(2)後台圖面(Off-screen圖面):此類圖面不能被直接看到。一般來說,後台圖面往往用於作為游戲精靈動畫、背景圖形等部件的存儲緩沖區。後台圖面的尺寸是可以調整的,且可以有多個後台圖面,其大小根據實際情況調整,不要太大或太小。一種典型的例子是:有一個精靈的動畫由4張128點陣圖形組成,那麼可以將後台圖面定義為256點的方陣,將這個動畫序列存儲下來讀者可能認為可以創建一個比主圖面大的後台圖面以便保存游戲背景,這樣可以方便地實現滾屏,但是,DirectDraw限制後台圖面的尺寸不能比主圖面大,除非系統的顯示卡支持。能否實現大的後台圖面我們將在以後敘述。

(3)復合圖面(Complex圖面)和翻轉鏈(Flipping Chain):這種圖面主要用於生成平滑動畫。有關技術待制作動畫時介紹。

(4)覆蓋圖面(Overlay圖面):這是一種由硬件支持的圖面,DirectDraw不能仿真。有關技術在後面介紹。

DirectDraw可以把圖面創建在顯示內存或系統內存中,而顯示內存又分為常規顯示內存和AGP加速圖形接口內存。由於顯示內存容量是有限的,所以每個圖面具體應該創建在哪部分存儲區域中應該統籌規劃,一般將使用頻繁,需要硬件加速或實現功能的圖面安排在顯示內存。如果您不指定圖面創建的位置,DirectDraw將首先在常規顯示內存創建圖面,當常規顯示內存不夠時,若系統支持AGP內存,則先使用AGP內存,最終使用系統內存。

2.3.1.2 圖形文件的裝入

圖形文件裝入到圖面並不象想象的那麼簡單,因為裝入的圖形的點陣可能與、圖面的點陣不同,這就存在圖形的縮放。另外,圖形數據在內存中的移動、復制,也是需要處理的內容。對於Windows的設備無關位圖,我們可以考慮使用Windows的功能實現:

(1)采用LoadImage函數裝入圖形文件

(2)采用圖面的GetDC方法獲得圖面與GDI兼容的設備上下文

(3)采用BitBlt函數將圖形數據拷貝到圖面中

有關GDI編程請參看有關Windows編程資料,這裡讀者只需要知道固定的用法就可以了。

2.3.1.3 圖面的丟失

在DirectDraw應用程序被最小化、屏幕顯示方式改變或用戶按Alt+Tab鍵切換當前應用程序時,圖面將會丟失,因此在重新回到DirectDraw應用程序中時,必需用Restore方法恢復圖面。遺憾的是,雖然圖面被恢復了,但其中圖形數據卻丟失了,需要重新繪制。

2.3.2 dx2運行過程

啟動dx2程序後,只有第一個“執行”按鈕可以使用,按下該按鈕後,系統將創建DirectDraw對象,並設置為800*600全屏幕顯示方式;按順序按下“創建主圖面”、“創建

圖2.2 dx2 裝入並顯示圖形文件程序運行界面

後台圖面”按鈕,分別創建對應屏幕顯示的主圖面和100*100點陣的後台圖面;按下“後台圖面裝入圖形”按鈕,則圖形文件view.bmp被一100*100點陣裝入到後台圖面,屏幕上看不見圖形;再按下“主圖面裝入圖形”按鈕,view.bmp以200*100點陣縮放後裝入到主圖面(屏幕)的(0,0)位置,此時圖形顯示在屏幕左上角;繼續按“拷貝後台圖面到主圖面”,將把後台圖面的100*100圖形顯示在屏幕的(200,0)位置,我們可以看到兩副同樣的圖形以不同的縮放比例並排顯示在屏幕左上方;按下“圖面丟失”後,屏幕被設置成640*480的顯示方式,屏幕上顯示出的圖形消失了;用“恢復丟失的圖面”按鈕重新設置顯示方式為800*600(必需恢復顯示方式,否則圖面恢復將會失敗)並恢復圖面,此時,失去的圖形在屏幕上仍然看不見;最後,按“重新顯示圖形”來重新繪制view.bmp,屏幕重新展現原有的圖形。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved