Như được đề cập trong tài liệu, quạt tam giác không được hỗ trợ trong Direct3D 10 trở lên .
Tại sao? Có những hạn chế cố hữu khi làm việc với người hâm mộ tam giác?
Như được đề cập trong tài liệu, quạt tam giác không được hỗ trợ trong Direct3D 10 trở lên .
Tại sao? Có những hạn chế cố hữu khi làm việc với người hâm mộ tam giác?
Câu trả lời:
Trong hơn một thập kỷ, các nhà cung cấp phần cứng đã đẩy các dải tam giác, danh sách tam giác được lập chỉ mục và các dải tam giác được lập chỉ mục là loại nguyên thủy nhanh nhất để sử dụng. Tại sao? Các dải có địa phương bộ đệm tốt hơn (sử dụng lại 2 câu cuối cùng được gửi thay vì phải liên tục quay lại câu đầu tiên) và lập chỉ mục cho phép bộ đệm đỉnh phần cứng thực sự hoạt động, cũng như hiệu quả hơn để loại bỏ các câu trùng lặp.
Nếu tất cả các nhà cung cấp phần cứng đều nói "làm theo cách này và bạn sẽ nhanh hơn" thì có khả năng khá cao là nếu bạn làm theo cách này thì bạn thực sự sẽ nhanh hơn.
Vì vậy, D3D10 + chỉ chính thức hóa điều này; nếu đó là con đường nhanh thì đó là con đường bạn sẽ sử dụng và những con đường khác sẽ không tồn tại. Điều này phù hợp với một trong những triết lý thiết kế của D3D10 +, đó là đưa bạn vào con đường nhanh và giữ bạn ở đó.
Tôi không biết điều này thực sự ảnh hưởng đến sự phát triển như thế nào nhưng với bất kỳ thay đổi nào như vậy, người ta nói rằng họ sẽ cho phép các nhà phát triển trình điều khiển viết trình điều khiển tốt hơn. Sự phức tạp của trình điều khiển GPU là đáng kinh ngạc nhưng tôi không chắc liệu sự thay đổi chính xác này sẽ giúp ích nhiều.
Trong cả hai trường hợp, có thể thay thế quạt tam giác cho hầu hết các nhu cầu của bạn (như kết xuất đa giác lồi) bằng các dải, thường có kết quả tốt hơn.
// A simplified API interface is presented for the purposes of having readable pseudocode
// Push( pos ) - pushes position data to make a new vertex
// TRIANGLE FANS:
for( i = 0; i < vertices.count; ++i )
Push( vertices[ i ] );
// TRIANGLE STRIPS:
for( i = 0; i < vertices.count; ++i )
{
if( i % 2 == 0 )
vertex = i / 2;
else
vertex = vertices.count - 1 - i / 2;
Push( vertices[ vertex ] );
}
EDIT: quên đề cập - nếu bạn cần thay đổi thứ tự quanh co - chỉ cần đảo ngược bài kiểm tra trong đó "if" (== to! =).
(Câu hỏi đặc biệt này đảm bảo một câu trả lời ý kiến :)
Theo chủ quan, tôi muốn nói kiến trúc của nó là du hành vũ trụ. OpenGLES cũng đã đưa ra rất nhiều thứ để làm cho nó 'ít phức tạp hơn' trong khi thực tế chỉ đẩy sự phức tạp lên từng và mọi nhà phát triển bằng mã kế thừa thay thế.
Tất nhiên, ngay cả khi phần cứng không hỗ trợ về mặt nguyên bản, nó sẽ không quan trọng để cung cấp khả năng tương thích với những người sắp xếp các quạt tam giác bằng cách chuyển đổi chúng thành dải hoặc hình tam giác.
Thời gian chạy WebGL và như vậy phải theo dõi các bộ đệm được xác thực và mọi lúc, và trình điều khiển có thể dễ dàng quản lý những người gửi cho họ quạt mặc dù họ không hỗ trợ.
Vì vậy, toàn bộ việc loại bỏ FFP và như vậy chỉ là một phiền toái lớn IMO.