Tạo khối tối ưu cho các đối tượng 2D có độ trong suốt


7

Tôi có một bộ sưu tập các đối tượng 2d với độ trong suốt. Mỗi đối tượng có một giá trị độ sâu để xác định thứ tự vẽ và vật liệu. Tôi đang cố gắng xử lý chúng theo cách tối ưu để giảm thiểu các cuộc gọi rút thăm. Giả sử rằng các đối tượng có cùng vật liệu có thể được gộp lại với nhau trong một lệnh rút thăm duy nhất.

Một cách sắp xếp ngây thơ là sắp xếp tất cả các đối tượng theo độ sâu trước, sau đó sắp xếp theo vật liệu nếu các giá trị độ sâu là như nhau. Hãy xem xét tập hợp các đối tượng sau với 'z' đại diện cho độ sâu và màu sắc của đối tượng thể hiện vật liệu của nó. Trong tập hợp bên phải, các đối tượng màu xanh đã được dịch dọc theo x sao cho chúng không trùng với màu đỏ.

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

Sắp xếp theo [độ sâu, vật liệu] dẫn đến danh sách đối tượng được sắp xếp: {Red, Blue, Red, Blue} cho cả bộ đối tượng bên trái và bên phải. Hoặc trái hoặc phải sẽ dẫn đến 4 cuộc gọi rút thăm (các đối tượng của cùng một vật liệu cần được liền kề trong danh sách được sắp xếp để được bó)

Tuy nhiên, nếu bạn nhìn vào các đối tượng bên phải, rõ ràng bạn có thể sử dụng hai cuộc gọi rút thăm vì không có sự trùng lặp. Thứ tự dựa trên độ sâu không thành vấn đề nếu các đối tượng màu xanh và đỏ không trùng nhau giữa phạm vi độ sâu của một lô nhất định. Điều này cũng đúng nếu bạn có một đối tượng màu đỏ với (z> 4) hoặc (z <2) ở bất cứ đâu trong tập hợp bên phải.

Vì vậy, giả sử mỗi đối tượng có một vật liệu có thể so sánh, giá trị độ sâu và hộp giới hạn (giả sử mỗi đối tượng là một tứ giác được căn chỉnh theo trục), cách hiệu quả để có được danh sách các đối tượng vẽ với cả hai thứ tự chính xác cho sự minh bạch và các nhóm tối ưu dựa trên vật liệu?

Ngoài ra, chỉ cần lưu ý, tôi không có hỗ trợ ngay lập tức vì vậy đó không phải là một lựa chọn ở đây.


Bạn có thể đưa ra một ví dụ về cách bạn thấy không hiệu quả và giải thích lý do tại sao bạn thấy nó không hiệu quả?
Andreas

Một câu trả lời nhanh sẽ là bạn có thể tối ưu hóa trước khi trưởng thành. Luôn cố gắng để hồ sơ và xác định nút cổ chai. Bây giờ giả sử đây thực sự là vấn đề ... đó là một vấn đề cơ bản về dữ liệu mà mọi người đang cố gắng giải quyết mãi mãi. Những gì bạn đang cố gắng làm là bạn muốn các đối tượng của mình được nhóm lại với nhau theo các thuộc tính nhất định (độ sâu hoặc loại vật liệu) nhưng các thuộc tính có thể xung đột. Có vẻ như sự khác biệt chính giữa hai bức ảnh bạn đã thể hiện là bên trái có những thứ nằm trên nhau trong khi bên phải thì không. Vì vậy, nếu chúng không chồng chéo, sắp xếp chúng theo vật liệu?
ChaoSXDemon

Các đối tượng trong suốt cuối cùng cần được hiển thị từ sau ra trước ... vì vậy, điều thực sự tốt nhất bạn có thể làm là sắp xếp theo chiều sâu. Bạn có thể có thể tăng hiệu suất nếu chúng ở trạng thái tĩnh ....
ChaoSXDemon

Câu trả lời:


1

Nếu việc tạo khối là một nút cổ chai thì bạn có thể muốn sắp xếp chúng theo độ sâu và vật liệu và cũng thực hiện kiểm tra giới hạn để xem liệu chúng có trùng nhau không. Nhưng có lẽ bạn sẽ dành nhiều thời gian hơn cho việc sắp xếp và kiểm tra hơn là chỉ phân loại đơn giản và có một đợt ít hiệu suất hơn.

Tôi đoán số dặm của bạn có thể thay đổi nhưng nếu bạn đang viết một bộ chia chung chung, tôi sẽ sử dụng cách sắp xếp đơn giản và bỏ qua kiểm tra giới hạ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.