是否可以在 Web 浏览器上运行与 SDL+OpenGL 代码绑定的 C++?
Posted
技术标签:
【中文标题】是否可以在 Web 浏览器上运行与 SDL+OpenGL 代码绑定的 C++?【英文标题】:Is it possible to run C++ binded with SDL+OpenGL code on a web browser? 【发布时间】:2009-08-25 09:57:29 【问题描述】:我的客户希望她的网站有一个渲染 3D 的应用程序(轻 3D 的东西,我们在 3D 世界中只绘制平面正方形),但网络编程不是我的事。所以我正在寻找可以从网络浏览器运行 C++ 程序的东西。但是我想,如果是这样的话,那么客户端必须先下载程序,这不是我想要的。客户应该只能在网站上使用此应用程序。
我遇到了 Google Native Client,它声称它可以在 Web 应用程序中运行 x86 本机代码。我还没有决定它是否值得,我不知道这是否是我想要的,所以我决定询问有经验的人。
如果我想要这样的东西,我上面所说的可能吗?或者我完全需要像 Flex 这样的其他语言,因为它不值得麻烦?还是 Google Native Client 适合做这样的事情?
【问题讨论】:
你可以用 C++ 写一个浏览器插件吗? 现在看来可能:developers.google.com/native-client/community/porting/SDLgames 【参考方案1】:在浏览器中显示 C++ 的唯一稳定选择是让用户下载插件。
否则您可以查看 javascript 解决方案,也许 O3D 可能是您正在寻找的?
【讨论】:
O3D 看起来很诱人。让我试一试。【参考方案2】:Java 小程序也可能是一种选择。将代码转换为 Java 可能更容易,因为它的语法与 C++ 相似,而且 Java3D API 可能非常有用。显然它很容易使用,虽然我自己没有使用过。 Java3D.org 网站是一个很好的起点。
大多数人已经安装了 Java 和 Flash,所以两者都相当安全。
【讨论】:
Java 小程序?我不知道。我有一种感觉,这些天我不再看到 Java Applet。我看到了 Flash、Flex 等。 Java 小程序还在吗? 是的,取决于上下文。处理与外观。如果您只想要一个闪亮的按钮或媒体播放器,您可能不会使用 Java。如果您想要更密集的代码,例如 3D 模拟或分形计算器,您可能不会使用 Flash。 Java 的最新功能之一是 WebStart,它基本上允许通过 Web 将 Java 程序安装到主机上(尽管这可能超出您的需要)。最近两个主要的 Java 程序是 Geogebra(几何/绘图,流行的教育工具)和 Centra(网络会议、演示和教室)。【参考方案3】:Google 的NativeClient 框架支持您想做的事情。这是一个用户必须安装的插件,但它运行一个沙盒 C++ 应用程序,就好像它是一个浏览器插件一样。它似乎正是您想要的。
正如其他人所指出的,您的其他选项是 Silverlight 小程序、Flash 小程序、Java 小程序、html5 Canvas 标记或实际插件(用于 IE 的 ActiveX,用于所有其他浏览器的 NPAPI)。
【讨论】:
【参考方案4】:不,NativeClient 不是你想要的。它不会让你运行 SDL+OpenGL —— 它可能是 C++ 代码,但它是在沙箱中运行的。
在浏览器中运行 SDL 通常很困难。 OpenGL 稍微少一些,但它也不是小菜一碟。如果您希望它跨浏览器和平台工作,那么任何这样的本机代码解决方案都是困难的——您必须为多个平台开发 NPAPI 插件(这将是完全不同的),以及一个 ActiveX 控件。您正在查看四个独立的项目。
几乎可以肯定,这里的正确答案是以一种或另一种形式使用 Flash。
【讨论】:
【参考方案5】:唯一可以在浏览器中“运行”的是 ActiveX 控件。因此,无论您采用哪种方式(用 C++ 编写的 COM 对象、Silverlight 应用程序,甚至是 Flash 程序),它们都必须托管在可下载的 ActiveX 中。因此,如果要求您不得下载任何内容,那么您就不走运了。
话虽如此,Flash 几乎随处可用,我相当肯定它可以满足您的需求,而 Silverlight 虽然还没有那么流行,但它是为这类事情量身定做的,并且正在迅速普及接受网络编程世界。您可以使用其中任何一个。
【讨论】:
真的吗?我可以在 Firefox 和 Google chrome 中运行 activeX 吗?因为IE肯定不是浏览器,更像是一个专门的病毒传递平台。 Firefox、Chrome 等。 al.,支持 NPAPI 框架。 Firefox(和其他基于 Gecko 的浏览器)支持基于 XPCOM 的插件。只有 IE 支持 ActiveX。 但是你明白了,你仍然需要下载一些东西,不管你怎么称呼它。【参考方案6】:如果您决定采用插件路线,FireBreath 是一个项目,可让您创建一个插件(您可以从中进行渲染),该插件将编译为一个 NPAPI 插件(firefox、google chrome、apple safari)和一个 ActiveX 控件 (IE)
【讨论】:
【参考方案7】:您也可以查看OSAKit。它是一组浏览器插件和一组工具,用于将现有的本机可执行文件包装到插件可以在浏览器中运行的包中。包装过程真的很简单,可以在5分钟内完成。整个事情看起来有点不专业,但确实有效。 (不过,我不确定安全性,这可能是您的客户担心的问题。)
【讨论】:
【参考方案8】:Ricardo Cabello 开发了一个名为 three.js 的 Javascript 3d 软件渲染引擎。它非常适合您,因为您只需要轻量级的图形,而 Javascript 缺少一些 Flash 问题(如焦点窃取、加载缓慢和讨厌的上下文菜单)。
不幸的是,似乎没有任何文档。不过有examples 和demos。
其中一个演示:here
【讨论】:
【参考方案9】:我从没想过你可以在没有 Native Client 或插件的情况下做到这一点,但最近发现了 emscripten,让我大吃一惊。
http://kripken.github.io/emscripten-site/
Emscripten 是一个基于 LLVM 的项目,它将 C 和 C++ 编译为 asm.js 格式的高度可优化的 JavaScript。这让您无需插件即可在网络上以接近本机的速度运行 C 和 C++。
Emscripten 将 OpenGL 转换为 WebGL,让您可以直接使用熟悉的 API,如 SDL 或 HTML5。
【讨论】:
以上是关于是否可以在 Web 浏览器上运行与 SDL+OpenGL 代码绑定的 C++?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以从 WinForm/WPF C# App 与 Web 浏览器进行交互?