Chương IV Giới thiệu về OPenGL
4.3.2. Cấu trúc PIXELFORMATDESCRIPTER
Mỗi một thiết bị thể hiện của OpenGL hỗ trợ một số hữu hạn các định dạng điểm ảnh. Tất nhiên tính sẵn có của định dạng điểm ảnh phụ thuộc và khả năng của thiết bị thể hiện. Các thuộc tính của một định dạng điểm ảnh cụ thể được biểu diễn thông qua cấu trúc PIXELFORMATDESCRIPTER. Cấu trúc này lưu trữ 26 trường thông tin.
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;
Bảng 4.2. Các thành phần của cấu trúc PIXELFORMATDESCRIPTOR
Thành phần Mô tả
Nsize Kích thước tính bằng byte của cấu trúc. Có thể thiết lập bằng sizeof (PIXELFORMATDESCRIPTOR). Nversion Số phiên bản (version( của cấu trúc, hiện bằng 1. DwFlags Các cờ đặc tính cho định dạng điểm ảnh (bảng 4.3) IpixelType
Mô tả dữ liệu màu của điểm vẽ:
- PFD_TYPE_RGBA đối với chế độ màu RGBA - PFD_TYPE_INDEX đối với chế độ màu chỉ mục
cColorBits
Số bít thể hiện một màu. Nó quyết định số màu thể hiện. chế độ màu RGBA, thì không tính đến alpha bitplance. Đối với chế độ màu chỉ mục, cColorBits xác định kích thước độ đệm màu.
cRedBits Sè bit đỏ trong bộ đệm màu RGBA
cRedShift Tổng độ dời các bitplane đỏ trong bộ đệm màu RGBA
cGreenBits Sè bit xanh lá trong bộ đệm màu RGBA
cGreenShift Tổng độ dời các bitplane xanh lá trong bộ đệm màu RGBA
cBlueBits Sè bit xanh dương trong bộ đệm màu RGBA
cBlueShift Tổng độ dời các bitplane xanh dương trong bộ đệm màu RGBA
cAlphaBits Sè bitplane trong bộ đệm màu RGBA. Không dùng trên microsoft Windows
cAlphaShift Tổng độ dời các bitplane alpha trong độ đệm màu RGBA. không dùng trên microsoft Windows
cAccumBits Sè bitplane trong độ đệm tích lũy
cAccumRedBits Sè bit đỏ trên một pixel trong độ đệm tích lũy cAccumGreenBits Sè bit xanh lá trên một pixel trong độ đệm tích lũy cAccumBlueBits Sè bit xanh dương trên một pixel trong độ đệm tích
lũy
cAccumAlphaBits Sè bit alpha trên một pixel trong độ đệm tích lũy cDepthBits Sè bitplane trong độ đệm chiều sâu
cStencilBits Sè bitplane trong độ đệm stencil
Windows
iLayerType
Xác định kiểu lớp trên Microsoft Windows là
PFD_MAIN_PLANE. Ngoài ra các kiểu lớp khác là
FPD_OVERLAY_PLANE và PFD_UNDERLAY_PLANE bServered Dùng dự trữ, thường bằng 0
dwLayerMask Hai trường hợp này đi đôi với nhau để xác định một lớp che một lớp
dwVisibleMask
dwDamageMask
Dùng khi nhiều hơn một định dạng điểm vẽ sử dụng chung bộ đệm khung. Nếu bitwise AND của các thành viên dwDamageMask của hai khung định dạng điểm vẽ khác 0, thì chúng sử dụng chung một độ đệm khung.
Bảng 4.3. Các cờ đặc tính cho định dạng điểm ảnh
Cờ Mô tả
PFD_DRAW_TO_BITMAP Bộ đệm được dùng vẽ vào bitmap bộ nhớ
PFD_DRAW_TO_WINDOW
Bộ đệm được dùng vẽ vào cửa sổ trên màn hình hay thiết bị khác như máy in
PFD_DOUBLEBUFFER
Thiết lập khi dùng bộ đệm đôi. Không dùng cùng với cờ PFD_SUPPORT_GDI
PFD_GENERIC_FORMAT
Thiết lập khi chọn định dạng điểm vẽ tổng quát, là định dạng điểm ảnh được hỗ trợ bởi phần cứng hay trình điều khiển thiết bị PFD_NEED_PALETTE Thiết bị khi dùng bảng màu logic
PFD_NEED_SYSTEM_PALETTE
Thiết lập khi hệ thống sử dụng phần cứng Open GL chỉ được hỗ trợ bởi một bảng màu phần cứng duy nhất. (Bảng màu phần cứng mapping một _ một với bảng màu logic).
PFD_STEREO
Thiết lập khi chọn bộ đệm lập thể. Không dùng trên Microsoft Windows PFD_SUPPORT_GDI Bộ đệm hỗ trợ các hàm đồ họa GDI Không dùng cùng với cờ PFD_DOUBLEBUFFER PFD_ SUPPORT_OPENGL Bộ đệm hỗ trợ các hàm đồ họa Open GL
PFE_DOUBLE_BUFFER_DONTCAR E
Định dạng có thể dùng bộ đệm đơn hay đôi, không ưu tiên cho riêng loại nào
PFD_STEREO_DONTCARE Cảnh lập thể hoặc không lập thể, không ưu tiên cho riêng loại nào Khi thiết lập định dạng điểm ảnh của ngữ cảnh dụng cụ thì cấu trúc
PIXELFORMATDESCRIPTOR được điền đầy và địa chỉ của nó được dùng làm
đối số cho hàm SetPixelFormat().
Với kỹ thuật quản lý ngữ cảnh tô vẽ thứ hai nh đã giới thiệu ở trên ta cần qua 5 bước cơ bản để khởi tạo môi trường đồ hoạ cho OpenGL:
Bước 1: Sử dụng AppWizard tạo một ứng dụng ban đầu
Bước 2: Sử dụng ClassWizard tạo các hàm
nCreate(),OnDestroy(),PreCreateWindow(),OnSize(),OnEraseBackGround() tương ứng với các thông điệp WM_CREATE,WM_DESTROY,WM_SISE, WM_ERASEBKGND, PreCreateWindow.
Bước 3 : Thay đổi lần lượt các hàm nh sau: Hàm OnCreate()
int CAnimateView::OnCreate(LPCREATESTRUCT lpCreateStruct) {
if (CView::OnCreate(lpCreateStruct) == -1) return -1;
PIXELFORMATDESCRIPTOR pfd = {
sizeof(PIXELFORMATDESCRIPTOR), // Structure size. 1, // Structure version number.
PFD_DRAW_TO_WINDOW | // Property flags. PFD_SUPPORT_OPENGL |