Sprite(标签)在three.js中不可见

时间:2017-09-05 16:38:24

标签: javascript three.js

我正在学习使用" three.js"图书馆。我可以通过将鼠标移到它上面来改变球体的颜色,但我不能得到名称为#34; ESFERA"当我这样做的时候。浏览器控制台不会返回任何错误。

我是这个图书馆的新手。我花了很多时间在互联网上查看示例和代码。

<!DOCTYPE html>
<html>
<head>
    <title>Ratón y objeto con Three.js.</title>
    <script type="text/javascript" src="../three.js"></script>
    <script type="text/javascript" src="../jquery-1.9.0.js"></script>
    <script type="text/javascript" src="../Projector.js"></script>
    <style>
        /* Configurar margin a 0 y overflow hidden, para ocupar pantalla completa. */
        margin:0;
        overflow:hidden;
    </style>
</head>
<body>
    <!-- "div" que contendrá la salida. -->
    <div id="WebGL-salida">
    </div>
    <!-- "script" que ejecuta nuestros ejemplos Three.js. -->
    <script type="text/javascript">
        // Una vez que todo ha sido cargado, ejecutamos nuestro contenido Three.js.
        $(function() {

            // Declaración de variables como globales.
            var scene, camera, renderer, axes, raycaster;
            var canvas1, context1, texture1, sprite1;
            var mouse = {x:0, y:0};
            var projector, INTERSECTED, sphere;

            // Llamada a la función "init()"".
            init();

            // Llamada a la función "animate()".
            animate();

            // Lamada del afunción "Render()".
            render();

            function init() {

                // Creación de una escena.
                scene = new THREE.Scene();
                // Creación de una cámara.
                // PerspectiveCamera(campo de visión, relación de aspecto(ancho del elemento/altura), plano de recorte cercano, plano de recorte lejano)
                camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 0.1, 20000);
                // Creación de un render.
                renderer = new THREE.WebGLRenderer();
                // Dar color al renderer.
                renderer.setClearColor(0xEEEEEE, 1); // color blanco
                // Especificar el ancho y el alto del renderer.
                renderer.setSize(window.innerWidth, window.innerHeight);

                // Añadir la salida de la renderización al elemento html.
                $("#WebGL-salida").append(renderer.domElement);

                // Ejes de ayuda para situar los elementos.
                axes = new THREE.AxisHelper(20);
                // Añadir los ejes de ayuda a la escena.
                // (x, y, z) = (rojo, verde, azul)
                scene.add(axes);

                // Definir la esfera.
                // SphereGeometry(radio esfera, ancho segemento, altura segmento)
                var sphereGeometry = new THREE.SphereGeometry(1, 20, 20);
                // Decidimos como se verá la esfera.
                var sphereMaterial = new THREE.MeshBasicMaterial({color: 0x7777ff}); // color azul  
                // Creamos un objeto tipo esfera.
                sphere = new THREE.Mesh(sphereGeometry, sphereMaterial);
                // Posicionamos la esfera en la escena.
                sphere.position.x = 0;
                sphere.position.y = 0;
                sphere.position.z = 0;
                // Añadimos un nombre al objeto creado.
                sphere.name = "ESFERA";
                // Añadimos la esfera a la escena.
                scene.add(sphere);

                // Posicionamos la cámara y la apuntamos al centro de la escena.
                camera.position.x = -30;
                camera.position.y = 40;
                camera.position.z = 50;
                camera.lookAt(scene.position);

                projector = new THREE.Projector();

                // Cuando se mueve el ratón llamamos a la función"onDocumentMouseMove()".
                document.addEventListener('mousemove', onDocumentMouseMove, false);

                // Dibujar el texto en un objeto canvas.
                // Crear un elemento canvas.
                canvas1 = document.createElement("canvas");
                context1 = canvas1.getContext("2d");
                context1.font = "Bold 20px Arial";
                context1.fillStyle = "rgba(0,0,0,0.95)";
                context1.fillText("Hello world!", 0, 0);

                // El contenido del elemento canvas será utilizado por un elemento de textura.
                texture1 = new THREE.Texture(canvas1);
                texture1.minFilter = THREE.LinearFilter;
                texture1.needsUpdate = true;

                // Añadir el elemento canvas al sprite.
                var spriteMaterial = new THREE.MeshBasicMaterial({map: texture1});
                // Creación del sprite.
                sprite1 = new THREE.Sprite(spriteMaterial);
                // Tamaño del sprite.
                sprite1.scale.set(200, 100, 1);
                // Posición del sprite.
                sprite1.position.set(10, 10, 10);
                // Añadimos el sprite a la escena.
                scene.add(sprite1);

           };

           function onDocumentMouseMove(event) {
               // Cambiamos de posición el sprite creado.
               sprite1.position.set(event.clientX, event.clientY-20,0);
               // Calculamos la nueva posición del ratón.
               mouse.x = (event.clientX/window.inneWidth)*2-1;
               mouse.y = -(event.clientY/window.innerHeight)*2+1;
           }

           function animate() {
               requestAnimationFrame(animate);
               update();
               render();
           }

           function update() {
               var vector = new THREE.Vector3(mouse.x, mouse.y, 1);
               vector.unproject(camera);
               var raycaster = new THREE.Raycaster(camera.position, vector.sub(camera.position).normalize());
               var intersects = raycaster.intersectObjects(scene.children);
               if(intersects.length >0) {
                    if(INTERSECTED != intersects[0].object) {
                       if(INTERSECTED) {            
                  INTERSECTED.material.color.setHex(INTERSECTED.currentHex);
                        }
                        INTERSECTED = intersects[0].object;
                        INTERSECTED.currentHex = INTERSECTED.material.color.getHex();
                        INTERSECTED.material.color.setHex(0xffff00);
                        if(intersects[0].object.name) {
                            console.log("dentro");
                            context1.clearRect(0, 0, 640, 480);
                            var message = intersects[0].object.name;
                            var metrics = context1.measureText(message);
                            var width = metrics.width;
                            context1.fillStyle = "rgba(0,0,0,0.95)";
                            context1.fillRect(0, 0, width+8, 20+8);
                            context1.fillStyle = "rgba(255,255,255,0.95)";
                            context1.fillRect(2, 2, width+4, 20+4);
                            context1.fillStyle = "rgba(0,0,0,1)";
                            context1.fillText(message, 4,  20);
                            texture1.needsUpdate = true;
                        }else{
                            console.log("fuera");
                            context1.clearRect(0, 0, 300, 300);
                            texture1.needsUpdate = true;
                        }
                    }
                }else{
                    if(INTERSECTED) {               
                   INTERSECTED.material.color.setHex(INTERSECTED.currentHex);
                    }
                    INTERSECTED = null;
                    context1.clearRect(0, 0, 300, 300);
                    texture1.needsUpdate = true;    
                }

            }

            // Renderizar la escena.
            function render() {         
                renderer.render(scene, camera);
            }

        })
    </script>
</body>

拜托,您能告诉我错误的位置,指出我必须修改或添加的代码吗?

请勿将我发送到其他页面。

提前致谢!!!!

0 个答案:

没有答案