C++ приложение OpenGL как веб-сервис

Обновлено для Swift 4.2

   func mapView(_ mapView: MKMapView, didAdd views: [MKAnnotationView]) {
    var i = -1;
    for view in views {
        i += 1;
        if view.annotation is MKUserLocation {
            continue;
        }
        let point:MKMapPoint  =  MKMapPoint(view.annotation!.coordinate);
        if (!self.mapView.visibleMapRect.contains(point)) {
            continue;
        }
        let endFrame:CGRect = view.frame;
        view.frame = CGRect(origin: CGPoint(x: view.frame.origin.x,y :view.frame.origin.y-self.view.frame.size.height), size: CGSize(width: view.frame.size.width, height: view.frame.size.height))
        let delay = 0.03 * Double(i)
        UIView.animate(withDuration: 0.5, delay: delay, options: UIView.AnimationOptions.curveEaseIn, animations:{() in
            view.frame = endFrame
        }, completion:{(Bool) in
            UIView.animate(withDuration: 0.05, delay: 0.0, options: UIView.AnimationOptions.curveEaseInOut, animations:{() in
                view.transform = CGAffineTransform(scaleX: 1.0, y: 0.6)
            }, completion: {(Bool) in
                UIView.animate(withDuration: 0.3, delay: 0.0, options: UIView.AnimationOptions.curveEaseInOut, animations:{() in
                    view.transform = CGAffineTransform.identity
                }, completion: nil)
            })
        })
    }
}
7
задан genpfault 9 February 2012 в 16:51
поделиться

8 ответов

Это возможно, но одна из основных трудностей, с которыми вы столкнетесь, - это попытка использовать OpenGL из веб-службы. Вам нужно будет портировать это, чтобы делать 100% внеэкранный рендеринг и работать без оконного контекста. Это был бы мой первый шаг, и он не всегда тривиальный.

Кроме того, очень сложно правильно поддерживать и управлять вашими контекстами opengl из веб-службы, а связанные с этим накладные расходы могут быть довольно болезненными. В зависимости от количества и типов визуализаций вы можете столкнуться с некоторыми проблемами.

5
ответ дан 6 December 2019 в 15:29
поделиться

Если вам нужно хорошо масштабироваться, CGI, вероятно, будет медленным и хакерским.

Существует несколько веб-фреймворков C ++, см. этот вопрос .

Что касается OpenGL, вам, вероятно, потребуется использовать расширение буфера кадра, как сказал Джей. Затем вы можете преобразовать свое изображение в текстуру и использовать glGetTexImage () для получения данных пикселей. Оттуда просто сохраните изображение в любом желаемом формате с помощью прилагаемой библиотеки.

3
ответ дан 6 December 2019 в 15:29
поделиться

У меня был похожий проект / вопрос , что хотя это и не был веб-сервис, он требовал рендеринга OpenGL в сервисе Windows. У меня было много проблем с тем, чтобы заставить его работать в Vista, хотя в конечном итоге он действительно работал в XP с обычным OpenGL.

В конце концов я попробовал использовать Mesa , который я создал для работы в качестве частной DLL для моей службы. . Это было отличное решение, потому что теперь я действительно мог вмешаться в вызовы OpenGL и посмотреть, где что-то идет не так. Он отлично работал в программном режиме в рамках службы, и хотя аппаратное ускорение не было, оно работало очень хорошо.

3
ответ дан 6 December 2019 в 15:29
поделиться

Как насчет использования чего-то вроде Flex для создания «интерфейса управления» с поддержкой Интернета с серверной частью, которая передает рендеринг opengl в виде видео? По сути, вы перенаправляете ввод с клавиатуры / мыши через приложение Flex и используете его для отображения 3D-активности в реальном времени с использованием стандартного компонента фильма.

Дьявол, конечно, в деталях ....

1
ответ дан 6 December 2019 в 15:29
поделиться

Я думаю, у вас уже есть доступ к какому-то веб-серверу, например, Apache или подобному. В этом случае вы можете попробовать CppServ .

Вам просто нужно настроить свой веб-сервер, чтобы он мог взаимодействовать с CppServ. Затем я предлагаю вам разработать сервлет (проверьте документацию на сайте), который, в свою очередь, взаимодействует с вашей уже существующей dll. Поскольку dll знает все об OpenGL, создавать изображения в формате jpeg и т. Д. Не должно быть проблем

1
ответ дан 6 December 2019 в 15:29
поделиться

Если ваши потребности в взаимодействии с пользователем просты, я бы просто посмотрел на CGI. Это должно быть довольно легко понять.

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

1
ответ дан 6 December 2019 в 15:29
поделиться

You can try to use O3D API from google and don't do anysort of service, it would be much more simple.

0
ответ дан 6 December 2019 в 15:29
поделиться

Этот ответ может показаться очень простым и элементарным, пробовали ли вы этот подход

  1. Отправить векторные данные с сервера клиенту или наоборот (просто координаты и т. Д.)

  2. Визуализировать их на клиенте боковая сторона.

Это означает, что сервер только выполняет вычисления, а числа передаются туда и обратно.

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

0
ответ дан 6 December 2019 в 15:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: