14
1 Khoa CNTT – ĐHBK Hà ni Bài thc hành s1: Lp trình vi DirectX [email protected]

Khoa CNTT – ĐHBK Hà nội - read.pudn.comread.pudn.com/downloads159/ebook/714623/GameProramming/Thuc h… · this.Text = "Thuc hanh DirectX"; } - Chỉnh lại hàm main()

  • Upload
    lynhu

  • View
    215

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Khoa CNTT – ĐHBK Hà nội - read.pudn.comread.pudn.com/downloads159/ebook/714623/GameProramming/Thuc h… · this.Text = "Thuc hanh DirectX"; } - Chỉnh lại hàm main()

1

Khoa CNTT – ĐHBK Hà nội

Bài thực hành số 1: Lập trình với DirectX

[email protected]

Page 2: Khoa CNTT – ĐHBK Hà nội - read.pudn.comread.pudn.com/downloads159/ebook/714623/GameProramming/Thuc h… · this.Text = "Thuc hanh DirectX"; } - Chỉnh lại hàm main()

2

1. Thiết lập môi trường 1.1 Cài đặt Visual Studio C# 2005 Express

- Kích hoạt file setup.exe: -

- Chương trình cài đặt sẽ load các file cần thiết:

- Thực hiện theo hướng dẫn cài đặt - Kết quả sau khi cài đặt

Page 3: Khoa CNTT – ĐHBK Hà nội - read.pudn.comread.pudn.com/downloads159/ebook/714623/GameProramming/Thuc h… · this.Text = "Thuc hanh DirectX"; } - Chỉnh lại hàm main()

3

1.2 Cài đặt Microsoft DirectX 9 SDK

- Nhấn Next để tiếp tục cài đặt

Page 4: Khoa CNTT – ĐHBK Hà nội - read.pudn.comread.pudn.com/downloads159/ebook/714623/GameProramming/Thuc h… · this.Text = "Thuc hanh DirectX"; } - Chỉnh lại hàm main()

4

- Chọn “I accept the items in the license agreement” - Nhấn Next

- Chọn các thành phần cài đặt. Nhấn Next để bắt đầu cài. - Sau khi cài đặt thành công, chúng ta thu được:

Page 5: Khoa CNTT – ĐHBK Hà nội - read.pudn.comread.pudn.com/downloads159/ebook/714623/GameProramming/Thuc h… · this.Text = "Thuc hanh DirectX"; } - Chỉnh lại hàm main()

5

2. Các ứng dụng cơ bản 2.1 Tạo một ứng dụng mới _1: Khởi động Visual Studio C# 2005 Express

_2: Tạo một dự án mới với kiểu dự án là Window Application và ngôn ngữ lập trình C#

Trong menu File chọn New

Page 6: Khoa CNTT – ĐHBK Hà nội - read.pudn.comread.pudn.com/downloads159/ebook/714623/GameProramming/Thuc h… · this.Text = "Thuc hanh DirectX"; } - Chỉnh lại hàm main()

6

Trong khung Project type chọn Visual C#

Trong khung bên phải chọn Windows Application

Nhập tên cho ứng dụng: ThucHanhDirectX và nhấn OK

_3: Lúc này trên màn hình xuất hiện một cửa sổ trống:

Page 7: Khoa CNTT – ĐHBK Hà nội - read.pudn.comread.pudn.com/downloads159/ebook/714623/GameProramming/Thuc h… · this.Text = "Thuc hanh DirectX"; } - Chỉnh lại hàm main()

7

- Chuyển sang cửa sổ mã nguồn: tìm file Program.cs trong khung bên phải. Nháy đúp hoặc nhấn chuột phải và chọn View code

- Khung soạn thảo mã nguồn sẽ hiển thị ở phía bên trái

Page 8: Khoa CNTT – ĐHBK Hà nội - read.pudn.comread.pudn.com/downloads159/ebook/714623/GameProramming/Thuc h… · this.Text = "Thuc hanh DirectX"; } - Chỉnh lại hàm main()

