Three.js 使用 THREE.TextureLoader() 加载图像时出现 CORS 错误

Three.js CORS errors when loading image with THREE.TextureLoader()

当我尝试从服务器加载图像时出现 cors。通常我可以使用 img 标签 load/display 图像,但是当我尝试使用 THREE.TextureLoader() 加载它时;它 returns cors 错误。

我试着像下面这样处理它。

const loader = new THREE.TextureLoader();

loader.setCrossOrigin("anonymous");

let texture = loader.load(src,
  function ( texture ) {},

  function ( progress ) {},
  // error drops as cors
  function ( error ) {console.log(error)});

let material = new THREE.MeshBasicMaterial({map: texture});
let mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);

许多回答说 crossOrigin = "" 解决了问题,但事实并非如此。 cors 使用 textureloader 处理是否有任何解决方法?

loader.setCrossOrigin("anonymous");

由于 anonymouscrossOrigin 的默认值,因此无需明确设置。

TextureLoader 上下文中出现 CORS 问题时,您必须通过确保正确定义 CORS headers 来解决 server-side 上的问题。这种headers的配置取决于您使用的网络服务器。

Djangothree.js 让我有点困惑。因为通常我可以毫无问题地显示图像,除了 three.js。我的意思是没有 CORS 错误,因为我正在使用 corsheaders 模块处理它。但看起来 three.js 并不关心那部分。所以我在媒体目录的 domain.conf 文件中直接进行了 Allow-Origin 处理。

<Directory "/var/www/domain/media">
    Header set Access-Control-Allow-Origin "*"
    Options FollowSymLinks
    Order allow,deny
    Allow from all
    Require all granted
</Directory>

最后这样解决了问题。