Các tổ chức:

Trước khi vẽ một điểm ảnh riêng lẻ, một động cơ 3 chiều phải có một ngôn ngữ toán học để mô tả các vật thể trong không gian. Tại lõi là [FLT:] ] (ba chiều tương ứng với nhau, ba vòng biểu diễn vị trí, hướng, hoặc màu sắc) và ) các giá trị [FLT: 3] [FLT:] [FL:]] [4 dãy mã hóa]. Trong C, những điều này thường được định nghĩa là các công cụ:

  • cho điểm và véc tơ.
  • ma trận chuyển hóa được lưu trữ theo thứ tự cột-major.

Mỗi đối tượng được tạo thành [FLT:] chữ [FLT: 1]. Một tam giác được xác định bởi ba đỉnh, mỗi vật có vị trí, và tùy chọn một màu bình thường. Nấu hình này thành các dãy liên tiếp (v., ) cho một khối lập phương cải thiện hiệu suất bộ nhớ tạm (một cách quan trọng khi bạn tiến hành hàng ngàn khuôn mặt trên mỗi khung.

Đường ống đồ họa: Từ các điểm ảnh đến điểm ảnh

Một đường ống đồ họa là một chuỗi các giai đoạn chuyển đổi dữ liệu cảnh 3D thành một hình ảnh 2 chiều. Trong một động cơ phần mềm được quản lý, bạn thực hiện bằng tay mỗi giai đoạn.

  1. Tiến trình Vertex ) — áp dụng mô hình, xem và hình ảnh biến đổi.
  2. Sự phân hóa – chuyển đổi tam giác thành các mảnh (dấu chấm chấm phẩy).
  3. Chia ) – tính màu của mỗi mảnh dựa trên ánh sáng và vật liệu.
  4. Ratt Mering – pha trộn các mảnh vỡ với bộ đệm khung, bao gồm cả thử nghiệm độ sâu.

Động cơ tăng tốc (dùng OpenGL, Vulkan, hoặc DirectX) thực hiện hầu hết các bước trên GPU, nhưng hiểu được con đường phần mềm cho bạn hiểu sâu sắc hơn về cách mà GPU hoạt động dưới nắp.

Tiến trình và biến đổi Vertex

Mỗi vertex bắt đầu [FLT:] khoảng trắng [FLT: 1] [FLT:] để mã hóa, quay] (các tọa độ [FL:4] xem [FL:4) , bạn áp dụng một [FLTTT:] ma trận [FLT:] [FLT] để chuyển đổi không gian [FL] thành khoảng cách xem tọa độ máy ảnh. Cuối cùng, [L: FL] để mã hóa, [FT] [FL] [FL] [FL], và co dãn] xem không gian chuẩn [FT].

Ở C, chức năng chuyển hóa trông giống như:

  • – trả lại một danh tính ma trận.
  • – xây dựng một ma trận phiên dịch.
  • – quay quanh trục X.
  • – nhân một ma trận 4×4 với một véc tơ 4leion (tọa độ tổng hợp).

vertex maker tương đương với trong phần mềm lặp lại trên tất cả các đỉnh, nhân mỗi bởi ma trận, và lưu trữ kết quả trong một bộ đệm vertex biến đổi.

Đối tượng: phối cảnh đối xứng với Chiếu ảnh

Dự án điều khiển độ sâu được thể hiện trên màn hình như thế nào. [FLT: 0] Dự đoán [FLT: 1] làm cho các vật xa trông nhỏ hơn, tạo ra chủ nghĩa thực tế. ma trận được xây dựng từ phạm vi xem, tỷ lệ hình thể, gần và xa. Công thức điển hình bao gồm việc phân chia các thành phần x và y bằng z (sau phép nhân ma trận). Trong C, bạn tính toán ma trận một lần chiếu và tái tạo lại từng khung:

  • – trả lại một ma trận quan điểm tiêu chuẩn.

Việc chiếu Orthographic bảo tồn các dòng song song và được sử dụng đơn giản hơn cho các công cụ UI hoặc CA. Nó không bao gồm cách nhìn chia.

Sự phân tán: Tam giác chồng lên nhau

