OpenGL có thích hợp cho các trò chơi 2D không?


44

Tôi đã tự dạy thư viện OpenGL được một thời gian và muốn bắt đầu làm một trò chơi. Tuy nhiên, để giới thiệu dễ dàng hơn, tôi muốn bắt đầu với một cái gì đó 2D, chẳng hạn như một trò chơi kiểu Pokemon từ trên xuống.

Đây có phải là một kế hoạch tốt hay OpenGL được tạo riêng cho 3D?



Tôi nghĩ rằng một lợi ích mà việc sử dụng OpenGL cho 2D mang lại là bạn có được lợi ích của trình đổ bóng. Đây có thể hữu ích để đạt được hiệu ứng đặc biệt. Một lợi ích khác là nếu bạn đã biết OpenGL, bạn sẽ quen với API.
Lysol

Câu trả lời:


44

OpenGL khá thích hợp cho các trò chơi 2D. Mặc dù nó thường được sử dụng cho 3D, nhưng chức năng tương tự có thể được sử dụng cho các trò chơi 2D. Điều đó có nghĩa là, bất cứ điều gì bạn có thể làm với 3D OpenGL sẽ được áp dụng với OpenGL "2D".

Một số thông tin có thể được tìm thấy tại vị trí này .

OpenGL 2D đạt được theo cách tương tự như 3D OpenGL. 2D OpenGL chỉ là ứng dụng của một kỹ thuật, nghĩa là hiển thị cảnh trên mặt phẳng, sau đó sử dụng và chiếu chính tả thay vì chiếu phối cảnh, tùy thuộc vào thiết lập của bạn, có thể làm biến dạng cảnh.

Một ví dụ:

Ortho vs phối cảnh

(a) là một cảnh trong một hình chiếu chính tả. (b) là cùng một cảnh, sử dụng phép chiếu phối cảnh. Trong trò chơi 2D, điều này có thể gây ra việc định vị sai các họa tiết nếu độ sâu của chúng bị thay đổi (điều này, tùy thuộc vào cách bạn phát triển, có thể là trường hợp). Sử dụng phép chiếu phối cảnh cũng làm cho việc sắp xếp mọi thứ trong tọa độ màn hình trở nên khó khăn hơn.

Ngoài ra, OpenGL mang nhiều, rất nhiều, rất nhiều lợi ích với nó. Chủ yếu, tăng tốc phần cứng là một điểm cộng rất lớn. Ngoài ra còn có một mức độ kiểm soát tốt hơn đối với những gì card đồ họa làm và cách thức hoạt động của nó, cho phép tối ưu hóa theo từng trường hợp cụ thể


Cảm ơn rât nhiều! Tôi chỉ muốn xác nhận rằng nó sẽ ổn để làm điều này.
w4etwetewtwet

4
Nếu bạn có khả năng và sở thích sử dụng OpenGL cho 2D, nó sẽ mang lại cho bạn rất nhiều phần thưởng mà chỉ OpenGL mới có thể mang lại. Hiệu suất phồng rộp, khả năng tương thích đa nền tảng ... Hãy nghĩ về nó theo cách này. Hầu như tất cả các lựa chọn khác cho 2D sẽ được xây dựng dựa trên OpenGL. Đó là một cơ hội tuyệt vời để loại bỏ một số "người trung gian"
Steven Lu

2
@StevenLu và không đề cập đến, trở thành một lập trình viên thực thụ
Ra mắt vào

Tuyệt vời đọc! Cảm ơn đã liên kết đó. Yup: mã hóa 2D của bạn bằng OpenGL thẳng chỉ là một thứ tồi tệ hơn vì vậy đó là lý do tại sao bạn nên làm điều đó.
Steven Lu

1
Bạn nên cung cấp thêm thông tin cho câu trả lời này thay vì chỉ là một liên kết. Có thể giải thích tại sao GL hoạt động cho 2D (chế độ xem chính tả) và những lợi thế mà nó mang lại (tăng tốc phần cứng, hiệu ứng đổ bóng).
Sean Middleditch

22

