Подтвердить что ты не робот

Может ли 3D OpenGL игра, написанная на Python, выглядеть хорошо и быстро работать?

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

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

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

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

Буду благодарен за любую информацию/отзывы.

4b9b3361

Ответ 1

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

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

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

Ответ 3

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

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

Он был объявлен как "библиотека", но это было наивно для меня: это куча личного экспериментального кода.

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

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

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

Ответ 8

Несколько лет назад была игра вампиров, где большинство, если не весь код, находились в Python. Не уверен, были ли в них 3D-подпрограммы, но он работал нормально.