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:

image

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ớ.

image

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:

image

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.

image

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.

Để lại hồi âm