javascript - 将 OpenGL 程序从 C 移植到 WebGL 和 Javascript

标签 javascript c websocket webgl

我正在尝试将一个非常复杂的 3D 建模程序(用 C 编写)移植到 webGL。该程序有自己的从头开始编写的物理引擎,我想使用物理引擎输出的变换数据作为矩阵来变换网页中呈现的对象。

程序太大了,我想将物理引擎保留在 C 语言中,但将图形部分放入浏览器中。

我的疯狂想法是让物理引擎在服务器上持续运行,然后将变换矩阵流式传输到客户端,并将变换应用到预渲染的 WebGL 对象。

这可以做到吗?

说明:该程序是一个查看器,因此所有物理后端都与用户输入隔离。但是,用户将能够在客户端操纵摄像机 Angular 。

更新:我决定实现以下解决方案,如果其中有任何错误,请告诉我:我将使用 node.js 将 C 程序托管为守护进程,并使用websockets 到前端 - pixi.js(用于 2D 元素)和 Babylon.js(或 Three.js)(用于 3D 元素)。数据将由 JSON 对象(四元数或正弦/余弦矩阵)组成,这些对象将在 JavaScript 的前端处理并每秒应用一次(fps 在我的情况下并不重要,所以没关系)

最佳答案

推送和弹出矩阵是辅助的(不是渲染管道的核心部分),因此您可以使用自定义堆栈复制它们。

关于整个疯狂的想法:
在交互式物理的情况下,延迟可能是一个问题,您将需要在客户端进行某种位置外推。最坏的情况是如果您有多个客户。想象一下,一个客户端引起了一些物理事件,然后它将数据发送到服务器,服务器将其发送到另一个客户端。因此,您将获得有效的双倍延迟,最后,当您有 3 个状态(如果您有更多客户端,甚至更多)时,将很难解决不一致的问题。每个客户端有一个唯一状态,服务器有一个实际状态。延迟越大 - 不一致程度越高。物理学对这种不一致性非常敏感,因为它往往会滚雪球。因此,您的客户可能会看到一些奇怪的东西突然出现和消失、隐形传送、穿过固体物体坠落。

关于javascript - 将 OpenGL 程序从 C 移植到 WebGL 和 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24611068/

相关文章:

javascript - 在 AngularJS 中使用循环和 ng-class 创建包装 DIV

javascript - 维护正确的 CSS\Javascript 和使用模板引擎——矛盾吗?

javascript - Backbone JS 中心模型,所有 View 都可以使用

c - 请向我解释为什么这个带有 if 语句的简单 C 程序不起作用?

javascript - Vue 中的动态条件轮播项目选择

c - 为什么输出为负(使用按位非)

c - 为什么我自己的 suid-ed 程序仍然保留原来的 uid?

angularjs - 如何使用 Websockets 更新 REST API 请求状态

websocket - 如何使用 Dart 连接到 https websocket?

swift - Web 套接字 Swift 崩溃链接