Tôi cần vẽ một danh sách các hình dạng và tôi đang sử dụng Direct2D. Tôi nhận được danh sách các hình dạng từ một tập tin. Danh sách được sắp xếp và thứ tự của các phần tử bên trong tệp đại diện cho thứ tự các hình dạng này sẽ được vẽ. Vì vậy, ví dụ: nếu tệp chỉ định hai hình chữ nhật ở cùng một vị trí và với cùng kích thước, chỉ có hình chữ nhật thứ hai sẽ hiển thị (vì chữ đầu tiên sẽ bị ghi đè).Direct2D Depth Buffer
Với danh sách các hình dạng tôi proceede để vẽ nó theo cách sau:
list<Shape> shapes;
for (const auto& shape : shapes)
shape.draw();
Nó là đơn giản để thấy rằng nếu tôi có hai hình dạng tôi không thể đảo ngược thứ tự của các hoạt động vẽ, và điều này có nghĩa là tôi phải chắc chắn rằng shape2
sẽ luôn được vẽ sau shape1
và cứ tiếp tục như vậy. Theo đó tôi không thể sử dụng nhiều chủ đề để vẽ hình dạng của tôi, và đây là một bất lợi lớn về mặt biểu diễn.
Tôi đọc Direct3D hỗ trợ bộ đệm độ sâu (hoặc z-buffer), chỉ định cho mỗi pixel tọa độ z của nó, sao cho chỉ các pixel "hiển thị" (các lực gần hơn với người xem) sẽ được vẽ, bất kể thứ tự các hình dạng được vẽ là. Và tôi có thông tin chi tiết về từng hình dạng khi tôi đọc tệp.
Có cách nào để sử dụng bộ đệm độ sâu trong Direct2D hoặc kỹ thuật tương tự cho phép tôi sử dụng nhiều chuỗi để vẽ hình dạng của mình không?
Tôi không chắc chắn về bản thân 'Direct2D' - nhưng thông thường bạn sẽ gán hình dạng một điều phối' z', sắp xếp theo điều phối đó và sau đó render tương ứng, do đó thực hiện một bộ đệm Z đơn giản. – rhughes
@ rhughes Tôi không cần phải sắp xếp chúng, vì đã được sắp xếp khi tôi đọc tệp. Ngoài ra, bằng cách sử dụng phương pháp này ngăn cản việc sử dụng nhiều chủ đề. – Nick
Tôi có nghĩa là sắp xếp theo z-coord. Bạn không cần phải hiển thị chúng trên các luồng riêng biệt. Làm cho hình dạng với z-cood thấp nhất đầu tiên và sau đó làm việc theo cách của bạn để hình dạng với z-coord cao nhất. – rhughes