Để giải trí, tôi đang cố gắng tạo một trình xem khung dây cho DCPU-16 . Tôi hiểu làm thế nào để làm mọi thứ ngoại trừ làm thế nào để ẩn các dòng được ẩn trong khung dây. Tất cả các câu hỏi ở đây trên SO đều cho rằng bạn có quyền truy cập OpenGL, tiếc là tôi không có quyền truy cập vào bất cứ điều gì tương tự như vậy đối với DCPU-16 (hoặc bất kỳ loại tăng tốc phần cứng nào).
Tôi tìm thấy một mô tả khá tốt về thuật toán của Appel trên Google Sách . Tuy nhiên, có một vấn đề tôi đang gặp khó khăn để tìm ra.
Appel xác định đường đồng mức là một cạnh được chia sẻ bởi đa giác mặt trước và mặt sau hoặc cạnh không chia sẻ của đa giác mặt trước không phải là một phần của khối đa diện kín. Một cạnh được chia sẻ bởi hai đa giác phía trước không gây ra thay đổi về tầm nhìn và do đó không phải là một đường viền. Trong hình 8.4, các cạnh AB, EF, PC, GK và CH là các đường đồng mức, trong khi các cạnh ED, DC và GI thì không.
Tôi hiểu các quy tắc của thuật toán và cách nó hoạt động khi bạn có các đường đồng mức của mình, tuy nhiên tôi không hiểu là tôi cần làm gì để xác định xem một cạnh có được " chia sẻ bởi một đa giác mặt trước và mặt sau hay không cạnh không chia sẻ của một đa giác đối diện phía trước không phải là một phần của đa diện khép kín "theo quan điểm mã hóa. Tôi có thể nhìn vào một hình dạng và tôi có thể biết những dòng nào là các đường đồng mức trong đầu nhưng tôi không biết cách chuyển "sự hiểu biết" đó sang một thuật toán được mã hóa.
Cập nhật
Tôi đã thực hiện một số tiến bộ trong việc xác định đường viền. Tôi tìm thấy những hai bài giảng từ Đại học Buffalo lớp trên đồ họa máy tính.
Hãy xem xét các cạnh. Những điều này rơi vào ba loại.
- Một cạnh nối hai mặt vô hình là chính nó vô hình. Điều này sẽ bị xóa khỏi danh sách và bỏ qua.
- Một cạnh nối hai mặt có khả năng nhìn thấy được gọi là 'cạnh vật liệu' và sẽ yêu cầu xử lý thêm.
- Một cạnh nối một mặt có khả năng nhìn thấy và một mặt vô hình là trường hợp đặc biệt của 'cạnh vật chất' và còn được gọi là 'cạnh đường viền'.
Sử dụng hai thông tin trên tôi có thể tiến gần hơn để có thể viết nó ra dưới dạng mã, nhưng tôi vẫn còn một chặng đường dài để đi.