Sau khi chiếu, bạn có tọa độ màn hình 2D (như vị trí điểm điểm ảnh) và giá trị độ sâu (z). Sự phân chia mỗi tam giác thành các mảnh bao gồm tọa độ điểm ảnh số nguyên. Thuật toán cổ điển là [FLT: 0] chuyển đổi [FLT: 1]]::]:

  1. Sắp xếp ba đỉnh của tam giác theo độ phân giải y.
  2. Đi dọc theo cạnh trái và phải, giới hạn x tính toán cho mỗi đường quét.
  3. Mỗi điểm nằm ở khoảng cách ngang, tính độ sâu của mảnh này bằng cách đi dọc theo tam giác.
  4. Thực hiện một thử nghiệm [FLT: 0] [FLT: 1]]: so sánh z của mảnh đó với giá trị đã nằm trong bộ đệm sâu. Nếu gần hơn, cập nhật bộ đệm sâu và tính toán màu của từng mảnh.

Thực hiện thuật toán đi lại hiệu quả ở C yêu cầu vòng lặp chặt chẽ và sử dụng cẩn thận số học cố định để tránh nổi trên đầu. Nhiều động cơ ưa thích bắt đầu với một phương pháp tiếp cận bằng vật lý (xem xét mọi điểm ảnh trong hộp bị ràng buộc) và sau đó tối ưu hóa với phương trình cạnh.

Bóng và chiếu sáng

Một động cơ bóng phẳng đơn giản sử dụng một màu riêng lẻ trên mỗi tam giác, tính từ mặt bình thường và một nguồn ánh sáng. Mô hình [FLT: 0] [FLT: 0] [FLT: 1] cho cường độ khuếch tán . Trong C, bạn tính toán bình thường như kết quả của hai cạnh tam giác (sau khi chuyển đổi các đỉnh thành không gian), sau đó nhân cường độ ánh sáng với màu cơ bản của tam giác.

Để thêm chiều sâu, thực hiện Gouraud bóng ). Sau đó yêu cầu các vị trí và bình thường trên thế giới, sau đó tính toán chiếu sáng trên từng mảnh nhỏ, nhưng kết quả tốt hơn đáng kể.

Xây dựng động cơ ở C: Bước thực tiễn

Hãy cùng nhau chế tạo một động cơ 3D nhỏ nhất từ đầu, mục tiêu là làm một khối lập phương quay với ánh sáng chung quanh và khuếch tán trên một cửa sổ 64×480 điểm.

Bước 1 — Thiết lập bộ đệm điểm ảnh

Xác định một bộ đệm bộ nhớ cho khung và độ sâu: và . Hãy xoá bộ đệm khung thành đen và bộ đệm bề sâu tới 1. 0 (máy bay xa) mỗi khung.

Bước 2 – Dữ liệu Hình ảnh Định nghĩa

Đối với một khối lập phương, sáu mặt (12 tam giác) cần 12×3 = 36 đỉnh. Lưu chúng vào một dãy các đường cong có vị trí (3 nổi) và màu (3 nổi cho RGB). Tiền định 8 góc khối lập phương và sáu màu mặt. Hãy dùng chỉ mục đệm để tránh các đỉnh lặp lại.

Bước 3 – Đường ống Biến hình

