Tôi nên học Direct3D 9, 10 hay 11? [đóng cửa]


14

Tôi mới bắt đầu tham gia lập trình 3D với Direct3D. Tôi nên chọn phiên bản D3D nào?

11 trông khá gọn gàng, nhưng 9 và 10 dường như vẫn còn khá đẹp. Với tình trạng hiện tại của ngành công nghiệp phát triển trò chơi, phiên bản nào có ý nghĩa hơn để bắt đầu sử dụng?


Câu hỏi "Sử dụng công nghệ nào" không phải là câu hỏi Hỏi / Đáp tốt.
MichaelHouse

Câu trả lời:


12

Điều đó phụ thuộc vào việc bạn có muốn thiết kế một công cụ để sản xuất một trò chơi sẽ được thực hiện trong ba năm hay một năm hay sáu tháng hay không và bạn có nghĩ đến các cổng console hay không. Sẽ tương đối dễ dàng để loại bỏ một cổng 360 của trò chơi của bạn khỏi Direct3D9, nhưng bạn sẽ cần phải làm nhiều hơn nữa từ D3D11. Hãy nhớ rằng D3D11 khóa tất cả người dùng XP, nếu không nhất thiết phải là tất cả phần cứng D3D9.

Khảo sát gần đây nhất của Steam cho thấy khoảng 16% mọi người vẫn sử dụng Windows XP. Bạn có đủ khả năng để cắt chúng ra? Đến khi trò chơi của bạn hoàn thành, điều này sẽ thay đổi như thế nào? Bạn sẽ sử dụng các tính năng phụ thuộc vào API cấp cao hơn? Đây là những câu hỏi mà bạn sẽ cần phải trả lời chính mình.

Direct3D 9 khá dễ truy cập và bạn có thể tiếp cận nhiều người với trò chơi D3D9, nhưng số ngày của nó được đánh số, đặc biệt là trên PC. Nếu bạn không quan tâm đến việc nhắm mục tiêu vào những người đó, thì có rất ít điểm cho nó.

Ồ, và đừng bận tâm với DX10. Không có lý do nào để sử dụng nó trên DX11. Trừ khi bạn muốn sử dụng D2D / DirectWrite, điều này không hợp lý.

Tất nhiên, điều đáng nói là trong DX11, không có sự thay thế nào cho các lớp mà với tư cách là một người có sở thích, tôi thấy cực kỳ hữu ích trong DX9. Chẳng hạn như ID3DXMesh, ID3DXSprite, ID3DXFont, phải biên dịch ID3DXEffect từ nguồn, v.v. Microsoft khuyên DirectWrite thay thế ID3DXFont, nhưng tất nhiên, họ đã quên thực sự làm cho DX11 tương thích với các hệ thống Direct2D / DirectWrite mới. .


Tại sao họ loại bỏ khung hiệu ứng? Đó là một lớp IMO rất hữu ích.
dotminic

@__dominic: Nó không bị xóa, nhưng bạn phải tự biên dịch nó.
DeadMG

1
@__dominic: Như DeadMG đã chỉ ra, khung hiệu ứng không bị loại bỏ, nó đã được đưa vào một tập hợp các tệp mã độc lập mà bạn có thể tự biên dịch - điều này được cho là đã được thực hiện để cho phép nó được phiên bản trôi chảy hơn lõi D3D và dễ dàng triển khai các vấn đề (đặc biệt là xung quanh D3DX).

1
Tôi nghĩ tệ hơn việc cắt giảm 25% người dùng XP là chỉ có 17% ​​có GPU DX11 (tính đến thời điểm hiện tại).
DMan

2
@DMan: D3D11 có thể chạy trên phần cứng downlevel, bao gồm cả phần cứng D3D9.
DeadMG

9

tldr: Tìm hiểu D3D11.

Sự khác biệt giữa 10 và 11 là khá nhỏ, về hình dạng của API. D3D11 cho phép bạn sử dụng cấp độ thấp để viết mã dựa trên API D3D11 sẽ chạy hoàn toàn về phần cứng lớp D3D9 (lưu ý rằng bạn vẫn sẽ yêu cầu Vista hoặc tốt hơn). Vì vậy, bạn cũng có thể tìm hiểu API mới hơn, dù sao tôi cảm thấy sạch hơn và đồng đều hơn.

