我们用C ++创建了一个OpenGL应用程序,它可以显示一些物理模拟。基本应用程序包含在一个简单的GUI使用的DLL中。它目前在台式机上运行,但我们有想把它变成一个Web服务。
由于模拟需要专用硬件,因此用户可以通过他/她的浏览器与我们的应用程序作为服务进行交互,然后该服务将结果呈现为图像(jpg或任何适当的),然后可以在浏览器中显示/更新。
我的问题: 如何“轻松”将所描述的c ++应用程序转换为在某个服务器上运行的Web服务,以便我可以通过Web进行处理?我应该看什么样的技术/ API?是否存在解决类似问题的现实案例?
答案 0 :(得分:5)
这是可能的,但您遇到的一个主要困难是尝试从Web服务使用OpenGL。您需要将其移植到100%的屏幕外渲染并在没有窗口上下文的情况下工作。那将是我的第一步,并不总是一件轻而易举的事。
此外,很难正确地维护和管理来自Web服务的opengl上下文,并且所涉及的开销可能非常痛苦。根据渲染的数量和类型,您可能会遇到一些问题。
答案 1 :(得分:3)
如果你需要它可以很好地扩展CGI可能会有点慢&哈克。
有一些C ++ Web框架,请参阅this question。
就OpenGL而言,你可能需要使用帧缓冲扩展,Jay说。 然后,您可以将图像渲染为纹理,并使用glGetTexImage()来获取像素数据。从那里只需保存到随附图书馆所需的图像格式。
答案 2 :(得分:3)
我有一个类似的project/question,虽然它不是一个Web服务,但它需要在Windows服务中进行OpenGL渲染。我在Vista上工作时遇到了很多问题,尽管最终它在普通OpenGL的XP上工作。
我终于尝试使用Mesa,我构建它作为我的服务的私有DLL。这是一个很好的决定,因为我现在可以实际进入OpenGL调用并查看出错的地方。它在服务的软件模式下运行良好,虽然它不是硬件加速,但它运行良好。
答案 3 :(得分:1)
如果您的用户交互需求很简单,我只看一下CGI。它应该很容易理解。
至于获取OpenGL程序的输出,我将看一下framebuffer扩展。这应该可以让你轻松渲染到内存中,然后可以将其输入JPEG压缩器。
答案 4 :(得分:1)
我猜您已经可以访问某些网络服务器,例如Apache或类似的。在这种情况下,您可以尝试CppServ。
您只需配置您的网络服务器,以便它可以与CppServ通信。然后,我建议您开发一个servlet(检查站点上的文档),然后与您现有的dll进行通信。由于dll知道关于OpenGL的一切,因此创建jpeg图像等应该没有问题。
答案 5 :(得分:1)
如何使用Flex之类的东西创建一个支持Web的“控制界面”,服务器后端将opengl呈现作为视频流式传输?基本上,您通过Flex应用程序重定向键盘/鼠标输入,并使用它来使用标准电影组件显示“实时”3D活动。
魔鬼的细节当然......
答案 6 :(得分:0)
您可以尝试使用谷歌的O3D API而不做服务,这会更简单。
答案 7 :(得分:0)
这个答案可能听起来非常基础和初级,你尝试过这种方法
将矢量数据从服务器发送到客户端,反之亦然(只是坐标等)
在客户端渲染。
这意味着服务器只进行计算,并且数字来回传递。
我同意这不是一种尝试对每个对象/模型和纹理进行矢量化的简单方法,但速度非常快,因为不会传递大量的图形图像,只会传输矢量数据。