Đối với các trò chơi 2D, có lý do nào KHÔNG sử dụng API 3D như Direct3D hoặc OpenGL không?


20

Tôi đã hết sở thích Phát triển trò chơi từ lâu rồi. Quay lại khi tôi làm điều đó, hầu hết mọi người đã sử dụng Direct Draw để tạo trò chơi 2D. Khi tôi dừng lại, mọi người nói OpenGL hoặc Direct3D với phép chiếu trực giao chỉ là cách để đi.

Tôi đang suy nghĩ về việc quay lại tạo các trò chơi 2D, đặc biệt là trên điện thoại di động nhưng có lẽ trên nền tảng XNA. Để tạo ra thứ gì đó bằng OpenGL, tôi phải có một đường cong học tập nhỏ (rất tuyệt vời) để tích lũy bản thân để phát triển 3D.

Có bất kỳ lý do để bỏ qua điều đó và thay vào đó làm việc với khung 2D nơi tôi chỉ có bộ đệm khung Chiều rộng x Chiều cao tôi cần để lấp đầy bằng pixel?


Câu hỏi này thực sự sai ... Ý tôi là: Direct3D và OpenGL thực sự không phải là API 3D, phải không? Họ đang cung cấp khả năng tăng tốc phần cứng, nhưng ở cả 2D và 3D. Có một sự khác biệt nhỏ ở đó.
jacmoe

Câu trả lời:


20

Bạn chắc chắn nên sử dụng một cái gì đó sử dụng trình kết xuất 3D trên phụ trợ. Nhưng trong mã cấp cao hơn của bạn, bạn thậm chí không nên nhìn thấy trục Z. Tất cả điều đó nên được trừu tượng hóa ở các cấp thấp hơn. Nếu bạn đang thao tác trực tiếp với pixel, có lẽ bạn đang làm sai điều gì đó.

Đối với các trò chơi của riêng tôi, tôi đã xây dựng một tập hợp các lớp để xử lý các đối tượng 2D. Logic trò chơi của tôi chỉ xử lý tọa độ x và y. Các lớp học của tôi cũng xử lý những thứ như xoay, chia tỷ lệ, chế độ hòa trộn, v.v.

Tất nhiên, cũng có những thư viện 2D hiện có mà bạn có thể sử dụng - Cocos2D là một thư viện phổ biến trên iPhone. Hầu hết, nếu không phải tất cả, các thư viện này sẽ được xây dựng dựa trên API 3D cấp thấp hơn để chúng được hưởng lợi từ khả năng tăng tốc có sẵn.


Tôi rất muốn nghe cách xna xử lý api 2d đằng sau hậu trường
Iain

5
Cuối cùng tất cả đều là 3D. Spritebatch, đặc tính kết xuất 2D, là một hiệu ứng đổ bóng.
drxzcl

+1 để tách giao diện khỏi quá trình thực hiện.
Steve S

@Iain Đây là một mô phỏng XNA trong DirectX11 được viết bởi các tác giả XNA xnatoolkit.codeplex.com .
ClassicThunder

8

Có một lý do để không sử dụng API 3D.

Chỉ các máy tính ở NA, Tây Bắc EU và Nhật Bản hỗ trợ chúng ...

Tôi sống ở Brazil chẳng hạn, máy tính chị tôi là máy mới, có bộ xử lý đa lõi, ram vài GB, nhưng nó không chạy các trò chơi OpenGL.

Ví dụ, tôi chỉ có thể chơi Pháo đài lùn (sử dụng OpenGL để kết xuất đồ họa ASCII) trên máy tính của riêng tôi, trên bất kỳ máy tính nào khác tôi thấy nó chạy chậm.

Và đây không chỉ là vấn đề với Brazil, tôi đã hỏi mọi người xung quanh và nó phổ biến ở một số nơi trên thế giới ... Dân số thực sự sở hữu thẻ tương thích OpenGL hoặc Direct3D là thiểu số ...