Tuy nhiên, nếu bạn không có Vista hoặc tốt hơn hoặc cuối cùng bạn muốn mã của riêng mình chạy trên XP (ví dụ: phân phối trò chơi của bạn cho người dùng XP), bạn sẽ phải sử dụng D3D9. Tuy nhiên, thị trường XP có thể bị thu hẹp, vì vậy tôi muốn nói là hãy đi 11 nếu bạn có thể.


3

Nếu bạn hoàn toàn mới đối với lập trình 3D và đặc biệt nếu bạn chưa quen với lập trình COM và Windows, tôi sẽ khuyên bạn không nên học DirectX ngay bây giờ. Theo kinh nghiệm của tôi, DirectX là một công cụ cực kỳ mạnh mẽ, nhưng nó có một đường cong học tập rất dốc, bạn phải xem xét ngoài các đường cong học tập của lập trình Windows, lập trình 3D và nhiều thứ khác. Nếu bạn bắt đầu với DirectX, bạn có thể cảm thấy choáng ngợp bởi tất cả các chi tiết của việc tạo mã soạn sẵn, vì vậy tôi khuyên bạn nên chống lại nó.

Thay vào đó, tôi muốn giới thiệu một API đơn giản hơn cho phép bạn tập trung hơn vào việc học về lập trình 3D. XNA khá hay và vì nó nằm trên đỉnh DirectX, nên khi bạn chuyển sang DirectX, bạn sẽ có một số ý tưởng giúp cho việc học DirectX dễ dàng hơn nhiều.

Bây giờ, nếu bạn có kinh nghiệm về lập trình 3D, chẳng hạn như với OpenGL và bạn biết cách lập trình COM, tôi khuyên bạn nên sử dụng DirectX 11. Bất cứ điều gì ngoại trừ phiên bản mới nhất đã lỗi thời và mọi trải nghiệm bạn nhận được từ nó sẽ hữu ích cho một khoảng thời gian ngắn hơn.

Nhưng một lần nữa, trải nghiệm thực sự đến từ sự đa dạng, vì vậy tôi khuyên bạn nên tìm hiểu cả DirectX và OpenGL và cả XNA nếu bạn muốn và càng nhiều API càng tốt. Bằng cách đó, bạn sẽ có kiến ​​thức trừu tượng về cách lập trình 3D hoạt động với các công cụ khác nhau và bạn sẽ có thể sử dụng công cụ phù hợp cho từng công việc.


2

Tôi khuyên bạn nên DX11 hoặc DX10. Sự khác biệt là rất nhỏ. Bạn chỉ có thể làm nhiều việc hơn với DX11 (hw tessalation, gpgpu tốt hơn, xuất ra nhiều kết cấu trên pixel shader ..). DirectX 9 có một kiến ​​trúc khác và ít bị lỗi thời tại thời điểm này. Nếu bạn đang hỏi về ngành công nghiệp phát triển trò chơi hiện tại: đối với các trò chơi pc đang phát triển thì DX9 đã chết.

Nhưng tôi phải nói rằng:
Đừng quan tâm đến api , một khi bạn thực sự hiểu cách đồ họa hoạt động, việc học api mới sẽ mất tối đa một tháng. Thậm chí thời gian ngắn hơn.


3
DX9 không lỗi thời. Vẫn còn rất nhiều người dùng tiềm năng trên XP. Nó có thể không còn được phát triển nữa, và sẽ trở nên lỗi thời trong vài năm tới, nhưng bây giờ thì không.
Vịt Cộng sản

1
@thecomistduck Tôi đồng ý, nhưng DX9 hoàn toàn lỗi thời khi học nó. Bởi vì một khi người mới bắt đầu học nó bây giờ, sẽ biết rõ về nó ... nó sẽ bị lỗi thời. Và chắc chắn tôi đã nói xấu trong câu trả lời của tôi.
Notabene

-5

Tôi nghe nói rằng dx9 với hệ thống win xp là hệ thống dựa trên lõi đơn. Đó là công nghệ cũ. Tôi giới thiệu và bạn dx11.


3
Câu trả lời này không bổ sung bất cứ điều gì hữu ích và không rõ ràng (và có thể sai và gây hiểu lầm) những gì bạn đang đề xuất liên quan đến "hệ thống lõi đơn".

1
Cộng với "Tôi nghe nói rằng ..." không phải là một nguồn bằng chứng đáng tin cậy (hoặc gần như bất cứ điều gì, thực sự).
Maximus Minimus
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.