Лучшие динамические языки для OpenGL / общая графика - PullRequest
7 голосов
/ 15 декабря 2009

Какие самые зрелые и хорошо поддерживаемые решения для написания графических программ?

Я использовал C ++ с OpenGL / GLUT, но хотел бы попробовать более гибкий и выразительный подход.

Рубин и обработка? Python и OGRE? Какие вещи хорошо сработали для вас?

Ответы [ 5 ]

7 голосов
/ 15 декабря 2009

Если вы просто заинтересованы в экспериментах, я бы предложил выбрать 3D-фреймворк с привязками для динамического языка, с которым вы уже знакомы.

Я начал проводить эксперименты с Ruby / OpenGL год или три назад, и с этим было достаточно легко поиграться.

Если вы серьезно хотите построить проект (по какой-либо причине), я бы предложил выбрать фреймворк на основе комбинации

  • Родной язык, на котором он реализован (или во время исполнения)
  • Динамические языковые привязки, доступные для двигателя или времени выполнения
  • Лицензия на фреймворк

Если вы хотите, чтобы ваш проект довольно легко выполнялся в разных ОС, вы, вероятно, захотите выбрать каркас, написанный на Java (потому что JVM работает везде) с привязками в Ruby (jRuby) или JavaScript (потому что они языки там хорошо поддерживаются). Это, однако, ограничит доступные вам рамки. (Это мое смещение OSS + Linux).

В Википедии есть список игровых движков . Основываясь на нескольких критериях, я начал проект с jMonkeyEngine (v2) и обнаружил, что работать с Rhino (реализация JVM JavaScript) и управлять им легко.

Недавно я видел презентацию из другого Java-фреймворка с привязками для нескольких языков, которая выглядела действительно круто (вдохновлено движком Ogre), но я забыл имя и не могу найти его в списке.

В то время, когда я делал C #, я смотрел на проекты / фреймворки, ориентированные как на dotNet, так и Mono, для работы на разных платформах, но было слишком сложно запускать сборки разработки (Tao?) И привязки Mono Lua. Может быть, все изменилось.

Чтобы подвести итог, выберите каркас, который может работать в среде (ах), которую вы хотите, с привязками для динамического языка, который вы хотите использовать. Даже если код библиотеки фреймворка, доступный для динамического языка, который вы хотите использовать, достаточно минимален, вы можете легко его расширить, если сможете работать с базовым языком. Если вы свободно владеете C ++, Java и C # не должны быть слишком сложными.

5 голосов
/ 15 декабря 2009

Если вы знакомы с C ++, вы можете попробовать Lua . Lua - это динамический язык, который может быть встроен в любую программу на C / C ++. Он очень популярен в игровой индустрии.

3 голосов
/ 20 апреля 2010

Я хотел бы упомянуть Python с PyOpenGL в качестве опции для рассмотрения.

Если вы уже знакомы с OpenGL, PyOpenGL - это, по сути, оболочка API, написанная на Python. Сначала я удивился тому, как похож код в Python и в C ++. Вот так (заметьте, я также использую Pyglet ):

def setup_render(self):
    '''First rendering setup'''
    glClearColor(0.0, 0.0, 0.0, 1.0) 
    glClearDepth(1.0)       

    glEnable(GL_LIGHTING)       
    glEnable(GL_DEPTH_TEST)    
    glEnable(GL_ALPHA_TEST)         
    glEnable(GL_CULL_FACE)              

def draw(self, time_passed):
    '''Drawing events'''
    if self.has_exit:
        pyglet.app.exit()
        return

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
    glUseProgram(self.shader.program)
    self.set_lights()

    # Draw objects here
    glTranslate(0, 0, -10)
    glScale(5.0, 5.0, 5.0)
    glutSolidSphere(1, 16, 16)

Посмотрите, насколько он похож на код C ++.

Мне удалось быстро подобрать PyOpenGL в Python и реализовать класс Quaternion длиной до 200 строк. Если вы знакомы с Python, я без колебаний рекомендую вам проверить его.

Кстати, Документация API PyOpenGL гораздо удобнее для чтения, чем официальная тоже.

2 голосов
/ 23 сентября 2010

Моим личным предложением, если вы достигнете зрелости, и поддержка будет Обработка - очень гибкая, с открытым исходным кодом, хорошо документирована и отличное сообщество . Синтаксис C-подобен, поэтому вам не составит труда его подобрать.

Еще одно передовое решение, которое выглядит очень многообещающе (но я еще не дошел до тестирования!): Penumbra - библиотека Clojure для разработки OpenGL в стиле динамического функционального программирования. Вот элегантный маленький фрагмент:

(enable :light0)
(push-matrix
  (translate 0 0 -10)
  (draw-quads
    (vertex 0 0 0)
    (vertex 0 1 0)
    (vertex 1 1 0)
    (vertex 1 0 0)))

Обратите внимание, что благодаря множеству умных макросов Clojure, он автоматически и прозрачно обрабатывает такие вещи, как выталкивание матриц преобразования в нужное время. Другие вещи, которые хорошо выглядят, такие как поддержка GPGPU.

2 голосов
/ 15 декабря 2009

Если вы ищете динамические языки, которые поддерживают OpenGL "из коробки" (без внешних привязок), попробуйте следующее:

...