Làm thế nào để đạt được kết quả chính xác với thuật toán của Họa sĩ?


14

Cách đây một lúc, tôi hỏi làm thế nào để xác định khi nào một khuôn mặt chồng lên nhau. Lời khuyên là sử dụng bộ đệm Z.

Tuy nhiên, tôi không thể sử dụng bộ đệm Z trong dự án hiện tại của mình và do đó tôi muốn sử dụng thuật toán của Họa sĩ. Mặc dù vậy, tôi không có manh mối tốt khi một bề mặt ở phía sau hoặc phía trước mặt khác. Tôi đã thử rất nhiều phương pháp nhưng tất cả đều thất bại trong các trường hợp cạnh hoặc chúng thất bại ngay cả trong các trường hợp chung.

Đây là danh sách các phương pháp sắp xếp mà tôi đã thử từ trước đến nay:

  • Khoảng cách đến điểm giữa của mỗi khuôn mặt
  • Khoảng cách trung bình đến từng đỉnh của mỗi mặt
  • Giá trị z trung bình của mỗi đỉnh
  • Giá trị z đỉnh nhất của mỗi mặt và vẽ những đỉnh đầu tiên
  • Giá trị z thấp nhất của các đỉnh của mỗi mặt và vẽ các đỉnh cuối cùng

Vấn đề là một khuôn mặt có thể có khoảng cách gần hơn nhưng vẫn ở xa hơn. Tất cả những phương pháp này dường như không đáng tin cậy.

Chỉnh sửa: Ví dụ, trong hình ảnh sau, bề mặt có điểm màu xanh lam là điểm giữa được vẽ trên bề mặt với điểm màu đỏ là điểm giữa, vì điểm màu xanh gần hơn. Tuy nhiên, điều này là do bề mặt của điểm đỏ lớn hơn và điểm giữa ở xa hơn. Bề mặt với điểm màu đỏ nên được sơn lên trên màu xanh lam, bởi vì nó gần hơn , trong khi khoảng cách giữa điểm thì ngược lại.

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

Chính xác những gì được sử dụng trong thuật toán của Họa sĩ để xác định thứ tự các đối tượng nên được vẽ?


1
Các thuật toán họa sĩ chỉ được rút ra từ sau ra trước.
Jonathan Connell

1
@ 3nixios: Vâng, rõ ràng, nhưng bằng cách nào tôi có thể xác định thứ tự 'quay lại phía trước'?
pimvdb

1
Tất cả các đối tượng, hình tam giác hoặc đỉnh của bạn sẽ cách máy ảnh một khoảng cách nhất định khi bạn bắt đầu vẽ. Việc thực hiện thuật toán cơ bản (bạn đã thành công chưa?) Sẽ là xác định khoảng cách này từ máy ảnh cho mỗi tam giác và vẽ chúng theo thứ tự xa nhất đến gần nhất. Khi đã xong, bạn cần bắt đầu tìm kiếm các giao lộ và cắt các hình tam giác của bạn, đó là một trò chơi bóng hoàn toàn khác . Tại sao bạn không thể sử dụng Z-Buffer? : P
Jonathan Connell

@ 3nixios: Bạn hoàn toàn chính xác, nhưng vấn đề tôi gặp phải là tính khoảng cách. Như tôi đã nói, tôi đã thử một số phương pháp khoảng cách nhưng tất cả chúng đều không hoàn hảo. Thứ tự này là kết quả của việc sắp xếp khoảng cách điểm giữa: i.imgur.com/AcfCm.png .
pimvdb

1
Có phải tất cả các đa giác của bạn trên một lưới thông thường như vậy? Nếu vậy có thể có những điều cụ thể lưới bạn có thể làm để cải thiện điều này.
CiscoIPPhone

Câu trả lời:


14

Thông thường khoảng cách của điểm giữa của đa giác với máy ảnh đang được sử dụng để sắp xếp z. Thuật toán của họa sĩ không thể chính xác 100% bởi bản chất của nó. Sẽ luôn có trường hợp sắp xếp sẽ thất bại, bất kể bạn sử dụng điểm tham chiếu nào.

Nếu bạn muốn sắp xếp z chính xác với thuật toán của họa sĩ, bạn sẽ phải cắt các đa giác chồng chéo thành các phần nhỏ hơn (ví dụ: bằng cách sử dụng một cây tứ giác) và sắp xếp các phần này riêng lẻ. Điều này có thể trở nên khá nặng nề trên CPU mặc dù ..

Tìm thấy tệp Powerpoint này minh họa vấn đề độc đáo ( Phiên bản PDF ).


Cảm ơn vì Powerpoint đó, nó đã giúp tôi giải quyết vấn đề.
pimvdb

Liên kết bị hỏng. Bất cứ ai có thể tìm thấy một bản sao?
Keavon

1
@Keavon Đã chỉnh sửa. Tôi tìm thấy một liên kết làm việc cho các tập tin.
bummzack

1

Trong những trường hợp như vậy đối với tôi, nó luôn hoạt động bằng cách sử dụng cây bsp. Tách cảnh cho đến khi bạn có tập hợp đa giác trong nút bsp-tree và sau đó bạn có thể dễ dàng sắp xếp các đa giác trong các nút. Lưu ý rằng bằng cách sắp xếp các đa giác từ nút cây bsp, nó có vẻ giống như vấn đề như bạn đã mô tả ở trên, nhưng có một điều kiện không quá rõ ràng - sau khi xây dựng cây bsp-cây, tất cả các trường hợp có vấn đề đã được giải quyết - trong nút bạn nên kết thúc với tập hợp đa giác mà phép kiểm tra độ lồi phải vượt qua - nếu bạn chọn một mặt phẳng từ một đa giác từ tập hợp này, tất cả các đa giác còn lại đều ở phía trước mặt phẳng hoặc phía sau mặt phẳng. Sử dụng thông tin đó giúp cho việc sắp xếp dễ dàng - functor sắp xếp mất 2 đa giác - kiểm tra xem nửa không gian là đa giác thứ 1 so với đa giác thứ 2 và cũng kiểm tra vị trí của máy ảnh so với đa giác thứ hai.

Cũng lưu ý rằng các thử nghiệm để xác định phía của vị trí máy ảnh chống lại đa giác và di chuyển ngang của cây bsp hơi khác nhau khi xử lý hình chiếu chính tả và phối cảnh.

Nếu bạn không đủ khả năng chia các đa giác đầu vào, tôi nghĩ bạn đã hết may mắn.

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.