c# - 在渲染集群中的节点之间同步 View 状态

标签 c# network-programming opentk

我正在构建一个显示墙演示应用程序。

环境:

  • N 台机器,每台最多驱动六个显示器
  • 有线千兆交换机
  • OpenTK 应用程序绘制漂亮的图片,在每个节点上运行 1 个副本

每个节点运行演示可执行文件的相同副本。每个节点还有一些配置数据,其中包含整面墙的分辨率以及该节点显示器在该空间内的相对位置。渲染时,在投影矩阵之后应用缩放/平移变换(有效地放大节点负责渲染的 View 部分。

节点在启动脚本中设置了“模式”开关,将它们置于“发送”或“接收”模式。除一个节点外,所有节点都处于“接收”状态。 (将一个节点切换为“发送”会导致所有其他节点切换为“接收”)。

演示应用程序是一些基本几何体(网格、二十面体等)的基本 FPS 类型飞行。在每次更新时,发送方节点都会广播一个包含一些状态信息(相机平移/旋转、移动对象的变换)的 UDP 数据报。

监听器异步接收这些数据报、反序列化状态并更新其本地副本。

最终效果是我在我的笔记本电脑上运行该应用程序并四处飞来飞去,墙也很好地跟随了它。这一切都很好。

但是,我担心随着系统的扩展(从 10 个显示器到 500 个显示器),网络延迟将成为一个问题。我还认为,与其以这种方式在网络上发送垃圾邮件状态,不如将其填充到数据库中并让每个节点从那里拉出,但我怀疑任何现成的数据库都不会达到一个 60FPS * 500 个节点的周期。

建议?在大量节点之间真正、非常快速地共享状态的最佳方式是什么?

最佳答案

我在 gamedev.stackexchange.com 上收到了相当完整的回复.有意者可以查看here .

关于c# - 在渲染集群中的节点之间同步 View 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15124892/

相关文章:

c# - 为什么Autofac的用于动态实例化的隐式关系类型(Func <B>)遵守生存期范围?

c# - 当我不需要快速访问它们的值时可以使用字典吗?

java - 测量下载数据量

c++ - QNetworkCookieJar 中的 setCookiesFromUrl() 和 cookiesForUrl

opengl - 尝试创建多重采样帧缓冲区时获取 FramebufferIncompleteMultisample

c# - 将数组传递给可变长度参数列表

c# - 设置特定 session 的超时

c - 100% cpu 使用率和一个 libpcap 简单示例

c# - 如何避免在 openTK 中使用动态文本耗尽内存

c# - opentk 的实用程序库