Trying to add material in THREE.js
like this
var materialWall = new materialClass( { color: 0xffffff, map: THREE.ImageUtils.loadTexture( 'images/a.png' ) } );
It works fine in Chrome, IE, FF, until 3 days ago, after Chrome updated itself to the latest dev version 17.
Chrome 17 just doesn't load the image and complains the following
Cross-origin image load denied by Cross-Origin Resource Sharing policy.
That's insane since the image is clearly in the same domain, so is this an issue of chrome or THREE.js or something else?
this worked for me at the command line\terminal:
*note that you must close all instances of chrome before executing the command for it to work.
If you:
then I worked out a way around this which involves only a little bit of effort:
Full details can be found at http://tp69.wordpress.com/2013/06/17/cors-bypass/ for those that are interested.
Perfect solution for:
Just add timestamp to the image url. I don't know the logic behind it, but it works.
Example:
1) Chrome shortcut -> Properties -> Shortcut tab -> target and add --allow-file-access-from-files in target at last. (kill all the chrome tasks before doing this.)
OR
2) Download Mongoose web server software. Put it in your working directory, and run it. It will open in the browser http://localhost:PORT where it will serve all your files.
OR
3) You can also use NodeJS server in your application.
You can also run a simple HTTP server using python by running the following command from your root folder.
https://github.com/mrdoob/three.js/issues/687 refers to an issue on three.js' GitHub, which has good list of workarounds, including a link to a wiki page describing how to run locally. There are also some other workarounds in the thread, including adding the following to your scripts:
Or, adding CORS headers so that they are specifically allowed.
Note that most of this information was added from the already existing link to the issue, which the original author of this answer did not include.