Bài tìm hiểu về DIRECT

35 1.5K 0
Bài tìm hiểu về DIRECT

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

OpenGL, Direct3D hay rộng hơn là DirectX là một trong những giao diện lập trình ứng dụng (API) về đa phương tiện thông dụng nhất hiện nay. Trong suốt quãng thời gian phát triển của mình, song song với sự phát triển của hệ thống máy tính hiện đại: giá thành ngày càng giảm, sức mạnh được tăng vọt – lấy ví dụ như 20 năm về trước, bộ nhớ máy tính (RAM) cá nhân chỉ khoảng 32MB đã là rất “vĩ đại”; thế nhưng so với hiện nay, bộ nhớ trung bình của một máy tính thường dao động từ 4 8GB (gấp hàng trăm lần); hay sự phát triển của các thế hệ hệ điều hành: MSDOS, Windows 3.1, Windows 95 … cho đến Windows 10 mới nhất. Song song đó, các thư viện đồ họa cũng phát triển như vũ bão, tại mỗi thời điểm khác nhau, ưu thế của mỗi thư viện có thể khác nhau. Nhưng tựu chung lại cũng nhằm mục đích tận dụng tối đa sức mạnh công nghệ tại thời điểm đó. Trải qua bao thăng trầm, đồ họa máy tính hiện đại đã khác rất rất xa so với thời điểm mới ra đời. Nói một cách đơn giản DirectX là một phần mềm được thiết kế bởi Microsoft để có thể giao tiếp với các linh kiện phần cứng trên PC. Nói một cách chi tiết, nó là tập hợp những giao diện lập trình ứng dụng, hay còn được gọi tắt là API, được thiết kế để xử lý các công việc liên quan đến render các vector đồ họa 2D hay 3D, render các đoạn video và chơi các đoạn âm thanh trên nền tảng Windows. Đây chính là đối thủ nặng kí nhất với OpenGL, một bộ API tập trung về đồ họa khác được giới thiệu vào năm 1992, đây cũng là một mã nguồn mở và vẫn đang được tiếp tục phát triển bởi tập đoàn công nghệ Khronos Group. Và trong khi OpenGL là một API đa nền tảng, nhưng nó lại không có lợi thế của việc chỉ dành riêng cho nền tảng Windows.