Chỉ có điều là thiểu số này nhận được nhiều sự chú ý hơn từ các công ty ...

Nhưng nếu bạn chỉ nhắm mục tiêu các thị trường "truyền thống" này (NA, Tây Bắc EU, JP), thì hãy chọn nó!

EDIT cho những người bị hạ bệ: Rõ ràng là bạn không đồng ý, vì vậy, bạn có CHỨNG MINH rằng KHÔNG ai gửi máy tính nữa với chip VIA hoặc SIS xảo quyệt (hoặc thậm chí các nhà sản xuất không rõ hoặc tệ hơn) không có hoặc chỉ hỗ trợ OpenGL 1.0?

Tôi có HAI máy như thế trong nhà và chúng là máy mới (cả hai đều có nhiều lõi, cả hai đều có ram 2GB, cả hai đều có tần số xung nhịp trên 2GHz ...)

Trường đại học của tôi có 200 máy như thế, thậm chí một số máy do Dell chế tạo.

Rất đơn giản, GPU rất đắt tiền (thậm chí là Intel nhảm nhí), và ở các thị trường nghèo, thật xa xỉ, mọi người mua máy để chạy MS Word và đọc e-mail sẽ không mua máy có chip đồ họa đàng hoàng khi họ có thể mua một cái rẻ hơn 50 USD, đặc biệt khi 50 USD là thứ mà hầu hết mọi người phải mua thực phẩm trong cả tháng.

XIN VUI LÒNG, đừng đến đây nói rằng tôi đang nói BS, nếu bạn chưa bao giờ đến thăm một quốc gia thuộc thế giới thứ ba, và cũng đừng nói rằng những người ở thế giới thứ ba không chơi game, họ làm rất nhiều, Osmos Nhà phát triển đăng bài về phiên bản Linux ra mắt của họ, chỉ ra rằng rất nhiều lưu lượng truy cập đến (thực ra là phần lớn) đến từ Nga, rõ ràng là vì những người đó thường bị bỏ qua.

Tại Brazil, trò chơi phổ biến nhất là Counter-Strike, chạy ở chế độ Phần mềm ... Một số Lan-House chỉ có 10% số máy có GPU, thậm chí cả những trò chơi lớn với 200 hoặc thậm chí 300 trạm ...

Tôi không nên đăng bài này, tôi biết rằng nó sẽ thu hút số phiếu giảm, tôi bị mất điểm miễn phí khi đăng bài này, mỗi khi tôi giải thích lý do tại sao trò chơi khác của tôi sử dụng Allegro 4.4 thay vì 5.0 vì 5.0 không hỗ trợ Vẽ trực tiếp hoặc chế độ phần mềm Tôi nhận được rất nhiều lời khen ngợi từ nhiều người nói rằng tôi là một kẻ nói dối hoặc tôi thật ngu ngốc khi nói sự thật này về khả năng tăng tốc OpenGL thực tế.

EDIT 2: Để có thể chơi và phát triển các trò chơi có OpenGL, tôi đã phải cầu xin cha mẹ và những người khác mua cho tôi một chiếc GeForce 8600 (đó là thẻ rẻ nhất mà tôi thấy vẫn có thể chạy Mass Effect 1 và UT3 khác -người chơi trò chơi), họ đã mua cho tôi một cái, nhưng bây giờ tôi đã vài năm không nhận được những món quà khác, thậm chí không có quà sinh nhật, vì nó đắt tiền và tôi hy vọng thẻ này hoạt động được hơn 3 hoặc 4 năm ...

EDIT 3:
Một ví dụ điển hình: Eletronic Arts đã tạo một ứng dụng khách mới cho Ultima Online sử dụng khả năng tăng tốc 3D cho đồ họa 2D của nó ... Kết quả: Rất nhiều người chơi phàn nàn về tốc độ khung hình thấp một cách lố bịch và EA đã ủng hộ quyết định của họ để thực thi việc sử dụng ứng dụng khách mới (hiện được phép sử dụng ứng dụng cũ)

