7

学了一点webGL,主要是用three.js。我加载 .obj 文件并以 3D 形式绘制它们。

我已将我的项目放在网上,例如:www.mydomain.com

我不介意人们通过他们的浏览器查看我的源代码,但我展示的 .obj 文件来自不想泄露它们的人。

我是一个关于这个的新手。

由于我的源代码可供所有人使用,我猜测 .obj 文件也可供所有人使用。那么是否有可能隐藏或保护它们以便没有人可以下载它们?

4

3 回答 3

8

如果您想在 Javascript / WebGL 中访问和使用它们,我很确定您无法保护任何文件。它们需要在某个时候被解析为可用的格式,以便浏览器/javascript 能够显示它们。你有两个选择:

1) 混淆。我认为这不是一个很好的选择,因为最终有人总是可以使用 Firebug 和其他工具来访问您的文件的一些有用的表示。您可以通过在服务器端加密或加扰数据以及在 Javascript 中重建内容来使其变得不那么容易。或者只是使用非常规的方式来加载和表示文件。

您还可以在着色器代码中进行一些解码/解密,这将更难窃取。但这可能仅适用于纹理。

2)使文件不那么有用。如果有人要重用您的 OBJ 文件,他们可能希望将模型导入他们选择的软件并做一些事情。您无法阻止这种情况,但您可以去除文件中的额外信息,使文件更易于使用。这将使文件对任何潜在的窃贼来说都不那么理想。

我这样做的原因完全不同,但我对 WebGL 的主要使用涉及将模型从 Sketchup 导出到 Collada,并在 WebGL 中显示它们。我的导出代码做了一些事情,作为副作用,导出的模型很难使用。这包括使所有组件实例唯一(去实例化?),将所有组件和组分解为普通几何体,对所有面进行三角剖分,删除隐藏的几何体等。

在没有原始文件的情况下将其带回 Sketchup 进行编辑将是一个 PITA……特别是因为我使用的模型本质上很大程度上依赖于组件和组实例化。但是,仍然没有什么能阻止某人“按原样”窃取几何图形。

于 2013-01-02T12:58:17.550 回答
2

如果有人可以下载到浏览器,那么它就在用户的计算机上。

您可以使读取文件更加困难,但这只会减慢获取 .obj 数据的速度。如果有人想这样做,那么他/她最终可以做到。解密密钥必须始终在客户端计算机上。所以你只能放慢这个过程。所以问题变成了“你想让你的 .obj 阅读代码有多困难和多复杂,值得付出努力吗?” 只需在文件开头添加一个额外的字节就足以使文件无法像在建模软件中那样打开。

我建议你教育你的人互联网是如何工作的,并简单地说这是不可能或不值得尝试这样做,并避免自己提出自制实现如何使数据读取更加困难。

于 2013-01-02T13:19:25.737 回答
2

查看其他答案,但这并不是 WebGL 独有的。任何语言的任何程序都有这个问题。一旦数据在用户的计算机、手机等上,人们就可以获取数据。例子:

  1. 读取 iOS 应用的数据
  2. 读取本地 PC 应用程序的数据

另一方面,您可以遵循上述技术。使用您自己的格式。按摩数据,使其最适合渲染,这通常不利于编辑。

当然,您当然也可以让您的文件首先要求有人登录您的网站才能阅读它们,类似于 gmail、facebook、google docs 等要求您登录的方式。这不会阻止他们在注册后获取文件,但是。您还可以设置您的服务器,以便只有您的应用程序可以下载文件。同样,这不会阻止用户在您的应用下载文件(或他们通过浏览器扩展程序注入 JavaScript)后获取文件,但可以防止您的带宽从直接链接到您数据的其他站点被盗。

于 2013-01-03T17:08:57.440 回答