在 Web 服务器上使用 OpenGL 进行渲染
Rendering with OpenGL on a web server
我有一个在任天堂3DS上运行的应用程序 - 它使用OpenGL的变体来渲染3D动画。 用户可以将这些场景在线存储为数据文件。 也就是说,仅存储渲染场景所需的数据 - 图像帧在设备上渲染。
此外,我希望人们能够在线查看这些场景。 一种方法可能是通过WebGL在浏览器中呈现它们,但我担心这需要多少时间和内存。 我宁愿让服务器将场景渲染成可以从网页播放的电影文件。
我在服务器端编程方面没有很多经验 - 服务器程序是否可以将帧渲染到 OpenGL 上下文? 它们将是屏幕外的帧缓冲区,因为没有屏幕。
关于这样做的方法有什么建议吗? 我主要将PHP用于Web编程,但似乎这不可行。 理想情况下,我想编写一个在服务器上运行的C++程序,这样我就可以重用 3DS 中的代码。 这可能吗? 我在哪里可以阅读有关执行此操作的信息?
服务器端渲染是可能的,并且会为用户提供更一致的结果,而不是依赖于跨不同浏览器和平台的一致WebGL行为(以及您已经提到的时间/内存性能问题)。 拥有功能强大的浏览器和平台的用户不会获得任何好处,因此您需要考虑用户想要什么以及他们正在使用的平台。
对于基于 Windows 的服务器,使用"无屏幕"的 OpenGL(带屏幕外帧缓冲)将是一个挑战。 您需要从窗口开始以建立图形上下文。 (可能有一项规定为 Linux 建立"无窗口"图形上下文。 您还需要确定如何管理任何用于渲染的 GPU 资源,因为在减慢和/或无法分配资源(例如帧缓冲内存)之前,它可以支持的并发渲染请求数量会有限制。
一种替代方法可能是使用 Mesa(软件 OpenGL)实现 - 这不会那么快,但从理论上讲,这将随着服务器 CPU 和内存的增加而扩展,这与大多数 Web 服务器的横向扩展方式相匹配: 台面屏幕外渲染信息
看起来一旦编写,使用 PHP 中的 args 生成C++可执行文件是微不足道的 - 尽管您可能希望将任何长时间运行的渲染路由到单独的渲染服务器以保持您的 Web 服务器响应。
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 了解 GLM- openGL 中的相机转换
- 如何在全屏模式下(在OpenGL中)使背景透明
- 为什么我不能使用 EGL 创建无头 OpenGl 上下文?
- OpenGL大的3D纹理(>2GB)非常慢
- OpenGl glm rotate
- C++atioglxx.pdb未加载错误glBufferData OpenGL
- OpenGL在启用深度测试时不会丢弃我的碎片
- OpenGL相机和相机空间转型的困惑
- OpenGL将纹理四边形渲染为(0,0)
- OpenGL 和 GLM 矩阵无法正确扩展,总是按比例缩小
- 发布旋转矩阵(openGL/glm)
- 如何在Visual Basic中使用矩形函数OpenGL绘制矩形
- 无法使用VAO和EBO(openGL)绘制多个对象
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- OpenGL 16 位模板缓冲区?
- 将QOpenGLWidget子类转换为使用Metal而不是OpenGL的子类是否可行?
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- 用于将C++代码转换为 Web 程序集的脚本未终止
- 在 Web 服务器上使用 OpenGL 进行渲染