EDIT 4 năm 2015: Câu trả lời này sẽ được để lại ở đây chủ yếu là hiện vật lịch sử, hiện tại số lượng máy tính có chip cực kỳ thấp thậm chí ở các nước thế giới thứ ba, chúng vẫn tồn tại, đặc biệt là trong các máy tính nhắm vào văn phòng, nhưng chúng không phải là phổ biến nữa, tôi không nghĩ rằng nó đáng để làm việc với các API chế độ phần mềm nữa, các API dựa trên OpenGL là cách để đi ngay bây giờ.


3
Hiện tại không có chip nào hỗ trợ 3D. Nhiều khả năng bạn chỉ cần cập nhật trình điều khiển, vì những trình điều khiển do Windows cung cấp không hỗ trợ OpenGL. GPU crap phổ biến nhất hiện có là công cụ Intel GMA và thậm chí có một số hỗ trợ OpenGl cơ bản.
Axel Gneiting

1
Lặp lại một lần nữa: chip ở đây là WORSE hơn so với công cụ Intel GMA. Và vâng, một số trình điều khiển đã sửa đổi giải quyết vấn đề, nhưng bạn không thể mong đợi người dùng biết về điều đó.
tốc

Một ví dụ điển hình: Eletronic Arts đã tạo một ứng dụng khách mới cho Ultima Online sử dụng khả năng tăng tốc 3D cho đồ họa 2D của nó ... Kết quả: Rất nhiều người chơi phàn nàn về tốc độ khung hình thấp một cách lố bịch và EA đã ủng hộ quyết định của họ trong việc sử dụng ứng dụng khách mới (bây giờ được phép sử dụng cái cũ)
speeder

1
Ứng dụng khách mới là từ năm 2008, câu chuyện của tôi nói là: Mọi người trong năm 2008, không thích ứng dụng khách OpenGL và trở lại sử dụng ứng dụng 1997.
tốc

1
Chỉ vì mọi người không cập nhật trình điều khiển của họ không có nghĩa là máy tính của họ không hỗ trợ OpenGL và Direct3D. OP chỉ nên kiểm tra tính tương thích OpenGL / Direct3D. Nếu nó không ở đó, anh ta nên nói với người dùng để cập nhật trình điều khiển của mình. Điều này sẽ hoạt động trong 98,6% trường hợp, thậm chí có thể ở thế giới thứ hai và thứ ba. Nghiêm túc mà nói, bạn có thể liên kết với một máy tính mà bạn có thể mua mà thiếu hỗ trợ OpenGL / Direct3D không?
Avi

3

Không, không có. Bạn sẽ có được hiệu ứng tốt hơn và kết xuất nhanh hơn bằng cách sử dụng trình kết xuất 3d. Ví dụ, đây là một trò chơi 2ngày tôi đã thực hiện vài tuần trước (trong một ngày cuối tuần) - hiệu ứng quả cầu dựa rất nhiều vào trình tạo bóng 3d, mặc dù theo nhiều cách, chúng là hiệu ứng 2d. Tương tự, tôi đã sử dụng rộng rãi công nghệ kết xuất có sẵn cho trò chơi này - có ba hoặc bốn hiệu ứng đổ bóng pixel khác nhau đang diễn ra ở đó, tất cả đều cho phép tôi phát triển nhanh hơn và làm cho nó đẹp hơn.

Ôm 3d và yêu nó, nhưng yêu nó với một trục ít hơn.


2

API 3D nói chung là con đường để đi. GPU ngày nay được thiết kế để hiển thị đồ họa 3D, vì vậy bạn được đảm bảo hiệu năng khá chắc chắn. Và như ZorbaTHut đã nói, đi theo con đường 3D cho phép bạn tận dụng những thứ như trình tạo bóng pixel.