OpenGL như tên trạng thái là một thư viện đồ họa. Mặc dù nó được phát triển với ý tưởng 3d, nhưng không có giả định được mã hóa cứng trong thư viện mà bạn sẽ sử dụng 3d. Hơn nữa, nhờ vào khả năng 3d của nó, một số điều khó có thể thực hiện theo cách tiếp cận 2d nghiêm ngặt là chuyện nhỏ. Ví dụ:

  • Sắp xếp Z được đơn giản hóa bằng cách sử dụng tọa độ 3d bộ đệm độ sâu (mặc dù vậy hãy coi chừng độ trong suốt)
  • xoay và chia tỷ lệ sprite về cơ bản là miễn phí vì bạn đang sử dụng các hình tứ giác có kết cấu độc lập với độ phân giải
  • nếu bạn sẵn sàng giới hạn bản thân với các card đồ họa có khả năng OpenGL 2.0, bạn có thể tận dụng các shader, điều này sẽ đơn giản hóa việc viết các hiệu ứng đặc biệt rất nhiều (làm mờ, hiệu ứng hạt, thao tác hình ảnh, thay thế màu sắc) - không đề cập đến việc nó sẽ được nhanh hơn rất nhiều so với phía CPU

Đây chỉ là một vài lợi thế xuất phát từ đỉnh đầu của tôi, tôi đoán có một số người khác.


3
Vui lòng tự giới hạn các card đồ họa có khả năng OpenGL 2.0 (hoặc cao hơn), OpenGL 2.0 đã được phát hành vào năm 2004, thậm chí điều đó đã khá lỗi thời.
Slátpan

@Slicedpan, thật không may, một số máy tính xách tay / netbook vẫn đi kèm với thẻ Intel có hỗ trợ tối đa GL 1.4 - cá nhân tôi đã quyết định bỏ chúng, nhưng một số người (đặc biệt là khi tạo các trò chơi đơn giản) có thể muốn hỗ trợ chúng.
Kornel Kisielewicz

16

Mặc dù OpenGL là API 3D, bạn vẫn có thể sử dụng nó để tạo trò chơi 2D. Bạn có thể giả mạo môi trường 2D trong 3D thông qua các kỹ thuật khác nhau, chẳng hạn như chống lại dữ liệu trên mặt phẳng.

Tuy nhiên, có hỗ trợ hạn chế trong API thực tế để thực hiện việc này theo cách rõ ràng (chẳng hạn như không có chức năng "bật chế độ 2D"). Các cách mà bạn mô phỏng nó (mà bạn có thể tìm thấy trong nhiều hướng dẫn trực tuyến) có thể khó hiểu hoàn toàn nếu không hiểu một chút về đường ống 3D thực sự đang được sử dụng dưới mui xe.

Có vẻ như bạn đã xem OpenGL một thời gian và vì vậy có thể nắm bắt được những nguyên tắc cơ bản đó. Tuy nhiên, nếu bạn cảm thấy run rẩy với chúng, bạn có thể muốn bắt đầu với trò chơi của mình bằng cách sử dụng thư viện 2D được xây dựng trên OpenGL, chẳng hạn như cocos2d . Nó sẽ cung cấp cho bạn một số kinh nghiệm với các API 2D thường trông như thế nào và vẫn mang lại cho bạn những lợi ích của back-end 3D được tăng tốc phần cứng, nếu bạn cảm thấy như bạn chưa sẵn sàng để tự mình giải quyết mọi thứ.



5

Nhiều thư viện đồ họa 2d như SDL hoặc SFML sử dụng khả năng tăng tốc phần cứng OpenGL. Điều này mang lại cho bạn lợi ích về hiệu suất của OpenGL, nhưng trừu tượng hóa các chi tiết cấp thấp khó chịu đằng sau một API đơn giản hơn nhiều.


0

