Direct3D – Chương trình đầu tiên
Trong bài trước, tôi đã giới thiệu sơ lược về Direct3D cũng như những kiến thức cơ bản trong lập trình đồ hoạ. Trong bài này, tôi sẽ giới thiệu một chương trình cơ mẫu cơ bản cho các chương trình đồ hoạ 3D sau này. Chương trình viết bằng ngôn ngữ C#, trên nền Visual Studio 2005.
Chương trình mẫu có những chức năng cơ bản sau:
- Khởi tạo đồ hoạ 3 chiều
- Tạo khung hình và hiển thị liên tục
Sau đây là một số bước cần chú ý khi tạo một chương trình với Direct3D.
Để tạo một chương trình 3D, chúng ta sẽ bắt đầu từ một chương trình Windows Application dùng ngôn ngữ C# được tạo bởi Visual Studio, đổi tên Form1 thành DeviceForm. Để sử dụng được Direct3D, cần thêm các Reference tướng ứng.
Thêm vào ứng dụng các reference đến các thư viện:
- Microsoft.DirectX
- Microsoft.DirectX.Direct3D
- Microsoft.DirectX.Direct3DX
Sau khi thêm các reference, cần đưa các lệnh using vào lớp DeviceForm để sử dụng các thư viện này:
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;
Các thao tác đồ hoạ 3D được thực hiện bởi đối tượng Device của Direct3D. Để tạo được đối tượng này, thêm vào lớp DeviceForm một biến kiểu Device và một hàm khởi tạo:

Hàm này được gọi trong constructor của DeviceForm sau khi đã khởi tạo xong các thành phần.
Một số tham số có thể được đặt lại trong hàm InitializeDevice để thu được kết quả mong muốn như:
Hiển thị dạng fullscreen: đặt presentParameters.Windowed = false
Sử dụng hardware trong việc xử lý điểm: Dùng tuỳ chọn CreateFlags.HardwareVertexProcessing khi tạo device. Tuỳ chọn này chỉ thực hiện được khi card đồ hoạ hỗ trợ.
Chương trình đã sàng cho việc sử dụng đồ hoạ 3D. Để tạo các khung hình, Direct3D dùng hai vùng nhớ, một vùng nhớ dùng để hiển thị và một vùng nhớ để vẽ. Chương trình liên tiếp vẽ vào một vùng nhớ, sau khi vẽ xong vùng nhớ này được sử dụng để hiển thị còn vùng nhớ hiển thị được chuyển để vẽ. Kỹ thuật này giúp cho người xem không thấy được quá trình vẽ và màn hình không bị nháy khi chuyển các khung hình.
Để tạo khung hình, thêm vào lớp DeviceForm hàm GenerateFrame. Hàm này hiện tại không vẽ gì, chỉ xoá nền sau đó lật vùng nhớ.

Hàm GenerateFrame sẽ được gọi liên tục trong vòng lặp. Mở tệp Program.cs và sửa hàm Main thành:

Sau khi thực hiện xong các bước trên, chạy chương trình nếu không có lỗi sẽ thấy một cửa sổ màu đen.
Download: Chương trình minh hoạ
Ghi chú: Để dịch và chạy được chương trình minh hoạ, cần phải cài đặt DirectX SDK, xem chi tiết trong bài Lập trình Direct3D trên nền .NET – Bắt đầu với Direct3D.