zoukankan      html  css  js  c++  java
  • 基于three.js的全景

    直接上代码:

    <!DOCTYPE html>
    <html>
    <head>
    <title>three.js css3d - panorama</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
    <style>
    body {
    background-color: #000000;
    margin: 0;
    cursor: move;
    overflow: hidden;
    }

    a {
    color: #ffffff;
    }

    #info {
    position: absolute;
    100%;
    color: #ffffff;
    padding: 5px;
    font-family: Monospace;
    font-size: 13px;
    font-weight: bold;
    text-align: center;
    z-index: 1;
    }
    </style>
    </head>
    <body>
    <script src="../build/three.js"></script>
    <script src="js/renderers/CSS3DRenderer.js"></script>
    <script>

    var camera, scene, renderer;
    var geometry, material, mesh;
    var target = new THREE.Vector3();

    var lon = 90, lat = 0;
    var phi = 0, theta = 0;

    var touchX, touchY;

    init();
    animate();

    function init() {

    camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 1000 );

    scene = new THREE.Scene();

    var sides = [
    {
    url: 'textures/cube/Bridge2/posx.jpg',
    position: [ -512, 0, 0 ],
    rotation: [ 0, Math.PI / 2, 0 ]
    },
    {
    url: 'textures/cube/Bridge2/negx.jpg',
    position: [ 512, 0, 0 ],
    rotation: [ 0, -Math.PI / 2, 0 ]
    },
    {
    url: 'textures/cube/Bridge2/posy.jpg',
    position: [ 0, 512, 0 ],
    rotation: [ Math.PI / 2, 0, Math.PI ]
    },
    {
    url: 'textures/cube/Bridge2/negy.jpg',
    position: [ 0, -512, 0 ],
    rotation: [ - Math.PI / 2, 0, Math.PI ]
    },
    {
    url: 'textures/cube/Bridge2/posz.jpg',
    position: [ 0, 0, 512 ],
    rotation: [ 0, Math.PI, 0 ]
    },
    {
    url: 'textures/cube/Bridge2/negz.jpg',
    position: [ 0, 0, -512 ],
    rotation: [ 0, 0, 0 ]
    }
    ];

    for ( var i = 0; i < sides.length; i ++ ) {

    var side = sides[ i ];

    var element = document.createElement( 'img' );
    element.width = 1026; // 2 pixels extra to close the gap.
    element.src = side.url;

    var object = new THREE.CSS3DObject( element );
    object.position.fromArray( side.position );
    object.rotation.fromArray( side.rotation );
    scene.add( object );

    }

    renderer = new THREE.CSS3DRenderer();
    renderer.setSize( window.innerWidth, window.innerHeight );
    document.body.appendChild( renderer.domElement );

    //

    document.addEventListener( 'mousedown', onDocumentMouseDown, false );
    document.addEventListener( 'wheel', onDocumentMouseWheel, false );

    document.addEventListener( 'touchstart', onDocumentTouchStart, false );
    document.addEventListener( 'touchmove', onDocumentTouchMove, false );

    window.addEventListener( 'resize', onWindowResize, false );

    }

    function onWindowResize() {

    camera.aspect = window.innerWidth / window.innerHeight;
    camera.updateProjectionMatrix();

    renderer.setSize( window.innerWidth, window.innerHeight );

    }

    function onDocumentMouseDown( event ) {

    event.preventDefault();

    document.addEventListener( 'mousemove', onDocumentMouseMove, false );
    document.addEventListener( 'mouseup', onDocumentMouseUp, false );

    }

    function onDocumentMouseMove( event ) {

    var movementX = event.movementX || event.mozMovementX || event.webkitMovementX || 0;
    var movementY = event.movementY || event.mozMovementY || event.webkitMovementY || 0;

    lon -= movementX * 0.1;
    lat += movementY * 0.1;

    }

    function onDocumentMouseUp( event ) {

    document.removeEventListener( 'mousemove', onDocumentMouseMove );
    document.removeEventListener( 'mouseup', onDocumentMouseUp );

    }

    function onDocumentMouseWheel( event ) {

    camera.fov += event.deltaY * 0.05;
    camera.updateProjectionMatrix();

    }

    function onDocumentTouchStart( event ) {

    event.preventDefault();

    var touch = event.touches[ 0 ];

    touchX = touch.screenX;
    touchY = touch.screenY;

    }

    function onDocumentTouchMove( event ) {

    event.preventDefault();

    var touch = event.touches[ 0 ];

    lon -= ( touch.screenX - touchX ) * 0.1;
    lat += ( touch.screenY - touchY ) * 0.1;

    touchX = touch.screenX;
    touchY = touch.screenY;

    }

    function animate() {

    requestAnimationFrame( animate );

    lon += 0.1;
    lat = Math.max( - 85, Math.min( 85, lat ) );
    phi = THREE.Math.degToRad( 90 - lat );
    theta = THREE.Math.degToRad( lon );

    target.x = Math.sin( phi ) * Math.cos( theta );
    target.y = Math.cos( phi );
    target.z = Math.sin( phi ) * Math.sin( theta );

    camera.lookAt( target );

    renderer.render( scene, camera );

    }

    </script>
    </body>
    </html>
  • 相关阅读:
    深入理解JVM之JVM内存区域与内存分配
    Spring MVC配置文件的三个常用配置详解
    spring Bean类自动装载实现
    深入理解Java之线程池
    java 通过反射机制调用某个类的方法
    InvocationHandler中invoke()方法的调用问题
    线程 synchronized锁机制
    Java 并发编程:volatile的使用及其原理
    Java 修饰符
    Set、List、Map的区别和联系
  • 原文地址:https://www.cnblogs.com/luobiao/p/6692369.html
Copyright © 2011-2022 走看看