8

- Để sử dụng các tiện ích của bộ thư viện DirectX chúng ta phai thiết lập tham chiếu đến các thư viện này - Chọn mục References trong khung bên phải. Nhấn chuột phải và chọn Add references

- Trong hộp thoại Add reference chúng ta chọn hai thư viện DirectX và DirectX3D

Page 9: Khoa CNTT – ĐHBK Hà nội - read.pudn.comread.pudn.com/downloads159/ebook/714623/GameProramming/Thuc h… · this.Text = "Thuc hanh DirectX"; } - Chỉnh lại hàm main()

9

- Trong khung soạn thảo mã nguồn chúng ta bổ sung hai câu lệnh để sử dụng hai thư viện vừa tham chiếu:

using Microsoft.DirectX; using Microsoft.DirectX.Direct3D;

- Lúc này khi biên dịch chương trình chỉ hiện thị một form trống. Để thay đổi tiêu đề và kích thước của form chúng ta tìm phương thức InitializeComponent() và thay đổi lại kích thước của form là (500,500), tiêu đề là “Thuc hanh DirectX”

- Mở mã nguồn của form:

Page 10: Khoa CNTT – ĐHBK Hà nội - read.pudn.comread.pudn.com/downloads159/ebook/714623/GameProramming/Thuc h… · this.Text = "Thuc hanh DirectX"; } - Chỉnh lại hàm main()

10

- Thay đổi phương thức InitializeComponent(): private void InitializeComponent() { this.components = new System.ComponentModel.Container(); this.Size = new System.Drawing.Size(500, 500); this.Text = "Thuc hanh DirectX"; }

- Chỉnh lại hàm main() trong file Program.cs như sau static void Main() { using (Form1 our_dx_form = new Form1()) { Application.Run(our_dx_form); } }

- Thực thi chương trình bằng cách nhấn F5, kết quả hiển thị

Page 11: Khoa CNTT – ĐHBK Hà nội - read.pudn.comread.pudn.com/downloads159/ebook/714623/GameProramming/Thuc h… · this.Text = "Thuc hanh DirectX"; } - Chỉnh lại hàm main()

11

2.2 Kết nối đến thiết bị (device) _1: Trong phần này chúng ta sẽ thực hiện khởi tạo và kết nối đến đối tượng Device. Một đối tượng Device là một liên kết trực tiếp đến phần cứng điều khiển đồ họa của máy tính, cung cấp khả năng truy nhập trực tiếp đến thiết bị này. _2: Đầu tiên chúng ta khai báo một biến Device trong lớp Form1 private Device device; _3: Tiếp theo xây dựng phương thức InitializeDevice() để kích hoạt thiết bị, phương thức này cũng được đặt trong lớp Form public void InitializeDevice() { PresentParameters presentParams = new PresentParameters(); presentParams.Windowed = true; presentParams.SwapEffect = SwapEffect.Discard; device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams); }

• Dòng đầu tiên của phương thức tạo ra một đối tượng Presentation Parameters chứa các thông tin thông báo cho thiết bị cách thức hoạt động.

• Chúng ta không muốn hiển thị toàn bộ màn hình vì vậy thuộc tính Windowed được đặt là true.

• Và chúng ta sẽ ghi trực tiếp ra thiết bị, không cần sử dụng một bộ đệm trung gian: SwapEffect.Discard

• Sau đó khởi tạo đối tượng device: tham số 0 cho phép lựa chọn card đồ họa đầu tiên trong máy tính, như vậy các đối tượng đồ họa sẽ được render qua các thiết bị phần cứng.

• Tham số “this” để gắn cửa sổ hiện hành với đối tượng device _4: Trong hàm main() chúng ta bổ sung lời gọi đến phương thức khởi tạo device: static void Main() { using (Form1 our_dx_form = new Form1()) { our_dx_form.InitializeDevice(); Application.Run(our_dx_form); } } _5: Thực thi chương trình lúc này vẫn chỉ hiển thị một form rỗng nhưng ở phía dưới đối tượng device đã được khởi tạo. _6: Tiếp theo chúng ta sẽ ghi đè phương thức OnPaint() để kiểm soát quá trình hiển thị các