Bây giờ tôi có nhiều kinh nghiệm trong lập trình OpenGl và tôi có thể nói với bạn rằng đó là một nỗi đau. Trước đây khi tôi bắt đầu lập trình, tôi rất năng suất trong những môi trường đơn giản như BlitzBasic. Sau đó, tôi bắt đầu đi vào bước tiếp theo với việc học C ++ và OpenGl. Và khi bạn không có một giáo viên hay người tốt để hỏi, bạn sẽ vĩnh viễn chạy vào màn hình đen. Vấn đề lớn nhất là địa ngục bang OpenGl. Có hàng tấn công tắc mà bạn có thể trao đổi để thay đổi trạng thái của opengl. Và một số công tắc phụ thuộc vào các công tắc khác. ví dụ: glGet (GL_TEXTURE_BINDING_2D) phụ thuộc vào glGet (GL_ACTIVE_TEXTURE). Và tài liệu mà trạng thái phụ thuộc vào trạng thái khác không phải là tốt nhất. Nhiều hoạt động như tải kết cấu yêu cầu bạn thay đổi trạng thái này, điều này thường dẫn đến việc phá vỡ mã khác yêu cầu trạng thái cũ. Và sau đó, có một vấn đề là OpenGl là hành vi phụ thuộc triển khai, để chương trình của bạn chạy trên máy của bạn nhưng trên máy khác, tất cả những gì bạn thấy là màu đen. Tất cả những gì bạn có thể làm ở đây là đoán những gì sai trong 10000 dòng mã của bạn. Vì vậy, nếu bạn thích sự thất vọng thì có, hãy sử dụng OpenGl cho những thứ 2D. Đối với tất cả những người khác, đừng làm điều đó nếu bạn không cần nó. Bạn có thể làm việc hiệu quả trong OpenGl, nhưng nó sẽ tiêu tốn của bạn rất nhiều thời gian và thần kinh. Có thể nhiều hơn bạn muốn chi tiêu. Bạn có thể làm việc hiệu quả trong OpenGl, nhưng nó sẽ tiêu tốn của bạn rất nhiều thời gian và thần kinh. Có thể nhiều hơn bạn muốn chi tiêu. Bạn có thể làm việc hiệu quả trong OpenGl, nhưng nó sẽ tiêu tốn của bạn rất nhiều thời gian và thần kinh. Có thể nhiều hơn bạn muốn chi tiêu.


-2

Unity3D sử dụng OpenGL và tôi sử dụng nó cho các nền tảng 2D và 2.5D. Unity3D thực chất là một Công cụ chơi game 3D, nhưng cũng được sử dụng cho các trò chơi 2D và 2.5D. Bạn có thể có các mặt phẳng x, y, z và chỉ giới hạn chuyển động hoặc xoay đến 2 trong số các mặt phẳng đó, tạo ra bầu không khí 2D trong cơ bản là thế giới 3D.


Tuyệt vời, downvote đầu tiên của tôi. Vui mừng khi thấy gamedev cũng có người ghét.
PHẦN MỀM Apollo

1
Tôi đoán minh họa một điểm thông qua các ví dụ trong thế giới thực được tán thành. Rất chuyên nghiệp.
PHẦN MỀM Apollo

7
Amit, downvote không chỉ ra "kẻ ghét". Downvote chỉ đơn giản là một cách để cộng đồng truyền đạt ý kiến ​​của họ về câu hỏi và câu trả lời. Nó không mang tính cá nhân với bạn, vì vậy hãy cố gắng đừng làm theo cách đó. Tôi đồng ý rằng downvoter nên bình luận về lý do của downvote, vì bạn không biết cách cải thiện câu trả lời mà không có phản hồi. Tôi sẽ cho bạn biết lý do tại sao tôi nghĩ rằng nó đã bị hạ cấp. Chỉ vì một cá nhân sử dụng OpenGL cho các trò chơi 2D, không có nghĩa là nó phù hợp. Bạn cũng cần đưa ra lý do tại sao nó phù hợp.
MichaelHouse

2
Vâng, không chắc tại sao mọi người lại xuống cấp; bit "sử dụng OpenGL" mà tôi cảm thấy nên được làm rõ bằng "sử dụng OpenGL trên các nền tảng yêu cầu nó" (nó sử dụng API Direct3D hoặc API dành riêng cho mọi nơi trừ iOS / Anrdoid / OSX / Linux), nhưng điều đó rõ ràng hơn là điều chỉnh.
Sean Middleditch

1
Tôi đã không tự hạ thấp mình, nhưng một lý do khác khiến câu trả lời này không phù hợp là vì bạn đang sử dụng công cụ dựa trên OpenGL chứ không phải OpenGL thô, điều này thay đổi mọi thứ khá nhiều.
w4etwetewtwet 17/07/13
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.