Bài tìm hiểu DIRECT-X Mục Lục Tìm hiểu DirectX : Giới thiệu OpenGL, Direct3D hay rộng DirectX giao diện lập trình ứng dụng (API) đa phương tiện thông dụng Trong suốt quãng thời gian phát triển mình, song song với phát triển hệ thống máy tính đại: giá thành ngày giảm, sức mạnh tăng vọt – lấy ví dụ 20 năm trước, nhớ máy tính (RAM) cá nhân khoảng 32MB “vĩ đại”; so với nay, nhớ trung bình máy tính thường dao động từ - 8GB (gấp hàng trăm lần); hay phát triển hệ hệ điều hành: MS-DOS, Windows 3.1, Windows 95 … Windows 10 Song song đó, thư viện đồ họa phát triển vũ bão, thời điểm khác nhau, ưu thư viện khác Nhưng tựu chung lại nhằm mục đích tận dụng tối đa sức mạnh công nghệ thời điểm Trải qua bao thăng trầm, đồ họa máy tính đại khác rất xa so với thời điểm đời The Elder Scrolls: Arena (1994) GTA V (2015) Nói cách đơn giản DirectX phần mềm thiết kế Microsoft để giao tiếp với linh kiện phần cứng PC Nói cách chi tiết, tập hợp giao diện lập trình ứng dụng, hay gọi tắt API, thiết kế để xử lý công việc liên quan đến render vector đồ họa 2D hay 3D, render đoạn video chơi đoạn âm tảng Windows Đây đối thủ nặng kí với OpenGL, API tập trung đồ họa khác giới thiệu vào năm 1992, mã nguồn mở tiếp tục phát triển tập đoàn công nghệ Khronos Group Và OpenGL API đa tảng, lại lợi việc dành riêng cho tảng Windows DirectX xuất lần đầu Windows 95 Vào thời điểm đó, phần lớn game thủ PC dùng tảng DOS, thứ mà cho phép nhà phát triển nói chuyện trực tiếp với linh kiện PC card âm thanh, card đồ họa, bàn phím chuột Những người chơi game PC lâu năm chắn nhớ thời mà phải chỉnh file Config.sys hay Autoexec.bat để thiết lập môi trường cài đặt để số game định hoạt động tốt (IRQ DMA phải edit lại, lại chuyện khác) Windows 95 khả giao tiếp trực tiếp với linh kiện – Microsoft phát triển API DirectX Lúc đầu, DirectX không nhiều người quan tâm đến, nhà phát triển phụ thuộc vào OpenGL khả lập trình tốt tảng DOS Nhưng API đồ họa Microsoft lấy niềm tin nhà phát triển họ phát không biến Vì vậy, DirectX đẩy OpenGL nơi khác vào thời điểm mà phiên (DX9) mắt vào năm 2002 Windows XP gần tăng tốc độ phát triển DirecX phiên Windows ổn định dùng rộng rãi toàn cầu Windows 10 đánh giá tiếng không kém, với phiên dòng DirectX, DirectX 12 Thư viện DirectX DirectX tài sản tập đoàn Microsoft Logo thư viện đơn giản tên gọi DirectX tên công ty Mirosoft DirectX tập hợp API (giao diện lập trình ứng dụng) để xử lý tác vụ liên quan đến đa phương tiện, đặc biệt lập trình game video, tảng Microsoft Thuở ban đầu, tên gọi tất API bắt đầu tiền tố Direct, ví dụ Direct3D, DirectDraw, DirectMusic, DirectPlay, DirectSound … Tên gọi DirectX rút gọn X (X đứng trước tên API tương ứng) Khi Microsoft tiến hành phát triển hệ máy chơi game mới, kí tự X dùng từ Xbox – tên hệ máy chơi game – để ám việc hệ máy chơi game xây dựng công nghệ DirectX Kí tự X sau dùng để đặt tên cho API thiết kế dành riêng cho Xbox XInput, XACT (Audio Creation Tool) … tiền tố Direct Microsoft sử dụng để đặt tên cho API dành cho Windows Direct2D, DirectWrite … Direct3D (các API đồ họa 3D thư viện DirectX) sử dụng rộng rãi việc phát triển game cho Windows, Sega Dreamcast, Microsoft Xbox, Microsoft Xbox 360 Microsoft Xbox One Direct3D dử dụng cho ứng dụng thiết kế đồ họa, xử lý ảnh Và Direct3D thành phần tiêu biểu cho thư viện DirectX, nhắc tới DirectX nhắc tới Direct3D, tên gọi DirectX Direct3D bị đánh đồng với Thư viện DirectX tải theo cách: • DirectX Runtime Library: bao gồm tập hợp file DLL cần thiết dành cho ứng dụng sử dụng thư viện DirectX vận hành Bộ thư viện thích hợp cho người dùng cuối Ví dụ DirectX 9.0c Runtime Library • DirectX SDK (Software Development Kit) phát hành dành cho nhà phát triển / lập trình viên muốn sử dụng sức mạnh thư viện DirectX DirectX SDK bao gồm DirectX Runtime Library thư viện, file header cần thiết, tài liệu ví dụ minh họa cho tính năng.Kể từ Windows 8, DirectX SDK tích hợp Windows SDK Riêng với Direct3D 9Ex, Direct3D 10 Direct3D 11 hoạt động máy tính cài Windows Vista trở sau phiên xây dựng kiến trúc Windows Display Driver Model (WDDM) – kiến trúc đồ họa giới thiệu Windows Vista Quá trình phát triển Cuối năm 1994, Microsoft chuẩn bị công bố hệ điều hành họ - Windows 95 Tại thời điểm đó, nhân viên Microsoft - Craig Eisler, Alex St John, Eric Engstrom - lo lắng việc lập trình viên có xu hướng đánh giá MS-DOS tảng tốt cho lập trình game, có tựa game phát triển cho Windows 95 Lý DOS cho phép lập trình viên can thiệp trực tiếp vào thành phần hệ thống như: video cards, bàm phím, chuột, thiết bị xuất âm … Trong đó, Windows 95 với kiến trúc chặt chẽ hơn, không cho phép điều xảy Trong chưa đầy tháng Windows 95 mắt, Microsoft cần chìa khóa để giải mâu thuẫn Eisler (development lead), St John, Engstrom (program manager) làm việc với nhau, đề xuất giải pháp mà họ đặt tên DirectX Phiên DirectX phát hành vào tháng năm 1995 với tên gọi Windows Games SDK – thay cho DCI WinG API Windows 3.1 Nhờ có DirectX (được tích hợp vào Windows 95 trở sau), ứng dụng tận dụng sức mạnh phần cứng để xử lý nhiều tác vụ đa phương tiện Eisler có đề cập tới “điên cuồng” việc xây dựng DirectX tới blog Craig Eisler Alex St John Eric Engstrom Việc chuyển dịch sang DirectX khởi đầu chậm chạp lo ngại thay WinG, hiệu DirectX – Windows thời điểm xây dựng DOS nhiều lập trình viên DOS DirectX 2.0 trở thành thành phần Windows phiên Windows 95 OSR2 Windows NT 4.0 vào năm 1996 Do Windows 95 mẻ lúc nên có tựa game phát hành cho Microsoft triển khai chiến dịch quảng bá mạnh mẽ cho DirectX nhằm đánh tan hoài nghi giới lập trình viên tảng Tại kiện Computer Game Developers Conference năm 1996, Microsoft lần giới thiệu Direct3D DirectPlay song song với việc minh họa chế độ chơi mạng game MechWarrior Thách thức đặt cho nhóm phát triển DirectX làm DirectX tương thích với nhiều phần cứng khác Những phần cứng kể đến loại card đồ họa, card âm thanh, motherboard, CPU, thiết bị nhập, xuất … Tất phiên DirectX phát hành phải kiểm tra (ở beta cuối cùng) cách kỹ để đảm bảo tương thích tốt với phần cứng / phần mềm Ngoài ra, nhóm phát triển gửi mẫu đến đối tác để chắn phiên phát hành tương thích với phần cứng Trước DirectX, OpenGL thành phần Windows NT OpenGL thời gian yêu cầu phần cứng cao tập trung vào giải pháp kỹ thuật, CAD Direct3D Microsoft định hướng thành phần gọn nhẹ OpenGL tập trung chủ yếu vào game Khi game 3D bắt đầu bùng nổ, OpenGL phát triển để hỗ trợ tốt cho việc lập trình game, lập trình viên lựa chọn OpenGL hay Direct3D cho ứng dụng họ Cũng từ đây, chiến không hồi kết OpenGL Direct3D bắt đầu Nhiều tranh luận đưa việc xây dựng ứng dụng hỗ trợ đa tảng với OpenGL hay hỗ trợ Windows với Direct3D Trên hệ máy chơi game – console – phát hành Microsoft, DirectX tùy biến lại hợp tác Nvidia – đối tác phần cứng cho hệ máy chơi game Xbox, Xbox360 – AMD – hệ máy XboxOne Năm 2002, Microsoft phát hành DirectX 9, hỗ trợ lập cho việc lập trình vertex pixel shader – Shader Model 2.0 Phiên Direct9.0c với Shader Model 3.0 phát hành không lâu sau đó, vào tháng năm 2004 Tháng năm 2005, DirectShow gỡ khỏi DirectX chuyển qua tích hợp vào Microsoft Platform SDK Bảng tổng hợp liệt kê toàn phiên DirectX, thời điểm mắt kiện liên quan Phiên Số phiên DirectX DirectX 4.02.0095 1.0 DirectX 2.0 DirectX 4.03.00.1096 2.0a 4.04.00.0068 DirectX 3.0 4.04.00.0069 DirectX 3.0a DirectX 3.0b DirectX 4.0 DirectX 5.0 DirectX 5.2 DirectX 6.0 DirectX 6.1 DirectX 6.1a DirectX 7.0 DirectX 7.0a DirectX 7.1 DirectX 8.0 DirectX 8.0a DirectX 8.1 4.04.00.0070 Hệ điều hành ghi 30 Tháng 9, 1995 Chỉ phát hành cho số ứng 1996 dụng hãng thứ ba Windows 95 OSR2 Windows NT Tháng 6, 1996 4.0 15 Tháng 9, 1996 Gói cập nhật DirectX 3.0, bao 1996 gồm Direct3D 4.04.00.0069 Windows NT 4.0 SP3 (và cao hơn) 4.05.01.1600 (RC00) 4.05.01.1998 (RC0) Bản cập nhật nhỏ sửa lỗi phiên Windows 95 tiếng Nhật Phiên chưa phát hành Phiên thử nghiệm dành cho Windows 2000 Windows 95 Windows 98 4.06.00.0318 (RC3) Windows CE cho máy Dreamcast 4.04.00.0070 n/a 4.05.00.0155 (RC55) 4.06.02.0436 (RC0) 4.06.03.0518 (RC0) 4.07.00.0700 (RC1) 4.07.00.0700 4.07.00.0716 (RC0) 4.07.00.0716 (RC1) 4.07.01.3000 (RC1) 4.08.01.0810 4.08.01.0881 (RC7) Tháng 12, 1996 Tháng 12, 1996 Tháng 8, 1997 Tháng 5, 1998 25 Tháng 6, 1998 Tháng 8, 1998 Tháng 2, 1999 Windows 98 SE Windows 2000 Windows ME 4.08.00.0400 (RC10) 4.08.00.0400 (RC14) Ngày phát hành Tháng 5, 1999 22 Tháng 9, 1999 17 Tháng 2, 2000 Tháng 3, 2000 2000 14 Tháng 9, 2000 12 Tháng 11, 2000 Phiên cuối hỗ trợ Tháng 2, 2001 Windows 95 software rendering Windows XP, Windows XP SP1, 25 Tháng 10, 2001 Windows Server 2003 Xbox Dành cho hệ điều hành cũ Tháng 11, 2001 DirectX 8.1a DirectX 8.1b DirectX 8.2 DirectX 9.0 DirectX 9.0a DirectX 9.0b DirectX 9.0c 4.08.01.0901 (RC?) 4.08.01.0901 (RC7) 4.08.02.0134 (RC0) (Windows 98, Windows ME Windows 2000) Phiên cập nhật cho Direct3D (D3d8.dll) Sửa lỗi DirectShow Windows 2000 (Quartz.dll) Tương tự DirectX 8.1b, nâng cấp DirectPlay lên 8.2 2002 25 Tháng 6, 2002 2002 4.09.00.0900 (RC4) 19 Tháng 12, 2002 4.09.00.0901 (RC6) 26 Tháng 3, 2003 4.09.00.0902 (RC2) 13 Tháng 8, 2003 4.09.00.0903 4.09.00.0904 (RC0) 4.09.00.0904 Windows XP SP2 Tháng 8, 2004 Xbox 360, Windows XP SP2, SP3, Windows Server 2003 SP1 Windows Server 2003 R2 Tháng 8, 2004 21 Tháng 4, 2008 Tháng 2, 2005 phát hành phiên 64-bit Phiên cuối cho Windows 98 SE / ME phát hành vào 13 tháng 12, 2006 DirectX 4.09.00.0904 (RC0 Phiên cuối cho Windows (cập nhật DX 9.0c) 2000 phát hành vào tháng định kỳ) 2, 2010 Phiên hỗ trợ thức cho Windows Vista phát hành vào tháng năm 2006, cho Windows vào tháng năm 2009 Phát hành tháng từ tháng 10 năm 2004 đến tháng năm 2007 Sau phát hành quý cuối vào tháng 6, 2010 DirectX 10 6.00.6000.16386 30 Tháng 11, 2006 DirectX 10.1 6.00.6001.18000 6.00.6002.18005 6.01.7600.16385 DirectX 11 6.00.6002.18107 6.01.7601.17514 DirectX 11.1 6.02.9200.16384 Windows Vista Windows Vista SP1, Windows Server 2008 Windows Vista SP2, Windows Server 2008 SP2 Windows 7, Windows Server 2008 R2 Windows SP1, Windows Server 2008 SP2 Windows SP1, Windows Server 2008 R2 SP1 Windows 8, Windows RT, Windows Server 2012 Tháng 2, 2008 28 Tháng 4, 2009 22 Tháng 10, 2009 27 Tháng 10, 2009 16 Tháng 2, 2011 Tháng 8, 2012 DirectX 6.03.9600.16384 11.2 DirectX 12 10.00.10240.16384 Windows 8.1, Windows RT, Windows Server 2012 R2 Windows 10, Xbox One 18 Tháng 10, 2013 29 Tháng 7, 2015 DirectX chưa phát hành Raymond Chen – trưởng phận thiết kế phần mềm Microsoft – giải thích sách "The Old New Thing" ông kiện Sau DirectX phát hành, Microsoft tiến hành phát triển phiên DirectX song song với Trong đó, DirectX dự định cập nhật số tính năng, DirectX dự định phiên lớn với nhiều cải tiến Tuy nhiên, lập trình viên tỏ không hào hứng với tính giới thiệu DirectX dẫn tới việc phiên bị "xếp xó" tài liệu liên quan tới việc phân biệt phiên bị Microsoft loại bỏ Logo Logo ban đầu có thiết kế mang hướng gần với ký hiệu cảnh báo vùng phóng xạ Alex St John, trưởng phát phát triển DirectX, xác nhận việc xây dựng logo dựa Manhattan Project (dự án chế tạo bom nguyên tử chiến tranh giới hai) - tên mã dự án DirectX Manhattan Project - có chủ đích, thể tham vọng vào DirectX anh em Xbox (cũng có logo tương tự) muốn thay đổi toàn cục diện ngành công nghiệp game Tuy nhiên, Microsoft công khai bác bỏ ý kiến này, thay vào tuyên bố logo đơn giản thiết kế mang tính nghệ thuật DirectX 1.0 - 8.2 DirectX 9.0 - 12 Những thành phần tạo nên DirectX Windows hỗ trợ Multimedia tốt nhờ vào DirectX DirectX “mẫu” phần mềm mà tập hợp đa dạng hàm giao tiếp lập trình ứng dụng (Application Programming Interface-API) riêng Windows, cung cấp công cụ chuẩn hoá tính hỗ trợ cho đồ hoạ, âm thanh, việc cài đặt ứng dụng, tương tác nhiều người tham gia trò chơi nối mạng DirectX chia thành ba lớp (tầng): Lớp tảng (Foundation Layer), lớp phương tiện (Media Layer) lớp thành phần (Components Layer) * Lớp tảng: Foundation phần cốt lõi DirectX, tập hợp API cấp thấp tạo nên sở cho hoạt động multimedia hiệu cao Windows Thông qua lớp tảng 10 D3DFORMAT AutoDepthStencilFormat; DWORD Flags; UINT FullScreen_RefreshRateInHz; UINT PresentationInterval; } D3DPRESENT_PARAMETERS; Bảng 2.1 mô tả chi tiết tham số ppReturnedDeviceInterface Có kiểu IDirect3Ddevice9** Đây biến chứa trỏ thiết bị tạo hàm tạo trình khởi tạo thành công Sau thiết bị hiển thị khởi tạo bạn gọi tiếp phương thức khác Direct3D để lấy vẽ đối tượng lên hình Xoá hình Sau thiết bị Direct3D tạo ra, bạn bắt đầu tô điểm lên 21 hình, bạn làm điều với ảnh hay thông qua số đa giác Tuy nhiên công việc bạn phải làm vòng lặp ứng dụng game xoá hình Việc xoá hình cho bạn khung hình hoàn toàn để thao tác vẽ đối tượng lên Tệp tin winmain.cpp cập nhật thêm hàm bạn tìm thấy thư mục chapter2\example2 CD-ROM Bạn xoá toàn hình cách gọi tới hàm Clear HRESULT Clear( DWORD Count, const D3DRECT *pRects, DWORD Flags, D3DCOLOR Color, float Z, DWORD Stencil ); Bạn phải truyền đầy đủ tham số cần thiết cho hàm Tham số thứ nhất, Count – số lượng vùng hình chữ nhật xoá Nếu tham số tham số thứ pRects phải giá trị NULL Trong trường hợp đó, toàn vùng nhiên hình xoá, tham số hay sử dụng Nếu giá trị Count lớn 0, pRects phải trỏ tới mảng đối tượng kiểu D3DRECT lưu giữ toạ độ vùng chữ nhật xoá Tham số cờ trạng thái Flags xác lập đệm xoá Có trường hợp: ƒ D3DCLEAR_STENCIL ƒ D3DCLEAR_TARGET ƒ D3DCLEAR_ZBUFFER Giá trị mà bạn sử dụng thời điểm D3DCLEAR_TARGET, dùng đề xác lập đối tượng xoá vùng liệu hiển thị thời Color – giá trị màu (có kiểu D3DCOLOR) xác lập sau xoá Có nhiều marcos trợ giúp bạn xác lập giá trị màu theo ý muốn tuỳ theo chuẩn màu sắc khác nhau, ví dụ D3DCOLOR_XRGB Tham số Z xác lập giá trị chiều sâu đệm Giá trị nằm khoảng từ 0.0f tới 1.0f Chúng ta nói sâu chương sau Tham số Stencil lưu giá trị số hiệu đệm mẫu tô Nếu bạn không sử dụng đệm bạn phải truyền giá trị cho hàm Thể phông cảnh Sau bạn xoá khung hình, lúc thể lên hình Direct3D sử dụng hàm Present để làm điều Hàm Present thực việc chuyển đổi trang đệm (có thể ví trình hiển thị hình ảnh việc lật vẽ (từ đệm) lên hình) Thực chất tất trình bạn thao tác vẽ thời điểm thực nhớ đệm Bộ nhớ đệm back buffer vùng nhớ để lưu giữ toàn kết vẽ trước kết xuất lên hình Page flipping (lật trang) tiến trình lấy thông tin từ nhớ đệm hiển thị lên hình Việc làm nhằm giảm tượng giật hình tốc độ hiển thị hình thường chậm nhiều so với tốc độ sử lý 22 nhớ card hình Hàm đảm bảo trình hiển thị mượt mà tất bạn thực nhớ đệm hiển thị lên hình (!) Cấu trúc hàm Present: HRESULT Present( CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride, CONST RGNDATA *pDirtyRegion ); Chú ý: Lật trang trình tráo đổi liệu từ nhớ đệm lên nhớ thực hình, để thực trình hiển thị bạn phải gọi tới hàm yêu cầu lật trang thực xong thao tác vẽ nhớ đệm Hàm Present yêu cầu tham số đầu vào: ƒ pSourceRect trỏ có kiểu RECT trỏ tới liệu vùng chữ nhật thể từ nhớ đệm backbuffer Giá trị phải gán NULL bạn muốn sử dụng toàn liệu vùng nhớ đệm backbuffer – trường hợp thường dùng ƒ pDesRect trỏ kiểu RECT khác chứa địa vùng chữ nhật đích ƒ hDestWindowOverride trỏ trỏ tới sổ đích dùng để hiển thị Giá trị phải xác lập NULL bạn sử dụng xác lập cửa sổ trước phần khai báo tham số hiển thị ƒ pDirtyRegion trỏ trỏ tới vùng mà đệm cần cập nhật liệu Một lần giá trị NULL bạn muốn cập nhật toàn liệu đệm Dọn dẹp nhớ (Cleaning Up) Công việc cuối bạn phải làm ứng dụng DirectX dọn dẹp vào giải phóng nhớ cho đối tượng bạn sử dụng Ví dụ như, thời điểm bắt đầu ứng dụng, bạo tạo đối tượng Direct3D thiết bị Direct3D Khi ứng dụng đóng lại, bạn cần thiết phải giải phóng đối tượng để trả lại tài nguyên đối tượng chiếm chỗ cho hệ thống thực công việc khác Các đối tượng COM, tảng DirectX, quản lý hệ thống thông qua biến đếm lưu giữ số lượng đối tượng mà ứng dụng tạo lại sau vừa loại bỏ Bằng việc sử dụng hàm Release, bạn vừa thực việc giải phóng đối tượng vừa tác động tới biến đếm (count) Khi mà biến đếm đạt giá trị 0, hệ thống giải phóng toàn bộ nhớ mà đối tượng sử dụng Lấy vị dụ, giải phóng thiết bị hiển thị Direct3D, bạn sử dụng lệnh sau: If ( pd3dDevice != NULL ) pd3dDevice->Release( ); Nếu điều kiện câu lệnh If thoả mãn (tức biến pd3dDevice có chứa liệu – gán cho địa thiết bị khởi tạo trước đó), thực trình giải phóng biến 23 Cập nhật mã nguồn chương trình Sau tìm hiểu qua vài lệnh thông tin DirectX, lúc bạn xem xét làm để xác lập chạy ứng dụng DirectX, lúc để thêm mã lệnh vào ứng dụng Những mã lệnh chèn thêm vào tệp tin winmain.cpp mà tạo phần trước Bước trước viết ứng dụng DirectX chèn tệp tin header Direct3D Bạn thực khai báo sau ứng dụng: #include Tiếp theo bạn cần khai báo biến toàn cục cần thiết trình lưu giữ trò đối tượng để toàn ứng dụng sử dụng Chú ý: Bạn nên kiểm tra xem chắn đối tượng DirectX có khác rỗng (NULL) không trước gọi hàm Release Nếu bạn gọi hàm đối tượng rỗng chắn xảy lỗi cho ứng dụng 25 LPDIRECT3D9 pD3D; //Đối tượng Direct3D LPDIRECT3DDEVICE9 pd3dDevice; //thiết bị hiển thị Direct3D Biến khai báo kiểu LPDIRECT3D9 trỏ sử dụng giao diện IDirect3D9, tương tự biến LPDIRECT3DDEVICE9 trỏ sử dụng giao diện IDirect3DDevice9 Tiếp theo, bạn cần phải gọi tới hàm initDirrect3D, bạn thực theo cách sử dụng Chú ý bạn phải đặt đoạn code gọi tới hàm sau gọi hàm initWindow hàm WinMain // hàm gọi sau trình khởi tạo cửa sổ ứng dụng kết thúc If ( !initDirect3D( ) ) return false; Thay đổi mã lệnh vòng lặp quản lý kiện Sau xác lập thông số khởi tạo, lúc thay vòng lặp quản lý kiện Windows mã lệnh khác hữu dụng cho ứng dụng game Trong vòng lặp quản lý kiện ban đầu sử dụng vòng lặp liên tục gọi tới hàm GetMessage để kiểm tra kiện gửi tới chờ ứng dụng sử lý; Nếu thông điệp gửi tới, hàm GetMassage phải đợi tới thông điệp sử lý xong tiếp tục Chính phần thay sử dụng hàm GetMassage sử dụng hàm PeekMessage, hàm có chức kiểm tra thông điệp nhiên trả điều khiển lập tức, cho phép ứng dụng game bạn gọi lại chinh vòng lặp Trong ví dụ này, chèn thêm mệnh đề else sau lời gọi PeekMessage để gọi tới hàm render game Hàm render thực trình vẽ đối tượng lên hình, hàm định nghĩa phần sau if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) ) { TranslateMessage ( &msg ); DispatchMessage ( &msg ); } else 24 { render( ); } Hàm khởi tạo Direct3D Trong hàm initDirect3D thực việc tạo đối tượng Direct3D thiết bị để sử dụng chúng /********************************************************************* * initDirect3D *********************************************************************/ bool initDirect3D(void) { pD3D = NULL; pd3dDevice = NULL; // Create the DirectX object if( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) { return false; } // Fill the presentation parameters structure D3DPRESENT_PARAMETERS d3dpp; ZeroMemory( &d3dpp, sizeof( d3dpp ) ); d3dpp.Windowed = TRUE; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; d3dpp.BackBufferCount = 1; d3dpp.BackBufferHeight = 480; d3dpp.BackBufferWidth = 640; d3dpp.hDeviceWindow = wndHandle; // Create a default DirectX device if( FAILED( pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_REF, wndHandle, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &pd3dDevice ) ) ) { return false; } return true; } Tại đoạn đầu hàm trên, tạo lời gọi tới hàm Direct3DCreate9 Nó thực lệnh tạo đối tượng Direct3D, từ bạn tạo thiết bị hiển thị Direct3D Tiếp đến trinh xác lập thông số hiển thị ứng dụng Chúng ta xác lập cửa số có kích thước 640 x 480 Tiếp theo hàm CreateDevice gọi với tham số thứ cuối biến cấu trúc với liệu vừa định nghĩa Cũng 25 muốn hàm CreateDevice sử dụng thiết bị hiển thị đồ hoạ hệ thống nên giá trị truyền vào D3DAPAPTER_DEFAULT Ngoài giá trị D3DDEVTYPE_REF nhằm để xác lập thiết bị sử dụng thiết bị chuẩn Direct3D Chúng ta xác lập tham số khác với giá trị D3DCREATE_SOFTWARE_VERTEXPROCESSING nhằm đảm bảo ví dụ chạy hầu hết tất phần cứng Khả truy cập chức Vertex phần cứng có vài card đồ hoạ Và tham số cuối &pd3dDevice biến lưu giữ kết tạo đối tượng thiết bị Direct3D mà hàm trả Hàm kết xuất hình ảnh (Render) Hàm render nơi bạn thực thao tác vẽ lên thiết bị Như giới thiệu trên, hàm gọi bên vòng lặp gọi sau khung hình hiển thị /********************************************************************* * render *********************************************************************/ void render(void) { // Kiểm tra xem chắn thiết bị Direct3D tạo hay chưa if( NULL == pd3dDevice ) return;// Xoá toàn bộ đệm hình trạng thái mầu xanh da trời pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB( 0,0,255 ), 1.0f, ); // Thể liệu đệm lên hình pd3dDevice->Present( NULL, NULL, NULL, NULL ); } Trên ví dụ đơn giản hàm render Trước hết phải kiểm tra chắn kết trả sau gọi hàm CreateDevice, có giá trị NULL tức có lỗi khởi tạo thiết bị Direct3D Tất nhiên trường hợp chẳng thể thao tác đối tượng thiết bị việc thoát khỏi hàm Tiếp đó, sử dụng hàm Clear giới thiệu Bởi muốn xoá toàn bộ đệm, nên bạn cần truyền tham số NULL cho tham số đầu hàm Xác lập D3DCLEAR_TARGET yêu cầu DirectX xoá toàn bộ nhớ đệm Thông số biến có kiểu D3DCOLOR Trong ví dụ sử dụng macro D3DCOLOR_XRGB để lựa chọn màu cần xoá màu xanh nước biển với giá trị màu tương ứng hệ RGB là: R=0, G=0, B=255 Ngoài bạn cần phải truyền giá trị thực 1.0 để xác lập độ sâu vùng đệm Độ sâu vùng đệm giúp Direct3D nhận biết khoảng nhìn người chơi cảnh vật xung quanh Bạn xác lập giá trị khoảng 0.0 tới 1.0 Giá trị cao đồng nghĩa với phạm vi nhìn người chơi xa Bộ đệm stencil (!) cho phép bạn đánh dấu vùng diện ảnh mà chúng không hiển thị Bởi không sử dụng nên tham số xác lập Công việc cuối cần phải thực hàm render thể đối tượng từ đệm lên hình Nó thực thông qua lời gọi tới hàm Present Bởi bạn muốn thể toàn vùng đệm lên hình, giá trị NULL truyền cho tất tham số yêu cầu hàm Đây xác lập bạn thường dùng Khai báo hàm cleanUp 26 Dĩ nhiên sau ứng dụng kết thúc, bạn muốn giải phóng hết tất đối tượng tạo Nó thực đoạn code mô tả void cleanUp (void) { // Giải phóng đối tượng thiết bị hiển thị DIrect3D if( pd3dDevice != NULL ) pd3dDevice->Release( ); if( pD3D != NULL ) pD3D->Release( ); } Trước giải phóng đối tượng nào, bạn cần phải kiểm tra xem đối tượng có khác NULL không Nếu đối tượng thực tạo ra, phương thức Release gọi để tiến hành giải phóng đối tượng khỏi nhớ Hàm đặt trước lời gọi xác lập giá trị trả hàm WinMain Chèn thư viện DirectX vào chương trinh Cuối bạn có tất đoạn code cần thiết tạo ứng dụng DirectX đâu tiên Tuy nhiên trước bạn biên dịch ứng dụng chạy nó, bạn cần phải thực vài xác lập: liên kết thư viện DirectX Trong ví dụ đơn giản này, bạn cần tạo liên kết tới tệp thư viện d3d9.lib Lựa chọn Properties option thực đơn Project Cửa sổ hội thoại Property Pages xuất Hộp thoại có hình dạng tương tự hình minh hoạ 2.6 Lựa chọn Linker hộp panel bên trái Đối tượng mở rộng cho 27 phép bạn xác lập tuỳ chọn Tiếp đến, bạn lựa chọn thông số đầu vào Input Hộp thoại thay đổi nội dung có dạng tương tự hình minh hoạ 2.7 Gõ vào d3d9.lib mục Additional Dependencies kích chọn OK để kết thúc Biên dịch chạy ứng dụng Không giống ví dụ ban đầu, cửa sổ ứng dụng có màu xanh nước biên Mặc dù ứng dụng không sâu vào thứ mà DirectX làm, cung cấp cho bạn kiến thức tảng để bắt đầu với công nghệ Xác lập ứng dụng chạy chế độ toàn hình Trong ví dụ mà thực trên, ứng dụng dạng cửa sổ có kích thước 640x480 hiển thị hình desktop Mặc dù kiểu giao diện phù hợp cho ứng dụng thông thường nhiên ứng dụng game, bạn cần phải tạo hiệu ứng ấn tượng người chơi không gian ảo phải thật Chính bạn không sử dụng chế độ chạy ứng dụng dạng toàn hình Để tạo ứng dụng dạng bạn cần phải thay đổi đoạn code nhỏ ứng dụng mà vừa tạo, thay đổi xác lập chủ yếu hàm CreateWindow Đây đoạn code gọi hàm CreateWindow mà dùng: wndHandle = CreateWindow(“DirectXExample”, “DirectXExample”, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, NULL, NULL, 28 hInstance, NULL); Bạn thấy tham số thứ ba, xác lập kiểu ứng dụng dạng cửa sổ với giá trị xác lập WS_OVERLAPPEDWINDOW Xác lập bao gồm kiểu ứng dụng có tiêu đề, có viền bao cửa sổ nút nhấn thu nhỏ (Minimize) đóng cửa sổ Trước tiến hành xác lập cửa sổ dạng thể toàn hình, kiểu dáng cửa sổ cần xác lập thông số sau: WS_EX_TOPMOST | WS_POPUP | WS_VISIBLE Phần xác lập đầu tiên, WS_EX_TOPMOST, có tác dụng đặt vị trí hiên thị cửa sổ trạng thái bên tất cửa sổ khác WS_POPUP có tác dụng xác lập cửa sổ viền (border), không tiêu đề nút Minimize Close Phần xác lập cuối cùng, WS_VISIBLE yêu cầu với windows để ứng dụng tự cập nhật lại hình ứng dụng Lời gọi tới hàm CreateWindow lúc có dạng sau: wndHandle = CreateWindow(“DirectXExample”, “DirectXExample”, WS_EX_TOPMOST | WS_POPUP | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, NULL, NULL, hInstance, NULL); Chú ý: Có nhiều tệp tin thư viện cần thiết cho chức khác DirectX Bạn cần liên kết tới thư viện chứa hàm cần thiết mà bạn muốn sử dụng Tiếp theo tiến hành thay đổi chút mã lệnh hàm initDirect3D Trong biến có kiểu cấu trúc D3DPRESENT_PARAMETERS truyền cho hàm CreateDevice, bạn cần thay đổi hai biến tham số: Windowed BackBufferFormat Hiện sử dụng khai báo: d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; d3dpp.Windowed = TRUE; Để xác lập ứng dụng dạng toàn hình DirectX, tham số Windowed BackBufferFormat cần phải xác lập lại sau: 29 d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8; d3dpp.Windowed = FALSE; Thay đổi mà bạn thấy thuộc tính d3dpp.Windowed đảo ngược giá trị Đơn giản FALSE bạn muốn CreateDevice biết ứng dụng bạn dạng chiếm toàn hình Xác lập thuộc tính khác d3dpp.BackBufferFormat có lẽ bạn cảm thấy khó nắm bắt Đối với ứng dụng kiểu cửa sổ mà tạo lúc đầu, bạn không cần thiết phải quan tâm tới giá trị bạn sử dụng xác lập mặc định hình desktop cách truyền tham số D3DFMT_UNKNOWN Khi bạn muốn xác lập ứng dụng dạng chiếm toàn hình, bạn cần thiết phải tự xác lập thông số D3DFORMAT mà bạn muốn sử dụng Tham số kiểu D3DFORMAT có giá trị thể chất lượng mầu sắc hiển thị hình Ví dụ, trường hợp chọn D3DFMT_X8R8G8B8 giá trị mặc định mà hầu hết thiết bị card đồ hoạ hỗ trợ D3DFMT_X8R8G8B8 thể bạn sử dụng 32-bit để định dạng cho điểm ảnh bao gồm bit cho xác lập sắc mầu đỏ, bít cho màu xanh cây, bit cho màu xanh nước biển Định dạng bao gồm bit lưu trữ liệu mở rộng Tất xác lập lại code bạn tìm thấy mã nguồn chương trình thư mục chapter2\example3 đĩa CD-ROM kèm sách Trong phần tiếp theo, tìm hiểu cách để kiểm tra xem hệ thống có khả hỗ trợ độ phân giải kiểu thể màu sắc Chế độ hiển thị hình kiểu định dạng Nếu ứng dụng game bạn chạy chế độ cửa sổ hình desktop việc kiểm tra xem hệ thống hỗ trợ chế độ phân giải không cần thiết Bạn cần truyền giá trị D3DFMT_UNKNOWN cho hàm, chương trình tự động xác lập giá trị mặc định mà hình desktop lựa chọn Video Modes and Formats Nếu game mà bạn viết chạy chế độ cửa sổ desktop, việc xác định chế độ đồ hoạ mà máy tính bạn hỗ trợ không quan trọng lắm, nhiên bạn muốn game bạn chạy chế độ toàn hình (fullscreen) , việc xác định chế độ hiển thị hỗ trợ cần thiết Tất máy tính hỗ trợ chế độ phân giải hình 640x480, chế độ 800x600 hay 1024x768 sao? Không phải tất thiết bị đồ hoạ hỗ trợ chế độ phân giải Và có liệu chúng có chất lượng màu bạn mong muốn? Đó lý bạn viết game chế độ toàn hình, tốt bạn nên kiểm tra phần cứng để hỗ trợ mà game bạn cần Để thực điều đó, Direct3D cung cấp cho bạn số hàm thông qua giao diện IDirect3D9 Hàm mà bạn cần giới thiệu phần trên: UINT IDirect3D9::GetAdapterCount(VOID); Thông thường, hàm trả giá trị kiểu integer không dấu (unsigned integer) số lượng thiết bị đồ hoạ hệ thống DirectX hỗ trợ lúc nhiều thiết bị đồ hoạ, cho phép game chạy nhiều hình Để việc đơn giản, nghĩ rằng, có thiết bị đồ hoạ 30 Gathering Video Adapter and Driver Information Viêc nắm thông tin chắn thiết bị đồ hoạ máy bạn hữu ích Ví dụ, bạn muốn biết độ phân giải mà thiết bị đồ hoạ hỗ trợ, thông tin hãng sản xuất Sử dụng hàm GetAdapterIdentifier, bạn thu thập nhiều thông tin Nó định nghĩa sau: HRESULT GetAdapterIdentifier( UINT Adapter DWORD Flags, D3DADAPTER_IDENTIFIER9 *pIdentifier ); ■ Tham số có kiểu integer không dấu để xác định thiết bị đồ hoạ mà bạn muốn lấy thông tin Bởi vì, chấp nhận có thiết bị đồ hoạ, nên giá trị đưa vào D3DADAPTER_DEFAULT, nghĩa thiết bị đồ hoạ chọn ■ Tham số thứ hai, cờ (flag), xác nhận WHQLLevel trình điều khiển ■ Tham số thứ ba trỏ tới vùng nhớ cấu trúc D3DADAPTER_IDENTIFIER9 Cấu trúc lưu thông tin thiết bị đồ hoạ hàm trả Cấu trúc D3DADAPTER_IDENTIFIER9 cung cấp thông tin sau: typedef struct _D3DADAPTER_IDENTIFIER9 { // tên trình điều khiển char Driver[MAX_DEVICE_IDENTIFIER_STRING]; // mô tả thiết bị char Description[MAX_DEVICE_IDENTIFIER_STRING]; // version thiết bị char DeviceName[32]; // version trình điều khiển cài đặt LARGE_INTEGER DriverVersion; // This value holds the bottom 32 bits of the driver version DWORD DriverVersionLowPart; // This value holds the upper 32 bits of the driver version DWORD DriverVersionHighPart; // số ID sản xuất DWORD VendorId; // the ID of the particular device DWORD DeviceId; // the second part of the device ID DWORD SubSysId; // the revision level of the device chipset DWORD Revision; // a unique identifier for the device GUID DeviceIdentifier; // the level of testing that this driver has gone through 31 DWORD WHQLLevel; } D3DADAPTER_IDENTIFIER9; Cấu trúc lưu giữ toàn đặc trưng có liên quan đến thiết bị trình điều khiển thiết bị cài đặt Đầy đủ cấu trúc xem tài liều DirectX Getting the Display Modes for an Adapter Bước lấy thông tin chi tiết chế độ hiển thị mà thiết bị đồ hoạ hỗ trợ Để làm điều đó, trước tiên bạn phải kiểm tra xem có chế độ hiển thị Việc thực qua hàm GetAdapterModeCount, định nghĩa sau: UINT GetAdapterModeCount( UINT Adapter, D3DFORMAT Format ); Tham số xác định thiết bị mà bạn muốn kiểm tra Theo nói trên, ta đưa vào giá trị D3DADAPTER_DEFAULT Tham số thứ hai xác định loại định dạng đồ hoạ (D3DFORMAT) mà bạn muốn kiểm tra Như ta dùng D3DFMT_X8R8G8B8, với bit cho màu đỏ, bit cho màu xanh cây, bit cho xanh nước biển bit chưa dùng đến Bạn đưa vào loại định dạng mà Direct3D định nghĩa sẵn, GetAdapterModeCount trả số chế độ hiển thị phù hợp với định dạng Bảng 2.2 đưa vài định dạng D3DFORMATs dùng DirectX: EnumAdapterModes Hàm cuối mà bạn cần dùng EnumAdapterModes Hàm lấy thông tin vào biến có cấu trúc D3DDISPLAYMODE ứng với chế độ Sau định nghĩa hàm: HRESULT EnumAdapterModes( UINT Adapter, D3DFORMAT Format, UINT Mode, 32 D3DDISPLAYMODE* pMode ); Như trên, tham số ta đưa vào D3DADAPTER_DEFAULT Tham số thứ hai định dạng D3DFORMAT mà bạn kiểm tra Tham số thứ ba, số thứ tự chế độ mà bạn muốn lấy thông tin Nhớ rằng, hàm GetAdapterModeCount trả số chế độ hiểnthị mà thiết bị có Và tham số thứ ba nằm khoảng từ đến số Tham số cuối trỏ đến biến có cấu trúc D3DDISPLAYMODE Cấu trúc lưu thông tin chế độ đồ hoạ, chiều rộng, chiều cao, độ quét định dạng A Code Example for Querying the Video Adapter Đoạn code lấy từ ví dụ 4, thư mục chapter2\example4 đĩa CD Đoạn code xác bước lệnh cần thiết để đưa hộp thoại chưa danh sách chế độ hiển thị cho riêng định dạng D3DFORMAT Tôi lấy hàm initDirect3D ví dụ chỉnh sửa lại để lấy thông tin thiết bị đồ hoạ: bool initDirect3D() { pD3D = NULL; // Create the DirectX object if( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) return false; }; Trước tiên bạn cần tạo đối tượng Direct3D Thông qua bạn sử dụng hàm cần thiết // Phần dùng để lấy thông tin chi tiết thiết bị đồ hoạ D3DADAPTER_IDENTIFIER9 ident; pD3D->GetAdapterIdentifier(D3DADAPTER_DEFAULT, 0, &ident); Ở ta định nghĩa cấu trúc IDENTIFIER9 đưa vào hàm GetAdapterIdentifier Dùng nó, lấy thông tin sau: addItemToList(“Adapter Details”); addItemToList(ident.Description); addItemToList(ident.DeviceName); addItemToList(ident.Driver); Ở hàm addItemToList dùng để bổ sung thông tin vào hộp thoại sau // lấy chế độ hiển thị mà thiết bị đồ hoạ có UINT numModes = pD3D->GetAdapterModeCount( D3DADAPTER_DEFAULT, D3DFMT_X8R8G8B8); 33 Tiếp theo, ta sử dụng GetAdapterModeCount để lấy số chế độ tương ứng với định dạng (D3DFMT_X8R8G8B8) Sau đó, ta dùng số để thực vòng lặp duyệt qua tất chế độ lấy thông tin cho chế độ for (UINT i=0; I < numModes; i++) { D3DDISPLAYMODE mode; // khai báo biến kiểu D3DDISPLAYMODE char modeString[255]; // mảng char // lấy thông số cho cấu trúc D3DDISPLAYMODE với định dạng D3DFMT_X8R8G8B8 pD3D->EnumAdapterModes(D3DADAPTER_DEFAULT, D3DFMT_X8R8G8B8, i, &mode); // In dòng trống addItemToList(“”); // đưa chiều rộng hình sprintf(modeString, “Width=%d”,mode.Width); addItemToList(modeString); // Đưa chiều cao hình sprintf(modeString, “Height=%d”,mode.Height); addItemToList(modeString); // Đưa độ quét sprintf(modeString, “Refresh Rate=%d”,mode.RefreshRate); addItemToList(modeString); } return true; } Đây đơn giản hàm trợ giúp việc xuất số liệu, với đầu vào chuỗi, lưu chuỗi vào vị trí cuối vecto Ở cuối hàm initDirect3D, vector chứa toàn thông tin thiết bị đồ hoạ // Biến adapterDetails vector chứa chuỗi (string), chuỗi chứa thông tin // chế độ đồ hoạ khác std::vector adapterDetails; void addItemToList(std::string item) { adapterDetails.push_back(item); } 34 Demo chương trình 35 [...]... File Version bạn sẽ đọc thấy dãy các con số tương ứng với phiên bản DirectX đang sử dụng: 4.07.01.3000 DirectX 7.1 4.8.0.400 DirectX 8.0 5.1.2600.1106 DirectX 8.1 4.09.00.900 DirectX 9.0 Mỗi phiên bản Windows có một phiên bản DirectX tương ứng Với Win98 là DirectX6.1; WinMe, Win2000 là DirectX7.1; WinXP là DirectX8.0 và 8.1 Hiện nay đã có DirectX 9.0 và 9.0b Tuy nhiên không phải Card tăng tốc đồ họa nào... DirectX có khác rỗng (NULL) không trước khi gọi hàm Release đối với nó Nếu bạn gọi hàm này trên một đối tượng rỗng thì chắc chắn sẽ xảy ra lỗi cho ứng dụng 25 LPDIRECT3D9 pD3D; //Đối tượng Direct3 D LPDIRECT3DDEVICE9 pd3dDevice; //thiết bị hiển thị Direct3 D Biến được khai báo kiểu LPDIRECT3D9 là một con trỏ sử dụng giao diện IDirect3D9, tương tự biến LPDIRECT3DDEVICE9 là con trỏ sử dụng giao diện IDirect3DDevice9... thích DirectX + Các loại NVIDIA thuộc thế hệ Riva, TNT, TNT2, Quadro trở về trước tuơng thích tốt với DirectX 8.0 + Các loại Soltek Geforce Ti trở lên thì dùng rất tốt với DirectX 9.0 Vì vậy, khi cài đặt nâng cấp DirectX bạn phải cẩn thận Ví dụ tôi dùng Card AGP hiệu NVDIA RIVA TNT2 Model 64 Xài phiên bản DirectX 8.0 và 8.1 thì nhận đúng 32MB Nhưng với Direct 6.1 nó chỉ nhận được 1MB Còn với Direct. .. diện lập trình Direct3 D và tiếp đến là thực thi nó: - Tạo một đối tượng Direct3 D - Tạo một môi trường Direct3 D (thiết bị - device) để thể hiện đối tượng - Vẽ các đối tượng lên môi trường đó Đối tượng Direct3 D Đối tượng Direct3 D là một đối tượng cung cấp một giao diện được sử dụng bởi các hàm để 18 tập hợp và nhận biết khả năng tương thích của môi trường Direct3 D Có thể ví dụ, một đối tượng Direct3 D đem... năng tìm và xác nhận xem hệ thống có bao nhiêu thiết bị hiển thị đồ hoạ đã được cài đặt trên hệ thống cũng như kiểm tra khả năng tương thích (hỗ trợ) của chúng Một đối tượng Direct3 D được tạo thông qua cách sau: IDirect3D9 *Direct3 DCreate9( D3D_SDK_VERSION ); Chú ý: D3D_SDK_VERSION chỉ là một tham số mặc định có thể gửi cho hàm Direct3 DCreate9 Hàm này sẽ trả về một con trỏ trỏ tới giao diện IDirect3D9... sau: + DirectDraw: Quản lý bề mặt đồ hoạ + Direct3 D: Cung cấp tính năng 3D cấp thấp + DirectInput: Hỗ trợ các thiết bị nhập, kể cả các Joystick thế hệ mới + DirectSound: Cung cấp hiệu ứng âm thanh và bộ trộn tiếng + DirectSound 3D: Giúp tạo hiệu ứng âm thanh 3D từ kiểu loa 2D thông thường + DirectSetup: Giúp cài đặt các phần mềm, các Driver một cách tự động * Lớp phương tiện: Media Layer của DirectX... khởi tạo Direct3 D Trong hàm initDirect3D này chúng ta sẽ thực hiện việc tạo một đối tượng Direct3 D và thiết bị để sử dụng chúng /********************************************************************* * initDirect3D *********************************************************************/ bool initDirect3D(void) { pD3D = NULL; pd3dDevice = NULL; // Create the DirectX object if( NULL == ( pD3D = Direct3 DCreate9(... đã lấy hàm initDirect3D ở ví dụ trên và chỉnh sửa lại để nó có thể lấy ra thông tin về thiết bị đồ hoạ: bool initDirect3D() { pD3D = NULL; // Create the DirectX object if( NULL == ( pD3D = Direct3 DCreate9( D3D_SDK_VERSION ) ) ) return false; }; Trước tiên bạn cần tạo ra một đối tượng Direct3 D Thông qua nó bạn sẽ sử dụng được những hàm cần thiết // Phần này dùng để lấy thông tin chi tiết về thiết bị đồ... với các thiết bị Lớp phương tiện này gồm có: + Direct3 D: Cung cấp tập hợp các tính năng biểu diễn 3D + DirectPlay: Hỗ trợ nhiều người cùng tham gia chơi game qua mạng + DirectShow: Quản lý các Slide Show + DirectAnimation: Cung cấp khả năng làm hoạt hình + DirectModel: Cung cấp khả năng mô phỏng 3D * Lớp thành phần: Components Layer là lớp trên cùng của DirectX, nó có thể tận dụng các tính năng của... thiết bị hiển thị Direct3 D, bạn sử dụng lệnh sau: If ( pd3dDevice != NULL ) pd3dDevice->Release( ); Nếu điều kiện trong câu lệnh If được thoả mãn (tức là biến pd3dDevice có chứa dữ liệu – nó được gán cho địa chỉ của một thiết bị được khởi tạo trước đó), thì thực hiện quá trình giải phóng biến đó 23 Cập nhật mã nguồn chương trình Sau khi đã tìm hiểu qua một vài lệnh và thông tin cơ bản về DirectX, bây giờ

Ngày đăng: 24/05/2016, 00:37

Mục lục

    Tìm hiểu về DirectX :

    Quá trình phát triển

    Những thành phần tạo nên DirectX

    Làm việc với DirectX

    Cách đọc phiên bản Direct:

    Chương trình đầu tiên

    Tạo một thiết bị kết xuất (Rendering)

    Thể hiện một phông cảnh

    Dọn dẹp bộ nhớ (Cleaning Up)

    Thay đổi mã lệnh trong vòng lặp quản lý sự kiện

Tài liệu cùng người dùng