• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

[C#] Lập trình 3D trên PocketPC

Các bài viết hướng dẫn và tham khảo chung, không thuộc ngôn ngữ nào

Điều hành viên: vietluyen

Hình đại diện của người dùng
hdn
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 319
Ngày tham gia: T.Tư 26/03/2008 7:09 pm
Has thanked: 1 time
Been thanked: 4 time

[C#] Lập trình 3D trên PocketPC

Gửi bàigửi bởi hdn » T.Năm 23/07/2009 3:44 pm

Tên bài viết: Lập trình 3D trên PocketPC với Windows Mobile DirectX
Tác giả: Trần Đức Huy
Cấp độ bài viết: Xém nâng cao
Tóm tắt: Giới thiệu kĩ thuật lập trình 3D cho các thiết bị cầm tay như PocketPC,... sử dụng hệ điều hành Windows Mobile 5.0 trở lên


Windows Mobile DirectX
Windows Mobile DirectX là bộ thư viện DirectX được xây dựng riêng cho hệ điều hành Microsoft Windows Mobile, chạy trên các thiết bị cầm tay như PocketPC hay SmartPhone.
Với bộ thư viện này, ta có thể dễ dàng phát triển các ứng dụng 3D (như game hoặc các chương trình khác) cho các thiết bị cầm tay một cách thuận tiện như việc phát triển trên máy tính.
Với sự phát triển mạnh của các thiết bị di động trong thời gian gần đây, nhu cầu giải trí trên máy di động cũng ngày càng tăng, kéo theo đó là sự phát triển mạnh mẽ của các công nghệ phát triển ứng dụng chạy trên các thiết bị này.
Hình ảnh
Real football 2008 - một game 3D trên nền PocketPC

Hình ảnh
Đua xe - một thể loại game thường thấy trên các thiết bị cầm tay

Hình ảnh
Hình ảnh
Một số game 3D khác


:|

Hình đại diện của người dùng
hdn
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 319
Ngày tham gia: T.Tư 26/03/2008 7:09 pm
Has thanked: 1 time
Been thanked: 4 time

Re: [C#] Lập trình 3D trên PocketPC

Gửi bàigửi bởi hdn » T.Năm 23/07/2009 4:20 pm

Bây giờ ta sẽ bắt đầu tìm hiểu việc lập trình 3D cho PocketPC
Yêu cầu đầu tiên là bộ Visual Studio Pro hoặc Team Suite (2005 hoặc 2008 đều được), không dùng bản Express vì bản này không có chức năng lập trình cho thiết bị cầm tay.

Khởi động Visual Studio, chọn Visual C#, tạo một Smart Device Project mới
Hình ảnh
Tại hộp thoại Add New Smart Device Project hiện ra, chọn Device Application, lưu ý là Target platform phải là Windows Mobile 5.0 trở lên.
Hình ảnh
Bấm OK, Visual Studio sẽ tự động tạo cho bạn một project mới như trong hình
Hình ảnh

Ta sẽ làm thử một ví dụ nhỏ xem ứng dụng hoạt động như thế nào
Rê chuột vào tab Toolbox bên cạnh trái màn hình, chọn control Button và vẽ vào form (thao tác tương tự như thiết kế WinForm Application), click đúp chuột vào button vừa tạo, cửa sổ Code sẽ hiện ra, gõ vào đoạn code sau:

Mã: Chọn hết

  1. MessageBox.Show("Hello!");

Xong rồi nhấn F6 để build và F5 để chạy thử, bạn sẽ thấy xuất hiện một trình giả lập PocketPC, chờ một lát thì trên màn hình PPC sẽ hiện ra 1 form màu trắng có 1 cái nút ở giữa, click vô nút đó sẽ xuất hiện hộp thoại thông báo Hello.
Hình ảnh
Quá trình giả lập này tốn nhiều thời gian vì công đoạn khởi động giả lập, rồi Deploy ứng dụng của bạn ra file CAB để chuyển vào máy ảo PPC. Nếu có 1 cái máy PPC thiệt thì công đoạn test sẽ tiện hơn nhiều >:)
:|

Hình đại diện của người dùng
hdn
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 319
Ngày tham gia: T.Tư 26/03/2008 7:09 pm
Has thanked: 1 time
Been thanked: 4 time

Re: [C#] Lập trình 3D trên PocketPC

Gửi bàigửi bởi hdn » T.Năm 23/07/2009 5:27 pm

Tiếp theo ta sẽ bắt đầu tìm hiểu cách khởi tạo môi trường DirectX trên PocketPC
Lúc này ta không cần Form1 nữa, bạn có thể xóa nó đi, chỉ giữ lại Program.cs
Vào xem code của Program.cs, ở đoạn

Mã: Chọn hết

  1. class Program

bạn sửa lại thành

Mã: Chọn hết

  1. class Program: Form

Ta phải nhập bộ thư viện Microsoft.WindowsMobile.DirectX vào trước.
Trong cửa sổ Solution Explorer, click phải chuột vào References, chọn Add Reference
Hộp thoại Add Reference hiện ra, tìm và chọn Microsoft.WindowsMobile.DirectX sau đó nhấn OK.
Hình ảnh
Giờ chuyển qua View Code, ở phần khai báo các thư viện sử dụng, thêm vào 2 dòng

Mã: Chọn hết

  1.  
  2. using Microsoft.WindowsMobile.DirectX;
  3. using Microsoft.WindowsMobile.DirectX.Direct3D;
  4.  

Bây giờ thì có thể sử dụng các hàm của DirectX tùy thích.
Ta sẽ viết một chương trình khởi tạo môi trường DirectX để có thể sẵn sàng thực hiện các lệnh đồ họa trên PPC, chương trình của chúng ta hoạt động theo cấu trúc như sau:
Đầu tiên chương trình sẽ gọi thủ tục Main(), thủ tục này gọi hàm InitGraphic() để khởi tạo môi trường đồ họa cũng như các giá trị cần thiết, tiếp đến sẽ chạy một vòng lặp với điều kiện là form hiện hành vẫn còn được nhận focus, nếu còn thì liên tục gọi thủ tục Render(), làm nhiệm vụ vẽ lên màn hình các đối tượng đồ họa, trong ví dụ này chỉ là liên tục tô đen màn hình, khi kết thúc vòng lặp và thoát ra ngoài, sẽ gọi thủ tục DisposeGraph() để hủy bỏ môi trường DirectX đã tạo. Vòng lặp này gọi là Main Loop (vòng lặp chính - một khái niệm thường gặp trong lập trình đồ họa)
Ta sẽ đi viết từng thủ tục riêng lẽ, code đã comment, không cần giải thích gì nữa
trước đó cần khai báo một đối tượng Devie (chứa thông tin về thiết bị khởi tạo đồ họa)

Mã: Chọn hết

  1. private Device device;

hàm InitGraphic()

Mã: Chọn hết

  1.  
  2.         protected bool InitGraphic()
  3.         {
  4.             // giá trị chứa các thông số để khởi tạo môi trường DirectX
  5.             PresentParameters pres = new PresentParameters();
  6.             pres.Windowed = true; //Chương trình chạy trong chế dộ cửa sổ (không fullscreen)
  7.             pres.SwapEffect = SwapEffect.Discard; //Khó dịch và khó giải thích nên khỏi dịch :P
  8.             //sau khi đã có các tham số thì bắt đầu khởi tạo môi trường đồ họa bằng các tham số đó
  9.             device = new Device(0, DeviceType.Default, this, CreateFlags.None, pres);
  10.             return true;
  11.         }
  12.  

Thủ tục Render()

Mã: Chọn hết

  1.  
  2.         protected void Render()
  3.         {
  4.             device.Clear(ClearFlags.Target, Color.Black, 1.0F, 0); // Xỏa màn hình, tô đen toàn bộ
  5.             device.BeginScene(); // Bắt đầu vẽ
  6.             // Chưa vẽ cái gì hết
  7.             device.EndScene(); // Kết thúc
  8.             device.Present();
  9.         }
  10.  

Thủ tục DisposeGraph()

Mã: Chọn hết

  1.  
  2.         protected void DisposeGraph()
  3.         {
  4.             device.Dispose(); // Hủy môi trường đồ họa
  5.         }
  6.  

Thủ tục Main()

Mã: Chọn hết

  1.  
  2.         static void Main()
  3.         {
  4.             Program app = new Program(); // Khởi tạo Form Program
  5.             app.InitGraphic(); // Gọi hàm khởi tạo đồ họa
  6.             app.Show(); // Hiện form
  7.             while (app.Focused) //Vòng lặp chính, nếu form còn đang nhận Focus thì ...
  8.             {
  9.                 app.Render(); // Gọi thủ tục Render()
  10.                 Application.DoEvents(); // Thực hiện tuần tự các thủ tục
  11.             }
  12.             app.DisposeGraph(); // Sau khi kết thúc vòng lặp thì gọi thủ tục DisposeGraph()
  13.         }
  14.  


Thế là xong, bây giờ bạn nhấn F6 để build và F5 để chạy thử, nếu xuất hiện cái PocketPC với màn hình đen thui là ok
Hình ảnh

Mã nguồn đầy đủ của bài này:

Mã: Chọn hết

  1.  
  2. using System;
  3.  
  4. using System.Collections.Generic;
  5. using System.Windows.Forms;
  6.  
  7. using Microsoft.WindowsMobile.DirectX;
  8. using Microsoft.WindowsMobile.DirectX.Direct3D;
  9. using System.Drawing;
  10.  
  11. namespace Dx3DPPC
  12. {
  13.     class Program: Form
  14.     {
  15.         private Device device;
  16.        
  17.         protected bool InitGraphic()
  18.         {
  19.             // giá trị chứa các thông số để khởi tạo môi trường DirectX
  20.             PresentParameters pres = new PresentParameters();
  21.             pres.Windowed = true; //Chương trình chạy trong chế dộ cửa sổ (không fullscreen)
  22.             pres.SwapEffect = SwapEffect.Discard; //Khó dịch và khó giải thích nên khỏi dịch :P
  23.             //sau khi đã có các tham số thì bắt đầu khởi tạo môi trường đồ họa bằng các tham số đó
  24.             device = new Device(0, DeviceType.Default, this, CreateFlags.None, pres);
  25.             return true;
  26.         }
  27.  
  28.         protected void Render()
  29.         {
  30.             device.Clear(ClearFlags.Target, Color.Black, 1.0F, 0); // Xỏa màn hình, tô đen toàn bộ
  31.             device.BeginScene(); // Bắt đầu vẽ
  32.             // Chưa vẽ cái gì hết
  33.             device.EndScene(); // Kết thúc
  34.             device.Present();
  35.         }
  36.  
  37.         protected void DisposeGraph()
  38.         {
  39.             device.Dispose(); // Hủy môi trường đồ họa
  40.         }
  41.  
  42.         static void Main()
  43.         {
  44.             Program app = new Program();
  45.             app.InitGraphic(); // Gọi hàm khởi tạo đồ họa
  46.             app.Show();
  47.             while (app.Focused) //Vòng lặp chính, nếu form còn đang nhận Focus thì ...
  48.             {
  49.                 app.Render(); // Gọi thủ tục Render()
  50.                 Application.DoEvents(); // Thực hiện tuần tự các thủ tục
  51.             }
  52.             app.DisposeGraph(); // Sau khi kết thúc vòng lặp thì gọi thủ tục DisposeGraph()
  53.         }
  54.     }
  55. }
  56.  
:|

nguyenloc_22
Bài viết: 1
Ngày tham gia: T.Ba 03/11/2009 10:18 pm

Re: [C#] Lập trình 3D trên PocketPC

Gửi bàigửi bởi nguyenloc_22 » T.Hai 23/11/2009 9:21 pm

Bài viết hay quá, cảm ơn tác giả, nhưng sao không thấy bạn tiếp tục bài viết vậy.... [-(


Quay về “Bài viết hướng dẫn”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách