2015-01-04 5 views
-1

У меня есть приложение, которое работает на Nintendo 3DS - он использует вариант OpenGL для рендеринга 3D-анимации. Пользователь может хранить эти сцены онлайн как файлы данных. То есть сохраняются только данные, необходимые для рендеринга сцены - кадры изображения отображаются на устройстве.Рендеринг с OpenGL на веб-сервере

Кроме того, я хотел бы, чтобы люди могли просматривать эти сцены в Интернете. Один из способов - сделать их в браузере через WebGL, но я беспокоюсь о количестве времени и памяти, которые потребуются. Я предпочел бы, чтобы сервер отображал сцены в файлы фильмов, которые можно воспроизводить с веб-страницы.

У меня нет большого опыта программирования на стороне сервера - возможно ли, чтобы серверная программа отображала кадры в контексте OpenGL? Это были бы закадровые фреймбуффы, так как нет экрана.

Любые предложения по подходу к этому? Я использовал PHP в основном для веб-программирования, но, похоже, для этого это невозможно. В идеале я хотел бы написать программу на C++, которая запускалась на сервере, таким образом, я мог бы повторно использовать код из 3DS. Это возможно? Где я могу прочитать об этом?

+1

В целом рендеринг на стороне клиента всегда будет бить на стороне сервера, отражающей отзывчивость, и тем более на использование ресурсов сервера. Кроме того, в зависимости от сложности ваших произведений искусства потребление полосы пропускания видеопотока может быть довольно быстрым (или нет, в зависимости от того, что вам нужно передать). Как клиент/пользователь, я бы предпочел, чтобы игра выполнялась локально. – datenwolf

ответ

2

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

Для серверов на базе Windows использование OpenGL (без кадр-кадров) с «без экрана» вызовет вызов. Вам нужно начать с окна, чтобы установить графический контекст. (Может быть предусмотрено положение для «графического контекста без окон» для Linux.) Также вам нужно будет определить, как управлять любыми ресурсами графического процессора для рендеринга, поскольку у него будут ограничения на количество одновременных запросов рендеринга, которые он может поддерживать до замедления вниз и/или неспособность выделить ресурсы (например, память фреймбуфера).

Одним из вариантов может быть использование Mesa (программное обеспечение OpenGL) реализация - это не будет так быстро, но в теории, это будет масштабироваться с добавлением процессора сервера и памяти, что соответствует, как большинство веб-серверов масштабирования: Mesa offscreen rendering info

Похоже, что когда-то было написано, создавая C++ executable with args from PHP is trivial - хотя вы можете перенаправить любые длинные рендеринги на отдельный сервер рендеринга, чтобы ваш веб-сервер реагировал.

Смежные вопросы