狂暴的大将军吧 关注:498贴子:9,347
  • 4回复贴,共1
// SKYBOX
var imagePrefix = "images/dawnmountain-";
var directions = ["xpos", "xneg", "ypos", "yneg", "zpos", "zneg"];
var imageSuffix = ".png";
var skyGeometry = new THREE.CubeGeometry( 5000, 5000, 5000 );
var urls = [];
for (var i = 0; i < 6; i++)
urls.push( imagePrefix + directions[i] + imageSuffix );
var materialArray = [];
for (var i = 0; i < 6; i++)
materialArray.push( new THREE.MeshBasicMaterial({
map: THREE.ImageUtils.loadTexture( imagePrefix + directions[i] + imageSuffix ),
side: THREE.BackSide
}));
var skyMaterial = new THREE.MeshFaceMaterial( materialArray );
var skyBox = new THREE.Mesh( skyGeometry, skyMaterial );
scene.add( skyBox );


IP属地:湖北1楼2016-05-09 15:56回复
    IP属地:湖北2楼2016-05-09 16:06
    回复
      IP属地:湖北3楼2016-05-09 16:15
      回复
        <!doctype html>
        <html lang="en">
        <head>
        <title>Topology Data (Three.js)</title>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
        <link rel=stylesheet href="css/base.css"/>
        </head>
        <body>
        <script src="js/Three.js"></script>
        <script src="js/Detector.js"></script>
        <script src="js/Stats.js"></script>
        <script src="js/OrbitControls.js"></script>
        <script src="js/THREEx.KeyboardState.js"></script>
        <script src="js/THREEx.FullScreen.js"></script>
        <script src="js/THREEx.WindowResize.js"></script>
        <script src="js/topology.js"></script>
        <!-- jQuery code to display an information button and box when clicked. -->
        <script src="js/jquery-1.9.1.js"></script>
        <script src="js/jquery-ui.js"></script>
        <link rel=stylesheet href="css/jquery-ui.css" />
        <link rel=stylesheet href="css/info.css"/>
        <script src="js/info.js"></script>
        <div id="infoButton"></div>
        <div id="infoBox" title="Demo Information">
        This three.js demo is part of a collection at
        <a href="http://stemkoski.github.io/Three.js/">http://stemkoski.github.io/Three.js/</a>
        </div>
        <!-- ------------------------------------------------------------ -->
        <div id="ThreeJS" style="position: absolute; left:0px; top:0px"></div>
        <script>
        /*
        Three.js "tutorials by example"
        Author: Lee Stemkoski
        Date: July 2013 (three.js v59dev)
        */
        // MAIN
        // standard global variables
        var container, scene, camera, renderer, controls, stats;
        var keyboard = new THREEx.KeyboardState();
        var clock = new THREE.Clock();
        init();
        animate();
        // FUNCTIONS
        function init()
        {
        // SCENE
        scene = new THREE.Scene();
        // CAMERA
        var SCREEN_WIDTH = window.innerWidth, SCREEN_HEIGHT = window.innerHeight;
        var VIEW_ANGLE = 45, ASPECT = SCREEN_WIDTH / SCREEN_HEIGHT, NEAR = 0.1, FAR = 20000;
        camera = new THREE.PerspectiveCamera( VIEW_ANGLE, ASPECT, NEAR, FAR);
        scene.add(camera);
        camera.position.set(0,150,400);
        camera.lookAt(scene.position);
        // RENDERER
        if ( Detector.webgl )
        renderer = new THREE.WebGLRenderer( {antialias:true} );
        else
        renderer = new THREE.CanvasRenderer();
        renderer.setSize(SCREEN_WIDTH, SCREEN_HEIGHT);
        container = document.getElementById( 'ThreeJS' );
        container.appendChild( renderer.domElement );
        // EVENTS
        THREEx.WindowResize(renderer, camera);
        THREEx.FullScreen.bindKey({ charCode : 'm'.charCodeAt(0) });
        // CONTROLS
        controls = new THREE.OrbitControls( camera, renderer.domElement );
        // STATS
        stats = new Stats();
        stats.domElement.style.position = 'absolute';
        stats.domElement.style.bottom = '0px';
        stats.domElement.style.zIndex = 100;
        container.appendChild( stats.domElement );
        // LIGHT
        var light = new THREE.PointLight(0xffffff);
        light.position.set(0,250,0);
        scene.add(light);
        // SKYBOX/FOG
        var skyBoxGeometry = new THREE.CubeGeometry( 10000, 10000, 10000 );
        var skyBoxMaterial = new THREE.MeshBasicMaterial( { color: 0x9999ff, side: THREE.BackSide } );
        var skyBox = new THREE.Mesh( skyBoxGeometry, skyBoxMaterial );
        scene.add(skyBox);
        ////////////
        // CUSTOM //
        ////////////
        var geometry = new THREE.SphereGeometry( 100, 4, 3 );
        geometry.mergeVertices();
        geometry.computeCentroids();
        var material = new THREE.MeshNormalMaterial();
        mesh = new THREE.Mesh( geometry, material );
        mesh.position.set(0,0,0);
        scene.add(mesh);
        var topo = new TOPOLOGY.createFromGeometry(geometry);
        topo.computeCenters();
        // draw labels.
        for (var i = 0; i < topo.vertex.length; i++)
        {
        var spritey = makeTextSprite( " " + i + " ", { fontsize: 32, backgroundColor: {r:255, g:100, b:100, a:1} } );
        spritey.position = topo.vertex[i].vector3.clone().multiplyScalar(1.1);
        scene.add( spritey );
        }
        for (var i = 0; i < topo.edge.length; i++)
        {
        var spritey = makeTextSprite( " " + i + " ", { fontsize: 32, backgroundColor: {r:100, g:255, b:100, a:1} } );
        spritey.position = topo.edge[i].center.clone().multiplyScalar(1.1);
        scene.add( spritey );
        }
        for (var i = 0; i < topo.face.length; i++)
        {
        var spritey = makeTextSprite( " " + i + " ", { fontsize: 32, backgroundColor: {r:100, g:100, b:255, a:1} } );
        spritey.position = topo.face[i].center.clone().multiplyScalar(1.1);
        scene.add( spritey );
        }
        // inspect for correctness.
        console.log(topo);
        }
        function makeTextSprite( message, parameters )
        {
        if ( parameters === undefined ) parameters = {};
        var fontface = parameters.hasOwnProperty("fontface") ?
        parameters["fontface"] : "Arial";
        var fontsize = parameters.hasOwnProperty("fontsize") ?
        parameters["fontsize"] : 18;
        var borderThickness = parameters.hasOwnProperty("borderThickness") ?
        parameters["borderThickness"] : 4;
        var borderColor = parameters.hasOwnProperty("borderColor") ?
        parameters["borderColor"] : { r:0, g:0, b:0, a:1.0 };
        var backgroundColor = parameters.hasOwnProperty("backgroundColor") ?
        parameters["backgroundColor"] : { r:255, g:255, b:255, a:1.0 };
        var spriteAlignment = THREE.SpriteAlignment.topLeft;
        var canvas = document.createElement('canvas');
        var context = canvas.getContext('2d');
        context.font = "Bold " + fontsize + "px " + fontface;
        // get size data (height depends only on font size)
        var metrics = context.measureText( message );
        var textWidth = metrics.width;
        // background color
        context.fillStyle = "rgba(" + backgroundColor.r + "," + backgroundColor.g + ","
        + backgroundColor.b + "," + backgroundColor.a + ")";
        // border color
        context.strokeStyle = "rgba(" + borderColor.r + "," + borderColor.g + ","
        + borderColor.b + "," + borderColor.a + ")";
        context.lineWidth = borderThickness;
        roundRect(context, borderThickness/2, borderThickness/2, textWidth + borderThickness, fontsize * 1.4 + borderThickness, 6);
        // 1.4 is extra height factor for text below baseline: g,j,p,q.
        // text color
        context.fillStyle = "rgba(0, 0, 0, 1.0)";
        context.fillText( message, borderThickness, fontsize + borderThickness);
        // canvas contents will be used for a texture
        var texture = new THREE.Texture(canvas)
        texture.needsUpdate = true;
        var spriteMaterial = new THREE.SpriteMaterial(
        { map: texture, useScreenCoordinates: false, alignment: spriteAlignment } );
        var sprite = new THREE.Sprite( spriteMaterial );
        sprite.scale.set(100,50,1.0);
        return sprite;
        }
        // function for drawing rounded rectangles
        function roundRect(ctx, x, y, w, h, r)
        {
        ctx.beginPath();
        ctx.moveTo(x+r, y);
        ctx.lineTo(x+w-r, y);
        ctx.quadraticCurveTo(x+w, y, x+w, y+r);
        ctx.lineTo(x+w, y+h-r);
        ctx.quadraticCurveTo(x+w, y+h, x+w-r, y+h);
        ctx.lineTo(x+r, y+h);
        ctx.quadraticCurveTo(x, y+h, x, y+h-r);
        ctx.lineTo(x, y+r);
        ctx.quadraticCurveTo(x, y, x+r, y);
        ctx.closePath();
        ctx.fill();
        ctx.stroke();
        }
        function animate()
        {
        requestAnimationFrame( animate );
        render();
        update();
        }
        function update()
        {
        controls.update();
        stats.update();
        }
        function render()
        {
        renderer.render( scene, camera );
        }
        </script>
        </body>
        </html>


        IP属地:湖北4楼2016-05-09 16:20
        回复
          <!doctype html>
          <html lang="en">
          <head>
          <title>Sprite Text Labels (Three.js)</title>
          <meta charset="utf-8">
          <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
          <link rel=stylesheet href="css/base.css"/>
          </head>
          <body>
          <script src="js/Three.js"></script>
          <script src="js/Detector.js"></script>
          <script src="js/Stats.js"></script>
          <script src="js/OrbitControls.js"></script>
          <script src="js/THREEx.KeyboardState.js"></script>
          <script src="js/THREEx.FullScreen.js"></script>
          <script src="js/THREEx.WindowResize.js"></script>
          <!-- jQuery code to display an information button and box when clicked. -->
          <script src="js/jquery-1.9.1.js"></script>
          <script src="js/jquery-ui.js"></script>
          <link rel=stylesheet href="css/jquery-ui.css" />
          <link rel=stylesheet href="css/info.css"/>
          <script src="js/info.js"></script>
          <div id="infoButton"></div>
          <div id="infoBox" title="Demo Information">
          This three.js demo is part of a collection at
          <a href="http://stemkoski.github.io/Three.js/">http://stemkoski.github.io/Three.js/</a>
          </div>
          <!-- ------------------------------------------------------------ -->
          <div id="ThreeJS" style="position: absolute; left:0px; top:0px"></div>
          <script>
          /*
          Three.js "tutorials by example"
          Author: Lee Stemkoski
          Date: July 2013 (three.js v59dev)
          */
          // MAIN
          // standard global variables
          var container, scene, camera, renderer, controls, stats;
          var keyboard = new THREEx.KeyboardState();
          var clock = new THREE.Clock();
          // custom global variables
          var cube;
          var projector, mouse = { x: 0, y: 0 }, INTERSECTED;
          var sprite1;
          var canvas1, context1, texture1;
          init();
          animate();
          // FUNCTIONS
          function init()
          {
          // SCENE
          scene = new THREE.Scene();
          // CAMERA
          var SCREEN_WIDTH = window.innerWidth, SCREEN_HEIGHT = window.innerHeight;
          var VIEW_ANGLE = 45, ASPECT = SCREEN_WIDTH / SCREEN_HEIGHT, NEAR = 0.1, FAR = 20000;
          camera = new THREE.PerspectiveCamera( VIEW_ANGLE, ASPECT, NEAR, FAR);
          scene.add(camera);
          camera.position.set(0,150,400);
          camera.lookAt(scene.position);
          // RENDERER
          if ( Detector.webgl )
          renderer = new THREE.WebGLRenderer( {antialias:true} );
          else
          renderer = new THREE.CanvasRenderer();
          renderer.setSize(SCREEN_WIDTH, SCREEN_HEIGHT);
          container = document.getElementById( 'ThreeJS' );
          container.appendChild( renderer.domElement );
          // EVENTS
          THREEx.WindowResize(renderer, camera);
          THREEx.FullScreen.bindKey({ charCode : 'm'.charCodeAt(0) });
          // CONTROLS
          controls = new THREE.OrbitControls( camera, renderer.domElement );
          // STATS
          stats = new Stats();
          stats.domElement.style.position = 'absolute';
          stats.domElement.style.bottom = '0px';
          stats.domElement.style.zIndex = 100;
          container.appendChild( stats.domElement );
          // LIGHT
          var light = new THREE.PointLight(0xffffff);
          light.position.set(0,250,0);
          scene.add(light);
          // FLOOR
          var floorTexture = new THREE.ImageUtils.loadTexture( 'images/checkerboard.jpg' );
          floorTexture.wrapS = floorTexture.wrapT = THREE.RepeatWrapping;
          floorTexture.repeat.set( 10, 10 );
          var floorMaterial = new THREE.MeshBasicMaterial( { map: floorTexture, side: THREE.DoubleSide } );
          var floorGeometry = new THREE.PlaneGeometry(1000, 1000, 10, 10);
          var floor = new THREE.Mesh(floorGeometry, floorMaterial);
          floor.position.y = -0.5;
          floor.rotation.x = Math.PI / 2;
          floor.name = "Checkerboard Floor";
          scene.add(floor);
          // SKYBOX/FOG
          var skyBoxGeometry = new THREE.CubeGeometry( 10000, 10000, 10000 );
          var skyBoxMaterial = new THREE.MeshBasicMaterial( { color: 0x9999ff, side: THREE.BackSide } );
          var skyBox = new THREE.Mesh( skyBoxGeometry, skyBoxMaterial );
          scene.add(skyBox);
          ////////////
          // CUSTOM //
          ////////////
          var cubeGeometry = new THREE.CubeGeometry( 100, 100, 100 );
          var cubeMaterial = new THREE.MeshNormalMaterial();
          cube = new THREE.Mesh( cubeGeometry, cubeMaterial );
          cube.position.set(0,50.1,0);
          cube.name = "Cube";
          scene.add(cube);
          var spritey = makeTextSprite( " Hello, ",
          { fontsize: 24, borderColor: {r:255, g:0, b:0, a:1.0}, backgroundColor: {r:255, g:100, b:100, a:0.8} } );
          spritey.position.set(-85,105,55);
          scene.add( spritey );
          var spritey = makeTextSprite( " World! ",
          { fontsize: 32, fontface: "Georgia", borderColor: {r:0, g:0, b:255, a:1.0} } );
          spritey.position.set(55,105,55);
          scene.add( spritey );
          }
          function makeTextSprite( message, parameters )
          {
          if ( parameters === undefined ) parameters = {};
          var fontface = parameters.hasOwnProperty("fontface") ?
          parameters["fontface"] : "Arial";
          var fontsize = parameters.hasOwnProperty("fontsize") ?
          parameters["fontsize"] : 18;
          var borderThickness = parameters.hasOwnProperty("borderThickness") ?
          parameters["borderThickness"] : 4;
          var borderColor = parameters.hasOwnProperty("borderColor") ?
          parameters["borderColor"] : { r:0, g:0, b:0, a:1.0 };
          var backgroundColor = parameters.hasOwnProperty("backgroundColor") ?
          parameters["backgroundColor"] : { r:255, g:255, b:255, a:1.0 };
          var spriteAlignment = THREE.SpriteAlignment.topLeft;
          var canvas = document.createElement('canvas');
          var context = canvas.getContext('2d');
          context.font = "Bold " + fontsize + "px " + fontface;
          // get size data (height depends only on font size)
          var metrics = context.measureText( message );
          var textWidth = metrics.width;
          // background color
          context.fillStyle = "rgba(" + backgroundColor.r + "," + backgroundColor.g + ","
          + backgroundColor.b + "," + backgroundColor.a + ")";
          // border color
          context.strokeStyle = "rgba(" + borderColor.r + "," + borderColor.g + ","
          + borderColor.b + "," + borderColor.a + ")";
          context.lineWidth = borderThickness;
          roundRect(context, borderThickness/2, borderThickness/2, textWidth + borderThickness, fontsize * 1.4 + borderThickness, 6);
          // 1.4 is extra height factor for text below baseline: g,j,p,q.
          // text color
          context.fillStyle = "rgba(0, 0, 0, 1.0)";
          context.fillText( message, borderThickness, fontsize + borderThickness);
          // canvas contents will be used for a texture
          var texture = new THREE.Texture(canvas)
          texture.needsUpdate = true;
          var spriteMaterial = new THREE.SpriteMaterial(
          { map: texture, useScreenCoordinates: false, alignment: spriteAlignment } );
          var sprite = new THREE.Sprite( spriteMaterial );
          sprite.scale.set(100,50,1.0);
          return sprite;
          }
          // function for drawing rounded rectangles
          function roundRect(ctx, x, y, w, h, r)
          {
          ctx.beginPath();
          ctx.moveTo(x+r, y);
          ctx.lineTo(x+w-r, y);
          ctx.quadraticCurveTo(x+w, y, x+w, y+r);
          ctx.lineTo(x+w, y+h-r);
          ctx.quadraticCurveTo(x+w, y+h, x+w-r, y+h);
          ctx.lineTo(x+r, y+h);
          ctx.quadraticCurveTo(x, y+h, x, y+h-r);
          ctx.lineTo(x, y+r);
          ctx.quadraticCurveTo(x, y, x+r, y);
          ctx.closePath();
          ctx.fill();
          ctx.stroke();
          }
          function animate()
          {
          requestAnimationFrame( animate );
          render();
          update();
          }
          function update()
          {
          controls.update();
          stats.update();
          }
          function render()
          {
          renderer.render( scene, camera );
          }
          </script>
          </body>
          </html>


          IP属地:湖北5楼2016-05-13 14:32
          回复