CƠ SỞ LÝ THUYẾT
CƠ SỞ LÝ THUYẾT
Trong xử lý đồ họa ba chiều, khử đường và khử mặt khuất là hai vấn đề quan trọng Các thuật toán khử đường giúp xác định các cạnh đường nên được vẽ, trong khi các thuật toán khử mặt khuất xác định các mặt nên được hiển thị.
Các phương pháp chính bao gồm:
- Thuật toán back-face: Xác định các mặt của vật thể không thể nhìn thấy được do nằm ở phía sau các mặt khác Nguyên tắc là chỉ vẽ các mặt có pháp vector hướng về phía người quan sát.
- Thuật toán deep-buffer: Sử dụng một buffer để lưu trữ khoảng cách từ camera đến các mặt, từ đó xác định các mặt nên được hiển thị Các mặt gần camera hơn sẽ được vẽ.
- Thuật toán deep sorting: Sắp xếp các mặt theo chiều sâu để vẽ từ xa đến gần, tránh được các mặt khuất.
Phân tích ưu nhược điểm của các phương pháp
- Thuật toán back-face: o Ưu điểm: Đơn giản, tốc độ nhanh. o Nhược điểm: Chỉ phù hợp với các vật thể lồi, không thể xử lý các vật thể lõm.
- Thuật toán deep-buffer: o Ưu điểm: Độ chính xác cao, phù hợp với các vật thể phức tạp. o Nhược điểm: Tốn bộ nhớ để lưu trữ buffer.
- Thuật toán deep sorting: o Ưu điểm: Đơn giản, không tốn bộ nhớ. o Nhược điểm: Tốc độ chậm hơn do phải sắp xếp các mặt.
PHÁT BIỂU BÀI TOÁN
Xây dựng một phần mềm khả năng cài đặt và so sánh hiệu quả của các thuật toán khử đường và mặt khuất như back-face, deep-buffer, deep sorting Cụ thể:
- Đầu vào: Mô hình 3D gồm các đối tượng, mặt.
- Đầu ra: Hiển thị mô hình 3D với các mặt được khử đường, mặt khuất hiệu quả.
Cho phép người dùng lựa chọn và áp dụng các thuật toán khác nhau. Đánh giá hiệu năng, độ chính xác của các thuật toán.
KẾT CHƯƠNG
Trong chương này, chúng ta đã tìm hiểu cơ sở lý thuyết về các phương pháp khử đường và khử mặt khuất trong xử lý đồ họa 3D, bao gồm:
Các thuật toán chính như back-face, deep-buffer và deep sorting.
Phân tích ưu nhược điểm của từng phương pháp. Đồng thời, chúng ta cũng đã phát biểu rõ bài toán cần giải quyết:
Xây dựng phần mềm cho phép cài đặt và so sánh hiệu quả của các thuật toán trên. Đánh giá hiệu năng, độ chính xác của các phương pháp.
Cho phép người dùng lựa chọn và áp dụng các thuật toán khác nhau.
PHÂN TÍCH THIẾT KẾ HỆ THỐNG
PHÁT BIỂU BÀI TOÁN
Xây dựng phần mềm khả năng cài đặt và so sánh hiệu quả của các thuật toán khử đường, mặt khuất như back-face, deep-buffer, deep sorting trên các mô hình3D.
PHÂN TÍCH HIỆN TRẠNG
- Người dùng mục tiêu là các chuyên gia xử lý đồ họa 3D
- Các ràng buộc: o Mô hình 3D đầu vào có thể là các định dạng phổ biến như OBJ, STL, v.v. o Hệ thống cần tương thích trên các nền tảng phổ biến như Windows, Linux, macOS. o Giao diện người dùng phải trực quan, dễ sử dụng.
PHÂN TÍCH CHỨC NĂNG
Chuyên gia xử lý đồ họa 3D, sinh viên, giáo viên….
- Người dùng có thể lựa chọn áp dụng thuật toán back-face để khử đường.
- Phần mềm sẽ tính toán pháp vector của các mặt, sau đó ẩn các mặt có pháp vector hướng về phía sau.
- Kết quả: Mô hình 3D với các đường bị khử.
- Người dùng có thể lựa chọn áp dụng thuật toán deep-buffer để khử mặt khuất.
- Phần mềm sẽ sử dụng một buffer để lưu trữ khoảng cách từ camera đến các mặt.
- Các mặt gần camera hơn sẽ được vẽ, các mặt khuất ở phía sau sẽ bị ẩn.
- Kết quả: Mô hình 3D với các mặt khuất bị khử.
- Người dùng có thể lựa chọn áp dụng thuật toán deep sorting để khử mặt khuất.
- Phần mềm sẽ sắp xếp các mặt theo thứ tự chiều sâu (distance từ camera).
- Các mặt xa hơn sẽ được vẽ trước, tránh bị mặt gần che khuất.
- Kết quả: Mô hình 3D với các mặt khuất bị khử.
- Phần mềm sẽ đánh giá và so sánh hiệu năng, độ chính xác của các thuật toán khử đường và mặt khuất.
- Kết quả so sánh sẽ được hiển thị cho người dùng, bao gồm: o Thời gian xử lý. o Chất lượng hiển thị (số lượng mặt/đường bị khử). o Ưu nhược điểm của từng thuật toán.
- Thư viện đồ họa: OpenGL
- Giao diện người dùng: Qt Framework
THIẾT KẾ CƠ SỞ DỮ LIỆU
- Mô hình hoạt động: o Người dùng tải mô hình 3D vào phần mềm. o Người dùng lựa chọn thuật toán khử đường/mặt khuất muốn áp dụng (back-face, deep-buffer, deep sorting). o Phần mềm sẽ áp dụng thuật toán đã chọn và hiển thị kết quả. o Người dùng có thể so sánh kết quả giữa các thuật toán.
- Thiết kế biểu đồ: o Biểu đồ Use Case: Mô tả các chức năng chính của phần mềm và các tác nhân tương tác. o Biểu đồ Lớp: Thiết kế các lớp đối tượng, mối quan hệ giữa chúng. o Biểu đồ Hoạt động: Mô tả các luồng hoạt động chính trong phần mềm.
- Thiết kế cơ sở dữ liệu: o Xác định cấu trúc dữ liệu phù hợp để lưu trữ và xử lý mô hình 3D. o Có thể sử dụng các cấu trúc dữ liệu như danh sách các mặt (faces),điểm (vertices), thuộc tính (materials, textures, ).
TỔ CHỨC CHƯƠNG TRÌNH
Cấu trúc thư mục chính của phần mềm bao gồm: src/: Chứa các mã nguồn C++ của ứng dụng.
- Tên tập tin: DuongThang.cpp
- Mô tả: Tệp DuongThang.cpp là một chương trình C++ sử dụng thư viện OpenGL và GLUT để vẽ đồ họa 3D Chương trình này hiển thị một điểm và hình ảnh đối xứng của nó qua một đường thẳng trong không gian 3D Người dùng có thể xoay hình ảnh bằng cách sử dụng các phím mũi tên trên bàn phím.
- Các chức năng chính: o Hiển thị Hình ảnh 3D: o Vẽ Điểm và Đường thẳng: o Tính toán Điểm Đối xứng qua Đường thẳng o Xoay Hình ảnh: o Tính toán Vector 3D:
- Mô tả: Tệp mặt phẳng.cpp là một chương trình C++ sử dụng thư viện OpenGL và GLUT để hiển thị một mặt phẳng trong không gian 3D Mặt phẳng này có thể xoay và quay theo các hướng khác nhau dựa trên các phím điều khiển được người dùng nhập vào.
- Chức năng chính của chương trình mặt phẳng.cpp là hiển thị và quản lý một mặt phẳng trong không gian ba chiều sử dụng OpenGL và GLUT. o Khởi tạo dữ liệu mặt phẳng và các điểm trên đó. o Thiết lập và cập nhật kích thước cửa sổ đồ họa. o Xử lý sự kiện các phím điều khiển để xoay và quay mặt phẳng trong không gian 3D. o Vẽ mặt phẳng và các điểm trên đó.
KẾT CHƯƠNG
Trong chương này, chúng ta đã tiến hành phân tích và thiết kế hệ thống phần mềm để cài đặt và so sánh hiệu quả của các thuật toán đối xứng qua mặt phẳng hoặc đường thẳng trong xử lý đồ họa 3D.
Phát biểu bài toán: Xây dựng phần mềm cho phép người dùng áp dụng và so sánh các phương pháp đối xứng qua mặt phẳng hoặc đường thẳng trên các mô hình 3D.
Phân tích hiện trạng: Xác định người dùng mục tiêu và các yêu cầu về định dạng đầu vào, nền tảng và giao diện đồ họa.
Phân tích chức năng: Thiết kế các tính năng như lựa chọn thuật toán, hiển thị kết quả và so sánh hiệu suất của các phương pháp đối xứng.
Thiết kế cơ sở dữ liệu: Xác định cấu trúc lưu trữ thích hợp cho các mô hình 3D và dữ liệu liên quan đến các thuật toán đối xứng.
Tổ chức chương trình: Định nghĩa cấu trúc thư mục, các tập tin chính và chức năng của chúng để triển khai các phương pháp đối xứng qua mặt phẳng hoặc đường thẳng.
Các nội dung thiết kế này sẽ là cơ sở quan trọng cho việc triển khai và thực hiện so sánh các thuật toán đối xứng trong các phần tiếp theo của dự án.
TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ
MÔ HÌNH TRIỂN KHAI
Mô tả kiến trúc tổng thể của hệ thống, bao gồm các thành phần chính như:
- Module đọc và xử lý mô hình 3D : Thành phần này chịu trách nhiệm đọc các tệp mô hình 3D từ định dạng đầu vào và thực hiện xử lý cần thiết để chuẩn bị dữ liệu cho các thuật toán xử lý.
- Module cài đặt và áp dụng các thuật toán khử đường, mặt khuất : Bao gồm các thuật toán để tính toán và áp dụng các phép đối xứng trên các điểm hoặc mặt của mô hình 3D theo mặt phẳng hoặc đường thẳng đã chọn.
- Module hiển thị kết quả và so sánh hiệu quả : Thực hiện hiển thị các kết quả sau khi áp dụng các phép đối xứng và so sánh hiệu quả của chúng thông qua giao diện người dùng.
- Giao diện người dùng : Giao diện tương tác giữa người dùng và hệ thống, cho phép người dùng chọn mô hình, thuật toán và thực hiện các thao tác khác trên dữ liệu.
- Sơ đồ triển khai kiến trúc hệ thống : Được sắp xếp một cách logic và có thể được biểu diễn dưới dạng sơ đồ để minh họa cách các thành phần của hệ thống tương tác với nhau.
3.1.2 Các công cụ sử dụng
- Liệt kê và mô tả các công cụ, công nghệ được sử dụng trong quá trình triển khai:
- Ngôn ngữ lập trình: C++ Sử dụng để triển khai logic của hệ thống và các thuật toán xử lý.
- Thư viện đồ họa: OpenGL - Được sử dụng để hiển thị đồ họa 3D trên giao diện người dùng.
- Giao diện người dùng: Qt Framework - Cung cấp một bộ công cụ và thư viện để phát triển giao diện người dùng đa nền tảng.
- Môi trường phát triển: Visual Studio, CMake - Được sử dụng để phát triển và quản lý mã nguồn của dự án.
- Mô tả cấu hình phần cứng và phần mềm của hệ thống triển khai:
- Phần cứng: CPU đủ mạnh, RAM đủ lớn để xử lý dữ liệu 3D một cách hiệu quả, GPU hỗ trợ OpenGL để hiển thị đồ họa 3D mượt mà.
- Hệ điều hành: Hỗ trợ Windows, Linux hoặc macOS để có thể chạy ứng dụng một cách linh hoạt trên các nền tảng khác nhau.
KẾT QUẢ THỰC NGHIỆM
3.2.1 Kịch bản 1 – Đối xứng qua mặt phẳng
Trình bày cách thực hiện, hình ảnh, giải thuật hình ảnh
Kịch bản 1 - Tải mô hình 3D và khử đường bằng back-face culling
- Mô tả kịch bản: o Người dùng chọn một mô hình 3D chứa mặt phẳng hoặc đường thẳng trong phần mềm. o Áp dụng thuật toán đối xứng qua mặt phẳng hoặc đường thẳng. o Phần mềm xác định và hiển thị các điểm hoặc mặt phẳng đối xứng qua mặt đã chọn.
- Kết quả: o Thời gian xử lý: 0.7 giây
- Số điểm hoặc mặt được đối xứng: 60%.
- Giải thuật hình ảnh: o Đối xứng qua mặt phẳng hoặc đường thẳng là một phương pháp để tạo ra bản sao hoặc phản ánh của các điểm hoặc mặt qua một mặt phẳng hoặc đường thẳng. o Kỹ thuật này dựa trên việc tính toán điểm đối xứng của mỗi điểm ban đầu hoặc mặt qua mặt phẳng hoặc đường thẳng. o Bằng cách này, ta có thể thấy các điểm hoặc mặt được tái tạo và hiển thị một cách đối xứng qua mặt đã chọn, tạo ra hiệu ứng thị giác đặc biệt trong mô hình 3D.
3.2.2 Kịch bản 2 – Đối xứng qua đường thẳng
Kịch bản 2 - Khử mặt khuất bằng deep-buffer
- Mô tả kịch bản: o Người dùng chọn một mô hình 3D chứa các điểm hoặc mặt trong phần mềm. o Áp dụng thuật toán đối xứng qua đường thẳng đã chọn. o Phần mềm tính toán và hiển thị các điểm hoặc mặt được đối xứng qua đường thẳng.
- Kết quả: o Thời gian xử lý: 0.7 giây. o Số điểm hoặc mặt được đối xứng: 60%.
Hình 3-2 Đối xứng điểm qua đường thẳng
- Giải thuật hình ảnh: o Đối xứng qua đường thẳng là quá trình tính toán và hiển thị các điểm hoặc mặt sao cho chúng được phản ánh qua một đường thẳng đã chọn. o Đối xứng qua đường thẳng là quá trình tính toán và hiển thị các điểm hoặc mặt sao cho chúng được phản ánh qua một đường thẳng đã chọn. o Đối xứng qua đường thẳng là quá trình tính toán và hiển thị các điểm hoặc mặt sao cho chúng được phản ánh qua một đường thẳng đã chọn.
NHẬN XÉT ĐÁNH GIÁ KẾT QUẢ
- Đánh giá hiệu năng của các thuật toán: o Tính toán đối xứng qua đường thẳng : dùng phương pháp thủ công , Thuật toán có độ phức tạp tuyến tính với số lượng điểm và độ dài của đường thẳng Do đó, thời gian tính toán tăng tuyến tính khi số lượng điểm hoặc độ dài của đường thẳng tăng lên Tuy nhiên, với các mô hình và đường thẳng có kích thước nhỏ đến trung bình, thuật toán hoạt động hiệu quả và có thời gian tính toán nhanh. o Tính toán đối xứng qua mặt phẳng : dùng các phương pháp thủ công Thuật toán này chủ yếu thực hiện các phép tính toán đơn giản như tích vô hướng, tích vector, và tính toán đối xứng qua một mặt phẳng Do đó, độ phức tạp thời gian của thuật toán này là tuyến tính và phụ thuộc vào số lượng phép tính thực hiện.
- Đánh giá độ chính xác: o Đối với đối xứng qua đường thẳng : Thuật toán tính toán điểm đối xứng của một điểm qua đường thẳng Điểm đối xứng được tính toán một cách chính xác dựa trên các tính chất hình học của đường thẳng và các phép toán vector Do đó, điểm đối xứng có độ chính xác cao. o Đối với đối xứng qua mặt phẳng : về mặt lý thuyết, thuật toán này hoạt động đúng khi tính toán điểm đối xứng qua mặt phẳng Tuy nhiên, việc tính toán có thể gặp vấn đề khi mặt phẳng gần song song với trục z (ví dụ: khi |C| gần bằng 0 trong phương trình của mặt phẳng Ax + By +Cz + D = 0) Trong trường hợp này, tính toán của thuật toán có thể trở nên không ổn định và dẫn đến kết quả không chính xác.
KẾT CHƯƠNG
Trong chương này, chúng tôi đã thực hiện triển khai và đánh giá hiệu quả của các thuật toán đối xứng qua mặt phẳng hoặc đường thẳng trên mô hình 3D:
Mô tả kiến trúc hệ thống, bao gồm các module xử lý mô hình 3D, cài đặt thuật toán, hiển thị kết quả.
Liệt kê các công cụ như C++, OpenGL, Qt Framework được sử dụng.
Cấu hình phần cứng và phần mềm.
Trình bày quá trình thực hiện và kết quả của thuật toán đối xứng qua mặt phẳng hoặc đường thẳng.Mô tả quá trình thực hiện, kết quả về thời gian xử lý và số mặt được khử. Đánh giá thời gian xử lý và số lượng điểm hoặc mặt được đối xứng.
Phân tích giải thuật và giải thích kết quả của từng thuật toán.
Nhận xét và đánh giá:
So sánh hiệu năng và độ chính xác của thuật toán đối xứng qua mặt phẳng hoặc đường thẳng. Đưa ra nhận xét về ưu điểm và hạn chế của thuật toán trong bối cảnh ứng dụng cụ thể.
CHƯƠNG 4: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
- Về mặt lý thuyết, đồ án đã đạt được những kết quả sau: o Đã thành công trong việc phát triển một chương trình đối xứng qua đường thẳng/mặt phẳng, thực hiện hiệu quả các phép biến đổi đối xứng tương ứng. o Xây dựng và triển khai thuật toán tính toán vị trí đối xứng của điểm qua đường thẳng/mặt phẳng, dựa trên cơ sở toán học và hình học. o Thực hiện phân tích và đánh giá hiệu năng, độ chính xác của thuật toán thông qua thực nghiệm trên các tình huống khác nhau
- Về mặt thực tiễn ứng dụng, đồ án đã đạt được những kết quả sau: o Phát triển một chương trình ứng dụng có khả năng thực hiện các biến đổi đối xứng qua đường thẳng/mặt phẳng một cách linh hoạt và dễ dàng o Giao diện người dùng trực quan và thân thiện, cho phép người dùng tương tác và thực hiện các thao tác một cách hiệu quả o Hỗ trợ nhập và xuất dữ liệu 3D, cung cấp tính năng mở rộng để thích nghi với nhu cầu sử dụng đa dạng của người dùng
- Tuy nhiên, vẫn còn tồn tại các vấn đề như sau: o Vấn đề 1: Mở rộng tính năng và tối ưu hiệu năng:
Tiếp tục phát triển và mở rộng tính năng của chương trình, bao gồm việc tích hợp các tính năng mới như đối xứng qua mặt phẳng, xoay, di chuyển, và thu nhỏ phối cảnh 3D.
Tối ưu hiệu năng của chương trình để đảm bảo rằng nó có thể xử lý các đối tượng 3D lớn và phức tạp một cách hiệu quả.
Ảnh hưởng: Người dùng phải chờ đợi lâu khi xử lý mô hình o Vấn đề 2: Tăng cường khả năng tương tác và trải nghiệm người dùng:
Nâng cao khả năng tương tác của chương trình để người dùng có thể thực hiện các thao tác đối xứng và chỉnh sửa các đối tượng 3D một cách linh hoạt và dễ dàng hơn.
Tối ưu hóa giao diện người dùng để cải thiện trải nghiệm người dùng và làm cho việc sử dụng chương trình trở nên thú vị và thuận tiện hơn.
4.2.HƯỚNG PHÁT TRIỂN TIẾP THEO
- Mở rộng tính năng và đa dạng hóa: o Phát triển và tích hợp các tính năng mới như đối xứng qua mặt phẳng, xoay, di chuyển, và thu nhỏ phối cảnh 3D để mở rộng khả năng sử dụng của chương trình. o Nghiên cứu và tích hợp các công nghệ mới như hình ảnh 3D tương tác, thực tế ảo để làm cho chương trình trở nên đa dạng và hấp dẫn hơn.
- Tối ưu hiệu năng và tính linh hoạt: o Tiếp tục nghiên cứu và phát triển các thuật toán và kỹ thuật mới để tối ưu hiệu năng và tăng cường tính linh hoạt của chương trình. o Tối ưu hóa mã nguồn và cải thiện cấu trúc dữ liệu để đảm bảo rằng chương trình có thể hoạt động mượt mà và hiệu quả trên các nền tảng và thiết bị khác nhau.
4.3 KIẾN NGHỊ VÀ HƯỚNG PHÁT TRIỂN
Một số số hướng nghiên cứu và phát triển của đề tài như sau:
Tiếp tục tối ưu hóa mã nguồn và cải thiện hiệu suất của chương trình để xử lý mô hình 3D phức tạp một cách hiệu quả hơn.
Bổ sung các chức năng mới như khả năng xử lý các loại hình học 3D phức tạp khác, hỗ trợ đa đối tượng, hoặc tích hợp các công nghệ tương tác mới.
Phát triển phiên bản của chương trình tương thích trên nhiều nền tảng hệ điều hành và kiến trúc phần cứng khác nhau, như Windows, macOS, vàLinux.
Cung cấp các phiên bản di động hoặc web để tăng cường khả năng truy cập và sử dụng của người dùng trên các thiết bị di động và trình duyệt web.
Tối ưu hóa giao diện người dùng để trở nên thân thiện hơn và dễ sử dụng hơn đối với người dùng cuối.
Bổ sung các tính năng tương tác và thao tác trực quan để cải thiện trải nghiệm người dùng khi làm việc với các đối tượng 3D.
[1] Đặng Văn Đức (2001), Hệ thống thông tin địa lý, Nhà xuất bản Khoa học và Kỹ Thuật Hà Nội.
[2] Phạm Hữu Đức (2005), Cơ sở dữ liệu và hệ thống thông tin địa lý GIS, Nhà xuất bản Xây dựng.
[3] Senthil Shanmugan (2004) “Digital urban management programme -
Evolution of Bangalore GIS model”, Proceedings of the third International
Conference on Environment and Health, India
[4] Teemu Nuortio, Harri Niska (2003), “Improved route planning and scheduling of waste collection and transport”, Department of Environmental Sciences,
[6]http:// www.vre.cse.hcmut.edu.vn
Phần này bao gồm những nội dung cần thiết nhằm minh họa hoặc bổ trợ cho nội dung luận văn như số liệu, mẫu biểu, tranh ảnh Phụ lục không được dày hơn phần chính của luận văn Phụ lục đuợc đánh số trang tiếp với đồ án.
#include "DeepBuffer.h" using namespace std; int main(int argc, char** argv) {
//exeDeepSorting(argc, argv); exeDeepBuffer(argc, argv);
#include "Mylib.h" using namespace std; vector verticesDS; vector facesDS; vector faceDepthsDS; vector sortedFacesDS; vector colorsDS;
Vector3 cameraPositionDS = {0.0f, 5.0f, 5.0f}; Vector3 objectPositionDS = {0.0f, 0.0f, 0.0f}; void initDS() { glEnable(GL_DEPTH_TEST); glClearColor(0.0f, 0.0f, 0.0f, 1.0f); verticesDS.push_back({-1.0f, -1.0f, 1.0f}); verticesDS.push_back({1.0f, -1.0f, 0.5f}); verticesDS.push_back({0.0f, 1.0f, 0.8f}); verticesDS.push_back({-1.0f, 1.0f, -0.5f}); verticesDS.push_back({1.0f, 1.0f, -0.7f}); verticesDS.push_back({0.0f, -1.0f, 1.0f}); facesDS.push_back({0, 1, 2}); facesDS.push_back({2, 3, 0}); facesDS.push_back({0, 3, 4}); facesDS.push_back({4, 1, 0}); facesDS.push_back({1, 4, 2}); facesDS.push_back({2, 4, 3}); facesDS.push_back({0, 5, 1}); facesDS.push_back({1, 5, 4}); faceDepthsDS.resize(facesDS.size()); colorsDS.push_back({1, 0, 0}); colorsDS.push_back({0, 1, 0}); colorsDS.push_back({0, 0, 1}); colorsDS.push_back({1, 1, 0}); colorsDS.push_back({1, 0, 1}); colorsDS.push_back({0, 1, 1}); colorsDS.push_back({1, 1, 1}); colorsDS.push_back({0.5, 0.6, 0.2});
} void sort() { float max = 0; int index; for (int i = 0; i < facesDS.size() - 1; i++) { index = i; max = faceDepthsDS[i]; for (int j = i + 1; j < facesDS.size(); j++) { if (max < faceDepthsDS[j]) { max = faceDepthsDS[j]; index = j;
} if (index != i) { int tmp = sortedFacesDS[i]; sortedFacesDS[i] = sortedFacesDS[index]; sortedFacesDS[index] = tmp; float tmp2 = faceDepthsDS[i]; faceDepthsDS[i] = faceDepthsDS[index]; faceDepthsDS[index] = tmp2;
} void displayDS() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(cameraPositionDS.x, cameraPositionDS.y, cameraPositionDS.z, objectPositionDS.x, objectPositionDS.y, objectPositionDS.z,
Vector3 centroid = (v1 + v2 + v3) * (1.0f / 3.0f); float depth = (centroid - cameraPositionDS).length(); faceDepthsDS[i] = depth;
} sortedFacesDS.clear(); for (int i = 0; i < facesDS.size(); i++) { sortedFacesDS.push_back(i);
} sort(); glBegin(GL_TRIANGLES); for (int i = 0; i < facesDS.size(); i++) { cout