• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

threejs搭建VR全景视图

武飞扬头像
十年一梦惊觉醒
帮助1

资源下载地址:https://download.csdn.net/download/mokeily99/40531697

以下为全部代码,引入文件自行查找

  1.  
    <!DOCTYPE html>
  2.  
    <html style="height:100%;">
  3.  
    <head>
  4.  
     
  5.  
    <title>3D</title>
  6.  
    <meta charset="UTF-8">
  7.  
    <meta http-equiv="X-UA-Compatible" content="IE=6;IE=7; IE=8; IE=EmulateIE7" />
  8.  
     
  9.  
    <script type="text/javascript" src="three.min.js"></script>
  10.  
    <script type="text/javascript" src="OrbitControls.js"></script>
  11.  
    <script type="text/javascript" src="PMREMGenerator.js"></script>
  12.  
    <script type="text/javascript" src="PMREMCubeUVPacker.js"></script>
  13.  
    <script type="text/javascript" src="RGBELoader.js"></script>
  14.  
     
  15.  
    </head>
  16.  
     
  17.  
    <body>
  18.  
    <script>
  19.  
    var Scene, camera, renderer, composer, controls;
  20.  
     
  21.  
    init();
  22.  
    initcamera();
  23.  
     
  24.  
    function init() {
  25.  
    Scene = new THREE.Scene();
  26.  
     
  27.  
    //拍摄距离 视野角值越大,场景中的物体越小,实现小行星视角,近的物体拉长
  28.  
    var fov = 140
  29.  
    camera = new THREE.PerspectiveCamera(fov, window.innerWidth
  30.  
    / window.innerHeight, 1, 1000);
  31.  
    camera.position.set(0, 8, 0);
  32.  
    camera.lookAt(new THREE.Vector3(0, -500, 0))
  33.  
     
  34.  
    renderer = new THREE.WebGLRenderer({
  35.  
    alpha : true,
  36.  
    antialias : true
  37.  
    });
  38.  
    renderer.setSize(window.innerWidth, window.innerHeight);
  39.  
    renderer.setPixelRatio(window.devicePixelRatio);
  40.  
    // 渲染范围
  41.  
    renderer.setSize(window.innerWidth, window.innerHeight);
  42.  
    // 开启阴影支持
  43.  
    renderer.shadowMap.enabled = true;
  44.  
    // 阴影类型
  45.  
    renderer.shadowMap.type = THREE.PCFSoftShadowMap;
  46.  
    document.body.appendChild(renderer.domElement);
  47.  
     
  48.  
     
  49.  
    var geom = new THREE.SphereBufferGeometry(10, 100, 100)//创建球体
  50.  
    //var geom = new THREE.CylinderGeometry(15, 15 ,40 ,40 ,40)
  51.  
    var texture = new THREE.RGBELoader().load('bg-9.hdr')//加载hdr资源
  52.  
    //var texture = new THREE.TextureLoader().load('bg-5.jpg')//加载jpg资源方式
  53.  
    texture.encoding = THREE.RGBEEncoding;//设置编码属性的值,注:加载jpg时需要去掉这行
  54.  
    texture.minFilter = THREE.NearestFilter;//当一个纹素覆盖小于一个像素时,贴图将如何采样
  55.  
    texture.magFilter = THREE.NearestFilter;//当一个纹素覆盖大于一个像素时,贴图将如何采样
  56.  
    texture.flipY = true;//翻转图像的Y轴以匹配WebGL纹理坐标空间
  57.  
    var mat = new THREE.MeshBasicMaterial({ map: texture, side: THREE.BackSide })
  58.  
    var mesh = new THREE.Mesh(geom, mat)
  59.  
    Scene.add(mesh)
  60.  
     
  61.  
    //Scene.background = texture;
  62.  
    }
  63.  
     
  64.  
    function initcamera() {
  65.  
    /* var controls = new THREE.OrbitControls(camera, renderer.domElement);
  66.  
    controls.autoRotate = true; */
  67.  
     
  68.  
    controls = new THREE.OrbitControls(camera, renderer.domElement);
  69.  
    controls.target.set(0, 0, 0);
  70.  
    controls.autoRotate = true;
  71.  
    controls.minDistance = 0;
  72.  
    controls.maxDistance = 5000;
  73.  
    controls.update();
  74.  
    }
  75.  
     
  76.  
    //环境光
  77.  
    Scene.add(new THREE.AmbientLight(0xffffff, 2));
  78.  
     
  79.  
    //上聚光源
  80.  
    var spotLight = new THREE.SpotLight(0xffffff, 2);
  81.  
    spotLight.position.set(0, 500, 0);
  82.  
    spotLight.LightShadow = 0.5;
  83.  
    spotLight.castShadow = true;
  84.  
    spotLight.shadow.mapSize.width = 1024;
  85.  
    spotLight.shadow.mapSize.height = 1024;
  86.  
    spotLight.shadow.camera.near = 500;
  87.  
    spotLight.shadow.camera.far = 1;
  88.  
    spotLight.shadow.camera.fov = 30;
  89.  
    Scene.add(spotLight);
  90.  
     
  91.  
    var tdwon = new Date();
  92.  
    var downMax = 0;
  93.  
    var animatesFlag = true;
  94.  
    var fovFlag = true;
  95.  
    var fovStep = -0.001;
  96.  
    function animateDown() {
  97.  
    console.log(camera.position.y);
  98.  
    controls.update();
  99.  
    var t1 = new Date(); // 本次时间
  100.  
    var t = t1 - tdwon; // 时间差
  101.  
     
  102.  
    camera.translateY(fovStep * t/3);
  103.  
    //camera.lookAt(Scene.position);// camera.lookAt与orbitcontrol冲突不能使用,要用下面的controls.target代替
  104.  
    renderer.render(Scene, camera);
  105.  
     
  106.  
    if(camera.position.y <= downMax){
  107.  
    animatesFlag = false;
  108.  
    }
  109.  
     
  110.  
    if(camera.position.y <= (downMax 4) && fovFlag){
  111.  
    fovFlag = false;
  112.  
    animateFov();
  113.  
    }
  114.  
     
  115.  
    if (animatesFlag) {
  116.  
    requestAnimationFrame(animateDown);
  117.  
    }
  118.  
    }
  119.  
    setTimeout(function(){ animateDown();}, 1000);
  120.  
     
  121.  
    var tn = new Date();
  122.  
    function animateNormalCircle() {
  123.  
    controls.update();
  124.  
    var t1 = new Date(); // 本次时间
  125.  
    var t = t1 - tn; // 时间差
  126.  
    //camera.translateX(0.0001 * t / 3); // 沿着Y轴旋转着从大到小
  127.  
     
  128.  
    var axis = new THREE.Vector3(0,0,0);//向量axis
  129.  
    camera.rotateOnAxis(axis, 0.0001 * t / 3);//绕axis轴旋转π/8
  130.  
    camera.lookAt(Scene.position);// camera.lookAt与orbitcontrol冲突不能使用,要用下面的controls.target代替
  131.  
    renderer.render(Scene, camera);
  132.  
    requestAnimationFrame(animateNormalCircle);
  133.  
    }
  134.  
     
  135.  
    function animateFov(){
  136.  
    var targetFov = 50;
  137.  
    var baseFov = camera.fov;
  138.  
    if(baseFov > targetFov){
  139.  
    camera.fov = baseFov - 0.5;
  140.  
    camera.updateProjectionMatrix();
  141.  
    //渲染
  142.  
    renderer.render(Scene, camera);
  143.  
    requestAnimationFrame(animateFov);
  144.  
    }else{
  145.  
    animateNormalCircle();
  146.  
    }
  147.  
    }
  148.  
     
  149.  
    var skip=0;
  150.  
    var animate = function() {
  151.  
    requestAnimationFrame(animate);
  152.  
    if (skip != 0) {
  153.  
    skip = skip % 2;
  154.  
    return;
  155.  
    } else {
  156.  
    skip = skip % 2;
  157.  
    }
  158.  
    renderer.render(Scene, camera);
  159.  
    };
  160.  
    animate();
  161.  
     
  162.  
    </script>
  163.  
    </body>
  164.  
    </html>
学新通

演示效果:

学新通

学新通 

hdr、JPG全景图生成方法参照:3dmax模型导出成全景图的两种方法详细步骤-模型云室内设计资讯

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgfcefk
系列文章
更多 icon
同类精品
更多 icon
继续加载