Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Three.js中加载托管在Google云存储上的obj和mtl文件_Three.js_Google Cloud Storage - Fatal编程技术网

在Three.js中加载托管在Google云存储上的obj和mtl文件

在Three.js中加载托管在Google云存储上的obj和mtl文件,three.js,google-cloud-storage,Three.js,Google Cloud Storage,我正在构建一个处理3D数据的web应用程序,并希望呈现属于每个用户的3D数据。3D文件(.obj、.mtl、png等)存储在中,用户只能访问自己的3D文件 我现在正在尝试使用渲染3d文件,但我一生都找不到一种使用OBJLoader和MTLLoader加载文件的好方法。如果我将文件作为静态内容从服务器中提供,则加载和渲染效果很好,但我找不到加载存储在GCS中的非公共文件的方法 我正在使用此代码加载静态文件 const mtlFile = "test.mtl"; const objFIle = "t

我正在构建一个处理3D数据的web应用程序,并希望呈现属于每个用户的3D数据。3D文件(.obj、.mtl、png等)存储在中,用户只能访问自己的3D文件

我现在正在尝试使用渲染3d文件,但我一生都找不到一种使用OBJLoader和MTLLoader加载文件的好方法。如果我将文件作为静态内容从服务器中提供,则加载和渲染效果很好,但我找不到加载存储在GCS中的非公共文件的方法

我正在使用此代码加载静态文件

const mtlFile = "test.mtl";
const objFIle = "test.obj";
var mtlLoader = new THREE.MTLLoader();
mtlLoader.load(mtlFile, function( materials ) {
    materials.preload();
    var objLoader = new THREE.OBJLoader();
    objLoader.setMaterials( materials );
    ObjLoader.load( objFile, function ( object ) {
        object.position.z = 40;
        scene.add( object );
    }, onProgress, onError );
});
问题是my mtl文件通常如下所示:

newmtl default
Ka 1.00 1.00 1.00
Kd 1.00 1.00 1.00
Ks 0.00 0.00 0.00
Ns 20.00
illum 2

newmtl test
Ka 1.00 1.00 1.00
Kd 1.00 1.00 1.00
Ks 0.00 0.00 0.00
Ns 20.00
illum 2
map_Ka test.png
map_Kd test.png
i、 它指向一个名为test.png的文件。可以设置一个基本路径,因此如果我可以使用一个url来提供文件,那么在这里就可以了

但是,我希望文件只能由创建它们的用户访问。如果我在GCS中托管test.png,我可以得到一个签名链接,如下所示:

newmtl default
Ka 1.00 1.00 1.00
Kd 1.00 1.00 1.00
Ks 0.00 0.00 0.00
Ns 20.00
illum 2

newmtl test
Ka 1.00 1.00 1.00
Kd 1.00 1.00 1.00
Ks 0.00 0.00 0.00
Ns 20.00
illum 2
map_Ka test.png
map_Kd test.png

我找不到一种方法来很好地使用OBJ/MTL装载机

那么,关于如何解决这个问题有什么建议吗?我是否需要构建某种文件代理,只为连接到用户的文件提供服务


顺便说一句,我正在托管我自己的用户数据库和身份验证,因此与用户的google帐户没有连接。

为了实现理想的安全性,代理可能最适合您的需要。它不必实际代理所有数据。也许three.js可以很好地处理重定向?您可以向已签名的URL发出重定向

但是,这取决于如何对这些对象的隐私进行建模。如果你只是给所有这些对象一个很长的随机名称,实际上是不可能猜到的,那么只要没有坏的一方可以知道对象名称,你就基本上解决了你的安全问题。这将快速解决您的问题,而无需构建复杂的额外服务

当然,安全建模是复杂的。您是否关心撤销访问权限的需要?您是否需要能够限制用户可以访问对象的时间?用户是否应该能够共享对对象的访问权限?我不知道这些问题的答案。但是,通过HTTPS匿名访问的长的、不可用的名称对于许多人来说已经足够了