2009-03-13 31 views
14

Tôi đang lập kế hoạch để viết một trò chơi đơn giản (isometric view) trong Java bằng cách sử dụng jMonkeyEngine - không có gì để ưa thích, tôi chỉ muốn tìm hiểu về OpenGL và viết các thuật toán hiệu quả (các bản đồ ngẫu nhiên tạo ra).Trò chơi 3D OpenGL được viết bằng Python có đẹp và chạy nhanh không?

Khi tôi đang lên kế hoạch phải làm gì, tôi bắt đầu tự hỏi về việc chuyển sang Python. Tôi biết rằng Python đã không tồn tại để trở thành một công cụ để viết các trò chơi 3D, nhưng có thể viết các trò chơi đẹp mắt với ngôn ngữ này không?

Tôi có suy nghĩ về đồ họa 3D, hiệu ứng đẹp mắt và thời gian CPU miễn phí để cấp nguồn cho phần còn lại của công cụ trò chơi? Tôi đã nhìn thấy những trò chơi java đẹp mắt - và thật thành thật, tôi đã khá sốc khi thấy mức độ chi tiết đạt được trong Runescape HD.

Mặt khác, pygame.org chỉ có 2ngày trò chơi, với một số dự án 3D bắt đầu. Có bất kỳ công cụ trò chơi 3D hiệu quả nào cho python không? Liệu pyopengl là lựa chọn duy nhất? Trò chơi tìm kiếm tốt trong python không phổ biến hoặc có thể đạt được?

Tôi sẽ biết ơn mọi thông tin/phản hồi.

+0

Dưới đây là một số mô-đun bạn nên kiểm tra [ModernGL] (https://github.com/cprogrammer1994/ModernGL), [pygame] (https://www.pygame.org), [pymunk] (https: // github.com/viblo/pymunk) [pyglet] (https://www.pyglet.org) –

Trả lời

18

Nếu bạn lo lắng về hiệu suất 3D: Hầu hết các phần quan trọng về hiệu suất sẽ được xử lý bởi OpenGL (trong thư viện C hoặc thậm chí trong phần cứng), vì vậy ngôn ngữ bạn sử dụng để điều khiển không quá quan trọng.

Để thực sự tìm hiểu xem hiệu suất có phải là vấn đề hay không, bạn phải thử. Nhưng không có lý do tại sao nó không thể làm việc về nguyên tắc.

Ở bất kỳ mức nào, bạn vẫn có thể tối ưu hóa các phần quan trọng, bằng Python hoặc bằng cách giảm xuống C. Bạn vẫn nhận được lợi ích của Python cho hầu hết các công cụ trò chơi kém hiệu quả.

+0

Sử dụng [ModernGL] (https://github.com/cprogrammer1994/ModernGL) thay vì PyOpenGL. Dễ dàng và nhanh chóng và không có ctypes yêu cầu. Nó không phải là một công cụ trò chơi nhưng truy cập vào OpenGL theo cách nhiệt tình. –

2

Bạn có thể muốn xem Python-Ogre. Tôi chỉ rối tung với bản thân mình, không có gì nghiêm trọng, nhưng có vẻ khá tốt.

+0

Tôi đã nghĩ đến việc viết lại cho WiiTanks trên máy tính, và đã được chơi đùa với PyGame ... nhưng Ogre trông khá hứa hẹn - cảm ơn rất nhiều cho liên kết! –

+0

@JonCage Bạn đã bao giờ viết điều này bằng Python chưa? – johnny

+0

Tôi nhận được một số thông tin cơ bản nhưng không có giá trị nào phát hành. –

1

Có lẽ là một chủ đề khá ít nhưng, nếu mục tiêu của bạn là học Python, cách tạo trò chơi bằng cách sử dụng IronPythonXNA? XNA không phải là OpenGL, nhưng tôi thấy nó là một công cụ 2D/3D cực kỳ đơn giản, nhanh và hỗ trợ Shader Model 3.0.

+6

Giống như chửi thề trong nhà thờ mà tôi đoán ... –

1

Khám phá dự án Frets on Fire - một giải pháp thay thế cho Guitar Hero thay thế. Nó được viết bằng Python và có đồ họa 3D phong nha trong OpenGL. Tôi khuyên bạn nên xem its sources để biết các gợi ý về thư viện, v.v.

2

Tôi muốn giới thiệu pyglet mà là một hệ thống tương tự để Pygame, nhưng với cam kết ràng buộc đầy đủ để OpenGL. Bạn có thể bắt đầu với trò chơi 2D đơn giản để có được hang của hệ thống và làm việc lên đến 3D sau này. Nó là một hệ thống hiện đại hơn PyGame được xây dựng xung quanh SDL mà chính nó là một chút dài trong răng những ngày này.

1

Có một trò chơi Ma cà rồng trong vài năm trước, trong đó phần lớn nếu không phải tất cả mã đều bằng Python. Bạn không chắc liệu các thói quen 3D có nằm trong chúng hay không, nhưng nó hoạt động tốt.

3

tôi đã một EuroPython nói về nỗ lực nghiệp dư của tôi lái xe OpenGL từ Python: http://pyvideo.org/video/381/pycon-2011--algorithmic-generation-of-opengl-geom

Phiên bản mới nhất của mã Tôi đang nói về là ở đây: https://github.com/tartley/gloopy

Nó được quảng cáo là một ' thư viện ', nhưng đó là ngây thơ của tôi: Đó là một loạt các mã thử nghiệm cá nhân.

Tuy nhiên, nó cho thấy rằng bạn có thể di chuyển xung quanh hàng trăm bit hình học với tốc độ 60 khung hình/giây từ Python.

Mặc dù bản demo ở trên khá đơn giản ở chỗ nó chỉ sử dụng hình học và khuôn mặt không được cấu trúc, một điều tôi thấy là hình học chi tiết hơn, bản đồ kết cấu hoặc các hiệu ứng đồ họa hiện đại khác không ảnh hưởng đáng kể đến tốc độ khung hình. Hoặc ít nhất chúng không ảnh hưởng đến nó tồi tệ hơn so với sử dụng các hiệu ứng tương tự trong một chương trình C. Đây là những chạy trên GPU, do đó, nó không làm cho bất kỳ sự khác biệt ở tất cả nếu chương trình của bạn được viết bằng Python.

Một điều nhạy cảm về hiệu suất từ ​​Python là nếu bạn đang tạo hình học động ở phía CPU, ví dụ: di chuyển các đỉnh riêng lẻ trong một hình dạng, bằng cách uốn hoặc làm tan hình dạng. Thực hiện việc tính toán từng đỉnh này trong Python, sau đó xây dựng một mảng ctypes mới từ kết quả, sau đó shunting hình học này với GPU, mỗi khung hình, sẽ chậm. Thay vào đó bạn có lẽ nên làm điều này trong một shader vertex. Mặt khác, nếu bạn chỉ muốn biến đổi affine (di chuyển đối tượng xung quanh, xoay chúng, mở tủ ngăn kéo, xoay bánh xe, uốn cánh tay robot nối) thì tất cả điều này có thể được thực hiện bởi GPU và thực tế chương trình của bạn được viết bằng Python tạo ra sự khác biệt nhỏ về hiệu suất.

Các vấn đề liên quan