Direct3D – Tạo hình cơ bản

Bài này giới thiệu một chương trình đơn giản minh hoạ cách tạo các hình đơn giản. Hình đơn giản nhất là hình tam giác được xác định bằng toạ độ của 3 điểm trong không gian. Hình tam giác là hình cơ bản nhất trong đồ hoạ 3D, vì một hình khối phức tạp có thể đưa về thành tập các hình tam giác tạo thành bề mặt hình khối.

Thông thường để vẽ một tập các hình tam giác kề nhau, người ta không cần phải cung cấp 3 đỉnh cho mỗi hình tam giác, mà có thể sử dụng lại 2 đỉnh của tam giác trong việc vẽ một tam giác liền kề. Do đó, để vẽ một hình chữ nhật thì chỉ cần cung cấp 4 đỉnh.

Để tạo ra các đỉnh, cần phải định nghĩa một cấu trúc lưu thông tin về một đỉnh có dạng như sau:

 image

Cấu trúc này gồm các trường X, Y, Z là toạ độ điểm trong không gian; U, V là toạ độ dùng trong khi lát ảnh (Texture Mapping); Diffuse là màu của đỉnh.

Để tạo ra một hình chữ nhật, khai báo một mảng gồm 4 đỉnh:

 image

Direct3D cho phép vẽ trực tiếp từ mảng các đỉnh này, tuy nhiên như thế không hiệu quả bằng việc chuyển sang một dạng bộ đệm chuẩn của Direct3D. Để tạo bộ đệm, khai báo một biến kiểu VertexBuffer và nạp dữ liệu vào bộ đệm này:

image

Hàm BuildPrimitive() được gọi khi khởi tạo cửa sổ.

Để hiển thị được hình này, sửa lại hàm GenerateFrame() trong ví dụ ở bài trước và cung cấp các đoạn mã vẽ.

 image

Phép chiếu được sử dụng ở đây là phép chiếu phối cảnh, mắt đặt ở điểm (0, 0, -10), nhìn vào điểm (0, 0, 0) và hướng đầu dọc theo trục y.

Hình vuông được phóng to lần lượt theo các chiều là (4, 4, 1), được dịch một khoảng theo mỗi chiều là (-2, -2, 0) để đưa tâm hình vuông về gốc toạ độ, được xoay với góc rotation dọc theo trục Y.

Khi chạy chương trình sẽ thu được một hình vuông xoay quanh trục thẳng đứng.

image

Tải về: chương trình minh hoạ

Ghi chú: Để dịch và chạy được chương trình này, máy tính cần cài đặt các công cụ cần thiết. Để biết thêm chi tiết, xem thêm các bài trước về Direct3D.

5 phản hồi tới “Direct3D – Tạo hình cơ bản”

  1. Chào anh Hòa,

    Tôi là Cường, làm việc tại Microsoft Việt nam, phụ trách quảng bá công nghệ lập trình.

    Tôi rất thích những bài viết chia xẻ công nghệ của anh. Hiện giờ Microsoft Việt nam, đang có chương trình ghi nhận những cá nhân tích cực chia xẻ kiến thức tin học cho cộng đồng, MVP, Microsoft Most Valuable Professional. Tôi rất vui nếu anh quan tâm đến chương trình này.

    Làm ơn liên hệ với tôi qua email:
    cuongmicrosoft cham com
    hoặc 0902 2090 11.

    Xin cảm ơn,

  2. Em thấy nó tương tự như OpenGL

  3. Nguyễn Đình Đông Says:

    Anh hòa cho em hỏi về xác định tọa độ trong directx:
    Một điểm P(X,Y,Z) trong thế giới thực khi được hiển thị trên form thì nó có tọa độ là p(x,y).
    Vậy em phải dùng hàm trong directx để xác định tọa độ x,y của p(x,y) khi biết tọa độ điểm P(X,Y,Z) và vị trí của camera?

    Anh giúp em với nhé!
    ngddong@gmail.com

  4. em chao thay!
    em sin cam on thay ve dien dan nay
    tui em dang hoc visual 2005 ma khong co ban tieng viet cu the nao
    thay cho em sin tai lieu ve visual 2005 duoc khong ah

  5. sao tôi download tài liệu mà ko được vậy bạn toàn báo lỗi

Để lại hồi âm