javascript - Three.js OBJ 加载器不能在 codepen 上工作?

标签 javascript html css three.js

我试图在 Three.js 上加载一个 OBJ 文件,它在我的本地工作,当我在我的服务器上部署文件时它工作正常: http://hafsadanguir.com/THREEJS/

但它不适用于 codepen:http://codepen.io/hafsadanguir/pen/RaJaPZ

var container;
        var camera, scene, renderer;
        var mouseX = 0, mouseY = 0;
        var windowHalfX = window.innerWidth/ 2;
        var windowHalfY = window.innerHeight / 2;
        init();
        animate();

        function init() {
            container = document.createElement( 'div' );
            document.body.appendChild( container );
            camera = new THREE.PerspectiveCamera( 20, window.innerWidth / window.innerHeight, 1, 10000 );
                            camera.position.z = 900;
                            camera.position.x = -1000;
            // scene
            scene = new THREE.Scene();
            var ambient = new THREE.AmbientLight( 0x404040 ); //This creates an Ambientlight with a color.
            scene.add( ambient );

            var directionalLight = new THREE.DirectionalLight( 0xffffff, 0.5 );
            directionalLight.position.set( 0, 0, 1 );
            scene.add( directionalLight );

            // texture
            var manager = new THREE.LoadingManager();
            manager.onProgress = function ( item, loaded, total ) {
                console.log( item, loaded, total );
            };
            var texture = new THREE.Texture();
            var onProgress = function ( xhr ) {
                if ( xhr.lengthComputable ) {
                    var percentComplete = xhr.loaded / xhr.total * 100;
                    console.log( Math.round(percentComplete, 2) + '% downloaded' );
                }
            };
            var onError = function ( xhr ) {
            };
            var loader = new THREE.ImageLoader( manager );
            loader.load('http://hafsadanguir.com/THREEJS/textures/red.jpg', function ( image ) {
                texture.image = image;
                texture.needsUpdate = true;
            } );

            // model
            var loader = new THREE.OBJLoader( manager );
            loader.load('http://hafsadanguir.com/THREEJS/obj/Heart.obj', function ( object ) {
                object.traverse( function ( child ) {
                    if ( child instanceof THREE.Mesh ) {
                        child.material.map = texture;
                    }
                } );
                object.position.y = -150;

                scene.add( object );
            }, onProgress, onError );
            //
            renderer = new THREE.WebGLRenderer();
            renderer.setPixelRatio( window.devicePixelRatio );
            renderer.setSize( window.innerWidth, window.innerHeight );
            container.appendChild( renderer.domElement );
            document.addEventListener( 'mousemove', onDocumentMouseMove, false );
            //
            window.addEventListener( 'resize', onWindowResize, false );
        }
        function onWindowResize() {
            windowHalfX = window.innerWidth / 2;
            windowHalfY = window.innerHeight / 2;
            camera.aspect = window.innerWidth / window.innerHeight;
            camera.updateProjectionMatrix();
            renderer.setSize( window.innerWidth, window.innerHeight );

        }
        function onDocumentMouseMove( event ) {
            mouseX = ( event.clientX - windowHalfX ) / 2;
            mouseY = ( event.clientY - windowHalfY ) / 2;
        }
        //
        function animate() {
            requestAnimationFrame( animate );
            render();
        }


        function render() {
            //camera.position.x += ( mouseX - camera.position.x ) * .005;
            //camera.position.y += ( - mouseY - camera.position.y ) * .005;
            camera.lookAt( scene.position );
            renderer.render( scene, camera );
        }

有人可以帮忙,这是我第一次使用 three.js :)

最佳答案

我让加载程序使用最新版本的 ThreeJS。您使用的是版本 73,您应该使用 v75:

http://codepen.io/aaronfranco/pen/LNrZQg

https://cdnjs.cloudflare.com/ajax/libs/three.js/r75/three.min.js

您的服务器不允许您访问这些目标文件。我从您的服务器收到 CORS 错误。如果从同一个域加载它们,那么它应该可以工作。

但是如果没有适当的 CORS,允许原始 header ,您将无法在 CodePen 中使用它们。

> XMLHttpRequest cannot load
> http://hafsadanguir.com/THREEJS/obj/Heart.obj. No
> 'Access-Control-Allow-Origin' header is present on the requested
> resource. Origin 'http://s.codepen.io' is therefore not allowed
> access.

关于javascript - Three.js OBJ 加载器不能在 codepen 上工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36717396/

相关文章:

javascript - AngularJs 将过滤表达式传递给末尾带有 true 的指令

css - 在带有图案的 Canvas 上制作一个较暗的盒子

css - h1 在 div 中的定位问题

javascript - 查找已点击标签上最近的图像

javascript - Backbone 关系事件没有触发?

javascript - .focus() 在 Javascript 函数中不起作用

html - 我试图将我的旋转木马标题放在顶部,但它不起作用

html - 在两行之间制作小标题

javascript - AngularJS $cookieStore 停止工作

resize - 并排调整大小的div