Thực sự không còn nhiều API 2D ngoài kia nữa. DirectDraw không được dùng nữa và hầu hết các thư viện dựa trên 2D / vector ngoài kia đều sử dụng OpenGL hoặc Direct3D để thực hiện kết xuất chúng. Ngay cả các bộ công cụ UI hiện đại cũng đang tận dụng API 3D để thực hiện kết xuất và kết hợp. Lấy WPF (khung UI mới nhất của Microsoft) làm ví dụ: nó sử dụng Direct3D để kết xuất.


2

Vẫn còn một số lượng đáng kinh ngạc các máy thực sự cũ ngoài kia với khả năng tăng tốc 3d và trình điều khiển không tồn tại chưa từng được cập nhật, như vậy việc sử dụng DirectDraw vẫn sẽ nhanh hơn OpenGL hoặc D3D. Tôi đã trải nghiệm điều này khi làm việc trên một trò chơi nhiều người chơi 2 tuổi, khoảng 10 tuổi khi tôi cố gắng viết một phụ trợ kết xuất mới trong OpenGL để hỗ trợ các nền tảng khác. Rất nhiều người chơi đã báo cáo rằng chế độ OpenGL không thể phát được do tốc độ khung hình thấp. Tôi cũng đồng ý với người Brazil rằng điều này phổ biến hơn ở bên ngoài Hoa Kỳ và Châu Âu, nhưng nó vẫn đúng ở những nơi đó.

Nếu bạn đang nhắm mục tiêu điện thoại di động hoặc XNA, thì chắc chắn sử dụng 3D. Nhưng nếu bạn muốn tạo một trò chơi chạy trên bất kỳ PC nào, bất cứ nơi nào, tôi muốn nói rằng hãy gắn bó với DDraw.


1

Điều duy nhất tôi có thể nghĩ là việc sử dụng API 3D trên 2D sẽ tăng thêm độ phức tạp cơ bản. Trong OpenGL ít nhất, bạn phải tải và quản lý họa tiết, và khi bạn vẽ chúng, bạn cần phải có hình dạng đúng. Một lớp bao bọc giải quyết những vấn đề này.

Điều đó nói rằng, sử dụng back-end đồ họa 3D dường như có nhiều nhược điểm hơn nhược điểm, vì vậy nếu bạn hỏi tôi, nó cũng đáng nỗ lực.


1

Nếu trò chơi của bạn đủ đơn giản và bạn muốn trò chơi chạy tốt trên các máy cấp thấp, đặc biệt là netbook và máy tính xách tay cũ (không tăng tốc 3D hoặc rất tối thiểu - đồ họa tích hợp Intel cũ, v.v.), thì vẫn đáng để xem xét thuần túy Phương pháp tiếp cận bộ đệm khung 2D

Nếu bạn hài lòng khi trò chơi yêu cầu ít nhất một thẻ / chip ATi / NVidia cấp thấp, thì việc sử dụng API 3D sẽ cho phép bạn thực hiện nhiều thứ hay ho (trộn alpha, chia tỷ lệ / xoay, v.v.) sẽ rất khó để làm tốt / hiệu quả trong trình kết xuất phần mềm thuần túy.

Ngoài ra, hãy lưu ý rằng một vài điều rất đơn giản trong '2D thuần túy' sẽ trở nên thú vị hơn khi có phần cứng 3D (và lọc song tuyến / pha trộn alpha). Hiểu khái niệm alpha tiền kỹ thuật. Và cũng nghĩ về, ví dụ, cách bạn xử lý các đường nối giữa các ô trong sơ đồ 2D nếu bạn muốn có chế độ xem có thể phóng to / xoay.

Cũng nên nhớ rằng điền vào có giới hạn. Và thật dễ dàng để đạt được những giới hạn đó trong 2D. Bạn có thể không có nhiều đa giác, nhưng nếu bạn muốn có nhiều lớp thị sai pha trộn alpha hoặc các hạt hoặc hiệu ứng bài - bạn hoàn toàn có thể dễ dàng lấp đầy nhiều pixel như một trò chơi 3D khá cao cấp.

Nhưng nhìn chung, phần cứng 3D là tuyệt vời và pha trộn phụ gia là bạn của bạ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.