Mỗi khung, tính toán ma trận mô hình từ một góc (vP.g., quay Y (thời gian), ma trận khung xem cố định nhìn vào nguồn gốc, và ma trận phản chiếu. Kết hợp chúng thành một ma trận MVP đơn giản: . Biến đổi mọi đỉnh bằng . Sau đó, thực hiện góc nhìn phân chia (divide xy, w) để có được một thiết bị bình thường (một hệ thống định cho +1). Bản đồ: [FL: 14, [FL], [L].]. [L] Hãy tiếp tục] để kiểm tra độ sâu (K.

Bước 4 — Sự mê hoặc và bóng râm

Đối với mỗi tam giác, hãy dùng phương pháp quét. Khi dùng điểm ảnh (v. d., hãy phân cách độ sâu và độ sâu bằng độ tương phản) cũng tương ứng với các tính năng trên mỗi tờ kiểu dáng như vị trí không gian (cho Phong) hay đỉnh chuẩn (cho Gouraud). Hãy áp dụng phương trình khuếch tán Lambert. Ghi chú màu cuối cùng vào bộ đệm khung nếu tiến trình thử nghiệm bề sâu.

Bước 5 — Hiển thị

Dùng SDL (Simp DirectMedia Layer) hoặc thư viện tương tự để tạo một cửa sổ và đánh dấu bộ đệm khung. Chẳng hạn, với SDL 2: , , trong , sau đó và mỗi khung.

Đường dẫn phần mềm này chạy trên CPU, do đó hiệu suất được giới hạn trong vài ngàn tam giác trên mỗi khung. Một khi tiện lợi, bạn có thể thay thế lớp phóng đại bằng OpenGL, giảm công việc nặng nề xuống GPU trong khi giữ sự biến đổi và hình ảnh logic ở C.

Làm báp têm cho máy bạn

Một động cơ cơ cơ cơ bản thì chậm. Một số tối ưu hóa là thiết yếu cho hiệu suất thời gian thực:

  • Trình quản lý mặt sau: Bỏ qua tam giác có những điểm bình thường xa máy ảnh. Tính diện tích đã được chọn (theo 2 chiều) hoặc kiểm tra sản phẩm chấm của khuôn mặt bình thường với hướng xem.
  • Bắt đầu [FLT: 1] thử hộp kết nối của một đối tượng chống lại sáu mặt phẳng trong tầm nhìn. Nếu hoàn toàn bên ngoài, bỏ qua toàn bộ đối tượng.
  • Số học có số điểm Thay thế các thao tác nổi với toán học số nguyên trong vòng quay chặt chẽ. Nhiều nhà tạo cơ chế sử dụng điểm cố định 16.16 để quét tuyến.
  • Bộ nhớ tạm chuyển dạng:) tránh biến đổi cùng một đỉnh nhiều lần bằng cách biến đổi tất cả các đỉnh của một cái lưới một lần, rồi dùng chất lót.
  • Bộ đệm khung đã khoá viết:[FLT: 1] Ghi điểm ảnh theo thứ tự bộ nhớ (trái sang phải, trên- đến- dưới) để tối đa hóa bộ nhớ thành công.

Những kỹ thuật này có thể đẩy một bộ làm phần mềm từ 3–5 fps đến 60 fps cho các cảnh độ phức tạp trung bình (v. g., một vài trăm tam giác).

Mở rộng động cơ

Một khi một nền tảng vững chắc đã tồn tại, bạn có thể thêm tính năng theo cách tăng dần:

  • Bản đồ cấu trúc văn bản: Lưu trữ ảnh 2D và định dạng tọa độ UV trên các tam giác. Tính toán nhị phân để tìm kết quả mịn.
  • , bóng bóng bóng cao độ:). tô sáng thêm (Blinn-Phong), oclusition, hoặc thậm chí bản đồ bóng.
  • Quản lý hệ thống: Dùng một cây ocree hoặc iP để nhanh chóng xác định những đối tượng nào có thể nhìn thấy được.
  • Người dùng tương tác [FLT: 0]: xử lý bàn phím và nhập chuột để quay vòng camera hoặc chọn đối tượng.
  • Tính trừu tượng hóa Ppeline:[FLT: 1) Thiết kế hệ thống bóng râm: xác định vertreex và các chức năng mảnh vỡ là con trỏ hàm, cho phép vẽ linh hoạt mà không cần phục hồi lại.

Tài nguyên và việc đọc thêm

Để hiểu sâu hơn, hãy khám phá những văn bản cổ điển và những hướng dẫn trực tuyến đã truyền cảm hứng cho động cơ này:

  • Scratcha ) – Trong-dipth giải thích của theo dấu tia, rasterization và toán học.
  • Luearn mở trangGL ) – Hiện đại giáo sư OpenGL; bắt đầu với chương “Xin chào tam giác.
  • Đại diện 3D – Các phép toán chính thức đằng sau góc nhìn và ma trận hình ảnh.

Xây dựng một động cơ 3D ở C là một nghi thức chuyển đổi cho lập trình viên đồ họa. Nó không chỉ dạy bạn cách viết mã hiệu quả mà còn dạy cách suy nghĩ trong ba chiều và cấu trúc hiệu suất nghiêm trọng. Bắt đầu với một khối quay, sau đó thêm nhiều hình tam giác, kết cấu, và cuối cùng đưa nó cho GPU. Hành trình từ C đến một động cơ hoạt động hoàn toàn chức năng tiết lộ ma thuật đằng sau mỗi điểm ảnh trên màn hình.