一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - vue中利用three.js實現全景圖的完整示例

vue中利用three.js實現全景圖的完整示例

2021-12-07 15:52陳陳陳_ JavaScript

這篇文章主要給大家介紹了關于vue中利用three.js實現全景圖的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

粗暴一點,直接上代碼:

第一步:

通過指令下載three.js

?
1
npm install three -S

第二步:

在組件中引用

?
1
import * as THREE from 'three'

第三步:

html部分

?
1
<div id="container"></div>

js部分

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<script>
  import * as THREE from 'three';
  var camera;
  var renderer;
  var scene;
  export default {
    name: 'panorama',
    data() {
      return {
        bigImg: require("../../../../../images/項目案例/001.jpg"),//全景圖圖片路徑
      }
    },
    mounted() {
      // 調用全景圖函數
      this.$nextTick(() => {
        this.init();
        this.animate();
      })
    },
    methods: {
      // 全景圖配置函數---------------
      init() {
        var container = document.getElementById('container');
        // 創建渲染器
        renderer = new THREE.WebGLRenderer();
        renderer.setPixelRatio(window.devicePixelRatio);
        // 設置畫布的寬高
        renderer.setSize(window.innerWidth, window.innerHeight);
        // 判斷容器中子元素的長度
        let childs = container.childNodes;
        if (container.childNodes.length > 0) {
          container.removeChild(childs[0]);
          container.appendChild(renderer.domElement);
        } else {
          container.appendChild(renderer.domElement);
        }
        //   container.appendChild(renderer.domElement);
        // 創建場景
        scene = new THREE.Scene();
        // 創建相機
        camera = new THREE.PerspectiveCamera(90, window.innerWidth / window.innerHeight, 0.1, 100);
        camera.position.set(0, 0, 0);
        var material = new THREE.MeshBasicMaterial();//材質
        var texture = new THREE.TextureLoader().load(this.bigImg);
        material.map = texture;
        var skyBox = new THREE.Mesh(
          new THREE.SphereBufferGeometry(100, 100, 100),
          material
        );
        skyBox.geometry.scale(1, 1, -1);
        scene.add(skyBox);
        window.addEventListener('resize', this.onWindowResize, false);
        var bMouseDown = false;
        var x = -1;
        var y = -1;
        // 添加鼠標事件
        container.onmousedown = function (event) {
          event.preventDefault();//取消默認事件
          x = event.clientX;
          y = event.clientY;
          bMouseDown = true;
        }
        container.onmouseup = function (event) {
          event.preventDefault();
          bMouseDown = false;
        }
        container.onmousemove = function (event) {
          event.preventDefault();
          if (bMouseDown) {
            skyBox.rotation.y += -0.005 * (event.clientX - x);
            skyBox.rotation.x += -0.005 * (event.clientY - y);
            if (skyBox.rotation.x > Math.PI / 2) {
              skyBox.rotation.x = Math.PI / 2
            }
            if (skyBox.rotation.x < -Math.PI / 2) {
              skyBox.rotation.x = -Math.PI / 2
            }
            x = event.clientX;
            y = event.clientY;
          }
        }
        container.onmousewheel = function (event) {
          event.preventDefault();
          if (event.wheelDelta != 0) {
            camera.fov += event.wheelDelta > 0 ? 1 : -1;
            if (camera.fov > 150) {
              camera.fov = 150;
            }
            else if (camera.fov < 30) {
              camera.fov = 30;
            }
            camera.updateProjectionMatrix();
          }
        }
      },
      onWindowResize() {
        // 窗口縮放的時候,保證場景也跟著一起縮放
        camera.aspect = window.innerWidth / window.innerHeight;
        camera.updateProjectionMatrix();
        renderer.setSize(window.innerWidth, window.innerHeight);
      },
      animate() {
        requestAnimationFrame(this.animate);
        renderer.render(scene, camera);
      }
    },
  }
</script>

到此這篇關于vue中利用three.js實現全景圖的文章就介紹到這了,更多相關vue用three.js實現全景圖內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/qq_44271127/article/details/110681791

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美日韩精品一区二区三区视频 | 欧美艳星kagneyiynn高清 | 2019理论韩国理论中文 | 香蕉久久久久 | naruto堂同人本子汉化gg | 免费特黄视频 | 边吃胸边膜下刺激免费男对女 | 粗又长好猛好爽视频 | 色戒真做gif动图 | 91精品国产综合久久福利 | 西西人体大胆啪啪私拍色约约 | 国产精品igao视频网网址 | 国产精品免费拍拍拍 | 白丝萝莉喷水 | 免费一区 | 日本免费一区二区三区四区五六区 | 火影忍者小南裸羞羞漫画 | 亚洲AV国产国产久青草 | 成年私人影院免费视频网站 | 日本视频高清 | 免费一级特黄特色大片 | 思思玖玖| 亚洲国产成人久久77 | 人成网站在线观看 | 久久日韩精品无码一区 | 亚洲精品αv一区二区三区 亚洲精品91大神在线观看 | 草莓香蕉榴莲丝瓜秋葵绿巨人在线看 | 九九久久国产精品免费热6 九九精品视频一区二区三区 | 成人福利影院 | 思敏1一5集国语版免费观看 | 国产成人在线播放 | 我强进了老师身体在线观看 | 爽爽窝窝午夜精品一区二区 | 亚洲国产午夜看片 | 国产在线拍 | 嗯啊好爽视频 | 日韩免费高清专区 | 厨房play黄瓜进去小说h | 国内精品99 | 91九色porn偷拍在线 | 国产自拍视频一区 |