WebGL本地纹理和跨域



我写了一个webgl程序,它可以很好地与本地服务器配合使用,现在,我想在本地运行它。但我有错误,经过一些研究,我发现在加载纹理时这是一个跨领域的问题。

function loadTexture( path ) {
    var texture = new THREE.Texture( texture_placeholder );
    var material = new THREE.MeshBasicMaterial( { map: texture, overdraw: true} );
    var image = new Image();
    image.onload = function () {
        texture.needsUpdate = true;
        material.map.image = this;
       render();
   };
   texture.deallocate();
   renderer3D.deallocateTexture( texture );
   return material;
 }

我尝试了几种解决方案:

github.com/mrdoob/three.js/issues/1305

github.com/mrdoob/three.js/issues/944

gist.github.com/ekeneijeoma/1186920

github.com/mrdoob/three.js/wiki/How-to-run-shings-lally(1.在浏览器中更改本地文件的安全性(访问页面file:///example))

我确切地说,我在Firefox上没有问题,它可以在不改变任何东西的情况下工作。在Chrome上运行的唯一解决方案是启动它——允许从文件访问文件。在IE上,我不知道如何解决它,我在浏览器中启用了安全选项"跨域访问数据源"one_answers"跨不同域导航子帧"(http://msdn.microsoft.com/fr-fr/library/ee797612(v=cs.20).aspx),但什么都没有。我使用IEWebGL,我注意到http://iewebgl.com/,"IEWebGL v1.0发布"部分,写着"-安全(无本地内容加载,无跨域纹理)"。所以,也许由于IEWebGL,它无法在IE上解决!?

那么IE的解决方案是什么呢?有没有一种方法可以通过更改代码来解决这个问题,而无需启动本地服务器或带有特殊选项的Chrome?

谢谢!

这个问题已经被问了至少6次,甚至在three.js wiki中得到了回答。

简而言之,你需要运行一个本地服务器。打开终端/shell/命令提示符并键入

cd <path/to/files>
python -m SimpleHTTPServer

然后在浏览器中转到

http://localhost:8000

为什么这不是一种选择?它很简单,解决了问题。它也不会让你的浏览器被拥有。

以下是几个可以使用的简单服务器

感谢您的回答。

事实上,它已经被提出并解决了,我看到了解决方案,它与本地服务器配合得很好,我完全同意安全性。

我之所以这么问,是因为,首先,它在Firefox和Safari上不需要任何服务器就可以工作,在谷歌上可以使用--allow。。。,所以,如果这在IE上是可能的,那就太好了。其次,因为我想要一个非常简单的程序,它可以快速工作,而不必为服务器安装python或其他东西,。。。

事实上,它适用于离线应用程序(我知道这对于基于web的应用程序来说很奇怪,但这不是我的选择:)。不管怎样,它适用于Firefox、Chrome和Safari,所以对IE来说太糟糕了。

谢谢!

相关内容

  • 没有找到相关文章

最新更新