Cách tìm các đường đồng mức cho Thuật toán xóa dòng ẩn của Appel


10

Để 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.

Hình 8.4

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.

nhập mô tả hình ảnh ở đây

Hãy xem xét các cạnh. Những điều này rơi vào ba loại.

  1. 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.
  2. 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.
  3. 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.



1
Kiểm tra câu trả lời này về tính toán bình thường của tam giác. Chấm sản phẩm của vectơ bình thường với vectơ tầm nhìn xác định nếu một hình tam giác ở phía trước.

Câu trả lời:


3

Để giữ quy tắc "-faces", bạn phải đảm bảo rằng tất cả các mặt được định hướng đúng. Ví dụ, sử dụng quy tắc bàn tay phải, điều đó có nghĩa là các đỉnh của một mặt phải được đánh số theo cách sao cho một phép quay dương trong mặt phẳng tương ứng với một điểm bình thường bên ngoài khối đa diện. (Hiểu chưa?) Hoặc đơn giản hơn, mọi khuôn mặt đều phải đi kèm với hướng ra ngoài bình thường.

Các mặt lủng lẳng, tức là không thuộc một khối đa diện kín có thể được xem là có định hướng không xác định.

Bây giờ tính toán các phần của một cạnh được ẩn bởi đa giác đường viền là khóa học chính. Vấn đề này rất gần với việc cắt một đoạn đường bằng một cửa sổ đa giác trong 2D. Trước tiên hãy xem xét đường hỗ trợ của đoạn đường và tìm giao điểm với đa giác. Bằng cách sử dụng quy tắc chẵn lẻ, bạn có thể dễ dàng xác định các phần bên trong và bên ngoài đa giác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.