OpenGL实时渲染传输 我正在实验开发一个C++ OpenGL渲染工具。基本思想是: 客户端像普通应用程序一样发出OpenGL命令 这些命令实际上通过网络发送到外部服务器 服务器使用一些屏幕外技术执行渲染 完成后,服务器通过网络将单个帧传输到客户端 客户端在屏幕上渲染帧 循环

OpenGL实时渲染传输 我正在实验开发一个C++ OpenGL渲染工具。基本思想是: 客户端像普通应用程序一样发出OpenGL命令 这些命令实际上通过网络发送到外部服务器 服务器使用一些屏幕外技术执行渲染 完成后,服务器通过网络将单个帧传输到客户端 客户端在屏幕上渲染帧 循环,c++,opengl,networking,rendering,C++,Opengl,Networking,Rendering,我知道如果我还没有一个成品的话,我不应该开始担心优化问题,但我很确定这会非常缓慢,瓶颈可能是网络上的单帧传输,即使这些计算机连接在同一个局域网上 我正在考虑使用某种视频流媒体库。这样,帧将使用适当的压缩算法进行传输,从而加快处理速度 我在这方面走对了吗?在这里使用视频流媒体库对吗?如果你这样想,什么是这个任务的好的库(C或C++,最好是C++)?p> 谢谢你的帮助 想象一下,为了给这两台机器提供适当的图形处理能力,他们不得不在这两台机器上都花费美元。如果将所有与图形相关的任务集中在一台机器上,则

我知道如果我还没有一个成品的话,我不应该开始担心优化问题,但我很确定这会非常缓慢,瓶颈可能是网络上的单帧传输,即使这些计算机连接在同一个局域网上

我正在考虑使用某种视频流媒体库。这样,帧将使用适当的压缩算法进行传输,从而加快处理速度

我在这方面走对了吗?在这里使用视频流媒体库对吗?如果你这样想,什么是这个任务的好的库(C或C++,最好是C++)?p>
谢谢你的帮助

想象一下,为了给这两台机器提供适当的图形处理能力,他们不得不在这两台机器上都花费美元。如果将所有与图形相关的任务集中在一台机器上,则可以避免这种情况并简化客户端开发。客户机的工作只是发送/接收/显示数据,服务器可以专注于处理图形(OpenGL)并将数据(作为帧)发送回客户机

您提到的瓶颈取决于您这边的两个因素:图像的大小以及发送/接收/显示图像所需的帧速率

以下是我读过的一些有趣的话题,希望它们能对这个主题有所启发:


您有两种解决方案

解决方案1

  • 远程运行应用程序
  • 拦截openGL调用
  • 在网络上转发它们
  • 在本地发出openGL调用
->复杂,尤其是在处理缓冲区和纹理时;真正的openGL代码是在本地执行的,这可能不是我们想要的,但取决于您。此外,它对远程应用程序是透明的(无需修改源代码,无需重建)。几乎没有网络通信

解决方案2:你所描述的,有优点也有缺点

如果您选择解决方案2,现在就不必担心速度问题。相信我,使用openGL,您将面临足够多的挑战

以同步模式开始:呈现、获取、发送、呈现、获取、发送 然后是异步模式:渲染、开始提取、渲染、结束提取、开始发送、渲染等
这已经够难的了,我认为,根据您需要支持的分辨率和局域网的速度,可以不压缩地流式传输数据

24位1280x1024帧需要30Mbit,而对于千兆以太网,这意味着理论上每秒33帧未压缩


如果这还不够,那么自己添加一个简单的RLE压缩就相当简单了。

与现有的工具(X11、ssh-X、VNC、VirtualGL)有什么区别?这实际上是一个学习教育项目,所以我不会使用它们。我没有使用过这些,所以我不知道具体的区别。但感谢您提到这些,我们将深入研究它们以获得见解。听起来像是在向类似于等人的方向迈进了一半。也许值得研究有关这些方面的文章。实际上,这正是OpenGL(及其前身IrisGL)在“旧时代”在SGI工作站上的工作方式。不完全是这样。有了网络化的GL(GLX;它是X windows的一部分,在Linux世界中仍然有效!),应用程序的OpenGL命令通过网络发送到远程显示器并在那里呈现。当所有场景内容都存储在“显示列表”中并且只需要通过网络发送一次时,这种方法非常有效。