Page 12: Khoa CNTT – ĐHBK Hà nội - read.pudn.comread.pudn.com/downloads159/ebook/714623/GameProramming/Thuc h… · this.Text = "Thuc hanh DirectX"; } - Chỉnh lại hàm main()

12

đối tượng trên form • Bổ sung vào lớp Form phương thức OnPaint() ngay phía sau phương thức khởi

tạo device protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)

{ device.Clear(ClearFlags.Target, Color.DarkSlateBlue, 1.0f, 0); device.Present();

} • Phương thức Clear sẽ tô toàn bộ form với một màu cho trước, tham số

ClearFlags thông báo chúng ta muốn xóa đối tượng nào, trong trường hợp này là cửa sổ đích.

• Phương thức Present để cập nhật lại đối tượng device • Để sử dụng được đối tượng Color chúng ta bổ sung vào đầu chương trình câu

lệnh khai báo: using System.Drawing;

_7: Thực thi chương trình chúng ta thu được

Page 13: Khoa CNTT – ĐHBK Hà nội - read.pudn.comread.pudn.com/downloads159/ebook/714623/GameProramming/Thuc h… · this.Text = "Thuc hanh DirectX"; } - Chỉnh lại hàm main()

13

2.3 Vẽ một tam giác trên màn hình _1: Phần này sẽ cung cấp các kiến thức cơ bản để thực hiện vẽ trên màn hình _2: Trước hiết chúng ta cần biết rằng bất kỳ đối tượng 3D nào cũng được vẽ bằng cách sử dụng các lưới được tạo thành từ rất nhiều các tam giác. - Mỗi tam giác được tạo thành từ 3 điểm - Mỗi một điểm được định nghĩa bởi một vecto được xác định bởi các trục X, Y và Z - DirectX cung cấp một lớp nắm giữ các thông tin không chỉ về vị trí mà còn cả màu sắc của các đối tượng (các thông tin vertex): CustomVertex class _3: Bổ sung thêm đoạn mã sau vào phía đầu của hàm OnPaint(): CustomVertex.TransformedColored[] vertices = new CustomVertex.TransformedColored[3]; vertices[0].Position = new Vector4(150f, 100f, 0f, 1f); vertices[0].Color = Color.Red.ToArgb(); vertices[1].Position = new Vector4(this.Width / 2 + 100f, 100f, 0f, 1f); vertices[1].Color = Color.Green.ToArgb(); vertices[2].Position = new Vector4(250f, 300f, 0f, 1f); vertices[2].Color = Color.Yellow.ToArgb();

_4: Tiếp theo chúng ta sẽ thông báo cho device để vẽ một tam giác lên màn hình. Bổ sung vào ngay phía sau lệnh Clear() hai câu lệnh sau:

device.EndScene(); device.Present(); - Hai câu lệnh này thông báo cho device bắt đầu và kết thúc một khung ảnh (scene) - Và ở giữa hai câu lệnh này chúng ta thực hiện vẽ tam giác: device.VertexFormat = CustomVertex.TransformedColored.Format; device.DrawUserPrimitives(PrimitiveType.TriangleList, 1, vertices); - Khi thực hiện chương trình chúng ta có thể thấy là khi thay đổi kích thước của Forrm thì toàn bộ form sẽ được vẽ lại, để tránh điều nàu chúng ta bổ sung thêm một lệnh vào cuối phương thức OnPaint(): this.Invalidate(); - Bổ sung thêm câu lệnh sau vào cuối hàm khởi tạo Component this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true); _5: Thực thi chương trình ta được

Page 14: Khoa CNTT – ĐHBK Hà nội - read.pudn.comread.pudn.com/downloads159/ebook/714623/GameProramming/Thuc h… · this.Text = "Thuc hanh DirectX"; } - Chỉnh lại hàm main()

14