【发布时间】:2014-03-24 19:36:54
【问题描述】:
我有一个由单独域上的服务器动态生成的 OBJ 文件。它有一些材质和纹理的JPG文件。
我用一个简单的 php 代理 (fileProxy.php) 加载这个 OBJ 文件:
<?php
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Credentials: true");
header('Access-Control-Allow-Headers: X-Requested-With');
header('Access-Control-Allow-Headers: Content-Type');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE, PUT'); // http://stackoverflow.com/a/7605119/578667
header('Access-Control-Max-Age: 86400');
//Check if this is an image. if So print coorect header.
if (strpos($_REQUEST['fileToProxy'],'jpg') !== false) {
header('Content-Type: image/jpeg');
}
$proxyFile = (isset($_REQUEST['fileToProxy'])? $_REQUEST['fileToProxy'] : null);
if ( isset($proxyFile)){
// the files sent to us aren't properly url encoded
$proxyFile = str_replace(' ', '+', $proxyFile);
$content = file_get_contents($proxyFile);
print($content);
}
else {
echo "ERROR: no file to proxy";
}
?>
加载 OBJ 文件就像一个魅力
但是,我无法加载嵌入在 MTL 文件中的 JPG 纹理。单色着色器都可以正常工作,但加载图像时出现错误。
我在 chrome 中收到以下错误:
未捕获的安全错误:无法在“WebGLRenderingContext”上执行“texImage2D”:http://ec2-54-201-204-177.us-west-2.compute.amazonaws.com/fileProxy.php?fil…est-2.compute.amazonaws.com/3DModels/435639/DonutFullBread.jpg&timtest=115 的跨域图像可能未加载。
现在检查我的网络监视器后,我意识到 Jpg 图像已成功下载,并且正确的 CORS 标头都已到位。但是 webgl/three.js 仍然吐出错误并且不显示我的模型。
所以这似乎是一个 WEBGL 错误。但是我在所有浏览器中都遇到了安全错误。 我已经在我的本地主机和服务器上对此进行了测试。同样的问题。
有什么解决办法吗?
更新 以下是我如何使用 three.js 加载 OBJ/MTL 文件: (只有跨域纹理失败)
var loader = new THREE.OBJMTLLoader( manager);
///////////////////LOAD MDOEL////////////////////
loader.load( 'http://ec2-54-201-204-177.us-west-2.compute.amazonaws.com/fileProxy.php?fileToProxy=' + obj.file, 'http://ec2-54-201-204-177.us-west-2.compute.amazonaws.com/fileProxy.php?fileToProxy=' + obj.material, function ( object ) {
//if loaded, do some stuff here.
}
loadedmodel.add(object);
这就是我所做的一切。加载程序正确地表述了材料和纹理。 我不需要设置任何材料。
【问题讨论】:
标签: three.js textures webgl cors