Может ли 3D OpenGL игра, написанная на Python, хорошо выглядеть и работать быстро? - PullRequest
14 голосов
/ 13 марта 2009

Я планирую написать простую 3d-игру (изометрический вид) на Java с использованием jMonkeyEngine - ничего особенного, я просто хочу кое-что узнать об OpenGL и написании эффективных алгоритмов (генерирующих случайные карты).

Когда я планировал, что делать, я начал задумываться о переходе на Python. Я знаю, что Python не появился в качестве инструмента для написания 3D-игр, но возможно ли писать хорошо выглядящие игры на этом языке?

Я имею в виду трехмерную графику, приятные эффекты и свободное время процессора для включения остальной части игрового движка? Я видел хорошо выглядящие Java-игры - и, честно говоря, я был довольно шокирован, когда увидел уровень детализации, достигнутый в Runescape HD.

С другой стороны, pygame.org имеет только 2d игры, с некоторыми запускающими 3d проектами. Есть ли эффективные игровые движки для Python? Является ли pyopengl единственной альтернативой? Хорошо выглядящие игры на питоне не популярны или не достижимы?

Буду признателен за любую информацию / обратную связь.

Ответы [ 8 ]

18 голосов
/ 13 марта 2009

Если вы беспокоитесь о производительности 3D: большинство критичных для производительности компонентов будет обрабатываться OpenGL (в библиотеке C или даже в аппаратном обеспечении), поэтому язык, который вы используете для его управления, не должен иметь большого значения.

Чтобы действительно выяснить, является ли производительность проблемой, вам нужно ее попробовать. Но нет никаких причин, почему это не может работать в принципе.

В любом случае, вы все равно можете оптимизировать критические части, либо в Python, либо перейдя на C. Вы все равно получаете преимущество Python для большей части игрового движка, который менее критичен к производительности.

8 голосов
/ 13 марта 2009
3 голосов
/ 10 июля 2012

Я рассказал EuroPython о моих любительских попытках запустить OpenGL из Python: http://pyvideo.org/video/381/pycon-2011--algorithmic-generation-of-opengl-geom

Последняя версия кода, о котором я говорю, находится здесь: https://github.com/tartley/gloopy

Это объявлено как «библиотека», но это было наивно с моей стороны: это набор личного экспериментального кода.

Тем не менее, это демонстрирует, что вы можете перемещаться по сотням битов геометрии на скорости 60 кадров в секунду из Python.

Хотя приведенная выше демонстрация довольно проста в том смысле, что она использует просто геометрию и нетекстурированные грани, я обнаружил, что более детальная геометрия, наложение текстуры или другие более современные графические эффекты не оказывают существенного влияния на частоту кадров. Или, по крайней мере, они не влияют на это хуже, чем использование тех же эффектов в программе на Си. Они запускаются на GPU, поэтому, если ваша программа написана на Python, не имеет никакого значения.

Одна вещь, которая чувствительна к производительности в Python, - это если вы создаете динамическую геометрию на стороне процессора, например перемещение отдельных вершин в форме, сгибая или плавя форму. Выполнение такого рода вычисления для каждой вершины в Python, затем построение нового массива ctypes из результата, затем передача этой геометрии в GPU, каждый кадр, будет медленным. Вместо этого вы, вероятно, должны делать это в вершинном шейдере.

С другой стороны, если вы просто хотите аффинных преобразований (перемещение объектов вокруг, вращение их, открытие комодов, вращение колес автомобиля, изгиб соединенного манипулятора робота), то все это может быть сделано с помощью графического процессора и факта Ваша программа написана на Python и не влияет на производительность.

2 голосов
/ 13 марта 2009

Я бы порекомендовал pyglet , которая похожа на систему pygame, но с полными привязками к OpenGL. Вы можете начать с простых 2D-игр, чтобы освоить систему и позже перейти к 3D. Это более современная система, чем PyGame, построенная на SDL, которая в наши дни немного длинна.

2 голосов
/ 13 марта 2009

Возможно, вы захотите проверить Python-Ogre . Я просто облажался сам, ничего серьезного, но, кажется, довольно хорошо.

1 голос
/ 14 марта 2009

Несколько лет назад существовала игра «Вампиры», в которой большая часть кода, если не весь, была написана на Python. Не уверен, что в них были 3D-процедуры, но он работал нормально.

1 голос
/ 13 марта 2009

Ознакомьтесь с проектом Frets on Fire - альтернативой Guitar Hero с открытым исходным кодом. Он написан на Python и имеет приличную 3D-графику в OpenGL. Я бы посоветовал проверить его источники для подсказок по библиотекам и т. Д.

1 голос
/ 13 марта 2009

Возможно, немного не по теме, но, если ваша цель - изучить Python, как насчет создания игры с использованием IronPython и XNA ? Хотя XNA не является OpenGL, я нахожу его чрезвычайно простым 2D / 3D-движком, который быстр и поддерживает Shader Model 3.0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...