Tại sao quạt tam giác không được hỗ trợ trong Direct3D 10 trở lên?


16

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?


5
Sự hiểu biết của tôi là bởi vì người hâm mộ hình tam giác thường dẫn đến hình tam giác dài rất gầy dẫn đến sự can thiệp gây ra các tạo tác. Ngoài ra, tôi nghĩ rằng nó yêu cầu các lệnh rút thăm riêng biệt để hiển thị bất kỳ lần thử nào không được kết nối với quạt. Trường hợp có thể với một dải. Tôi không nghĩ có bất cứ điều gì người hâm mộ có thể làm mà dải không thể làm tốt hơn.
ClassicThunder

3
Quạt có thể được kết nối bằng chỉ mục để không cần các cuộc gọi riêng biệt. Điều tương tự cũng áp dụng cho các dải (và thậm chí bạn có thể kết nối quạt với các dải) linh hoạt hơn nhiều, không yêu cầu tris suy biến và nhẹ hơn về mặt băng thông.
Maximus Minimus

Câu trả lời:


15

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 ở đó.


4

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! =).


3

(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.


10 năm trở lên đây sẽ là một câu trả lời tốt. Ngày nay, đường ống đỉnh hầu như luôn được triển khai trong phần cứng và dữ liệu đỉnh có nhiều khả năng được lưu trữ trong các đối tượng bộ đệm trong bộ nhớ GPU, do đó, việc triển khai dải quạt giả định trong trình điều khiển sẽ yêu cầu kéo dữ liệu đỉnh trở lại bộ nhớ CPU để sắp xếp lại, sau đó tải lại vào bộ nhớ GPU. Điều đó không chỉ phá hỏng toàn bộ điểm sử dụng các đối tượng bộ đệm (vì bạn không còn có dữ liệu đỉnh tĩnh) mà còn yêu cầu đọc lại từ bộ nhớ GPU, vì vậy xin chào các quầy hàng đường ống và hiệu suất thấp.
Maximus Minimus

1
@ mh01 phần cứng nào không hỗ trợ quạt nguyên bản? Sau đó, CTNH phải hoạt động với OpenGL đầy đủ ...
Sẽ là

Dữ liệu đỉnh có thể được lưu trữ trong bộ nhớ GPU, nhưng nó phải đến đó từ bộ nhớ hệ thống bằng cách nào đó ở vị trí đầu tiên (ít nhất một lần). Đó là thông qua người lái xe. (Giả sử phía CPU có nguồn gốc dữ liệu, ngoại trừ các bản trình diễn phần cứng chuyên dụng, hầu như luôn luôn như vậy).
BrainSlugs83
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.