激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

服務器之家 - 編程語言 - JavaScript - maptalks+three.js+vue webpack實現二維地圖上貼三維模型操作

maptalks+three.js+vue webpack實現二維地圖上貼三維模型操作

2021-08-17 16:34辣姐什么鬼 JavaScript

這篇文章主要介紹了maptalks+three.js+vue webpack實現二維地圖上貼三維模型操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

我們不是走在坑里就是走在前往坑的路上_(:зゝ∠)_

最終效果如圖:(地圖上添加一個“三維地圖”的toolbar按鈕,點擊后在二維地圖上貼上建好的三維模型點擊顯示彈框)

maptalks+three.js+vue webpack實現二維地圖上貼三維模型操作

以下都在已經引入并且初始化maptalks地圖的基礎上,如何引入使用maptalks可以查看以下文章

http://www.zmynmublwnt.cn/article/184419.html

1、安裝maptalks.three包

npm install maptalks.three

2、安裝three包

npm install three

3、安裝obj-loader和mtl-loader包

npm i --save three-obj-mtl-loader

4、引入model模型文件到public下(放在這里是因為打包后讀取路徑問題,目前發現放在這里才能在打包后正確讀取)

maptalks+three.js+vue webpack實現二維地圖上貼三維模型操作

5、vue頁面代碼

引入包

?
1
2
3
4
import * as three from 'three'
import * as maptalks from 'maptalks'
import { threelayer } from 'maptalks.three'
import { mtlloader, objloader } from 'three-obj-mtl-loader'

初始化的地圖對象是

this.map

下面是渲染三維模型的方法

?
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
// 渲染三維
draw3d() {
 const that = this
 // 三維地圖
 var three_flag = false
 // ///單體化交互開始
 var intersected
 this.map.on('click', function(e) {
  //  console.log(e)
  var raycaster = new three.raycaster()
  var mouse = new three.vector2()
  const camera = threelayer.getcamera()
  const scene = threelayer.getscene()
  if (!scene) return
 
  const size = that.map.getsize()
  const width = size.width; const height = size.height
  mouse.x = (e.containerpoint.x / width) * 2 - 1
  mouse.y = -((e.containerpoint.y) / height) * 2 + 1
 
  raycaster.setfromcamera(mouse, camera)
  raycaster.lineprecision = 3
 
  var intersects = raycaster.intersectobjects(scene.children, true)
  // var intersects = raycaster.intersectobject(points);
  if (!intersects) return
  if (array.isarray(intersects) && intersects.length === 0) return
  console.log(intersects)
  // 這里我們操作第一個相交的物體
  if (intersects.length > 0) {
   if (intersected != intersects[0].object) {
    if (intersected) {
     // intersected.material.color.sethex(intersected.currenthex);
     // intersected.scale.set(1,1,1);
     if (intersected.material.length === undefined) {
      intersected.material.color.sethex(intersected.currenthex)
     } else {
      for (var i = 0; i < intersected.material.length; i++) {
       intersected.material[i].color.sethex(intersected.currenthex)
      }
     }
    }
    intersected = intersects[0].object
 
    // 設置相交的第一個物體的顏色
    // intersected.currenthex = intersected.material[0].color.gethex();
    intersected.currenthex = 16777215
    // 將該物體設為隨機的其他顏色
    // intersected.material.opacity = 0.2;
 
    // intersected.material.transparent = true;
    // intersected.material.opacity = 0.2;
    // intersected.material.needsupdate = true;
    // intersected.material.transparent = false;
 
    // intersected.material.color.sethex(0xff0000);
    if (intersected.material.length === undefined) {
     intersected.material.color.sethex(0x1e90ff)
    } else {
     for (var i = 0; i < intersected.material.length; i++) {
      intersected.material[i].color.sethex(0x1e90ff)
     }
    }
   }
   // //////////////
   var lonlat = e.coordinate
   if (true) {
    var options = {
     'autoopenon': 'null', // set to null if not to open window when clicking on map
     'single': true,
     'width': 410,
     'height': 190,
     'custom': true,
     'autocloseon': 'click',
     'dy': -316,
     'content': '<div class="content build-content">' +
      '<div class="pop-img"><img src="http://pde56fqkk.bkt.clouddn.com/1544760152593.jpg"/><p class="pop-name build-pop-name" id="viewdetial"><span class="text-ellipsis" javascript" id="highlighter_300040">
?
1
2
3
4
5
// 相對路徑參數,
var mtlpath = process.env.base_url + 'model/obj/'
var mtlname = '3d_puruan_new.mtl'
var objpath = process.env.base_url + 'model/obj/'
var objname = '3d_puruan3.obj'

關于process.env.base_url的值可以在vue.config.js里自定義設置(cli3.0)

baseurl: process.env.node_env === 'production' ? '/bcmp-web/' : '/',

關于draw3d的代碼我沒有進行詳細的解釋,如果需要會出一個詳細版的方法使用介紹

補充知識:vue npm安裝vue常用依賴,axios、element ui、mockjs

添加axios依賴:

npm install axios

添加element-ui:

npm i element-ui -s

添加 mockjs:

npm install mockjs

以上這篇maptalks+three.js+vue webpack實現二維地圖上貼三維模型操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/liona_koukou/article/details/85231410

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久久久久久久日本理论电影 | 叶子楣成人爽a毛片免费啪啪 | 欧美性生活久久久 | 亚洲精品一区中文字幕 | 欧美日韩大片在线观看 | 国产精品久久久久免费视频 | 久久精品1区2区 | 综合毛片 | 国产羞羞视频在线观看 | 久久精品日本一区 | 欧美在线观看黄色 | 国产乱淫a∨片免费视频 | 国产一级桃视频播放 | 国产精品成人一区 | 最新福利在线 | 精品亚洲视频在线 | 日本一区二区不卡在线观看 | 免费人成在线观看网站 | 免费看性xxx高清视频自由 | 欧美日韩亚洲成人 | 亚洲啪啪 | 黄视频网站免费在线观看 | 国产视频在线一区 | 91在线色 | 日本爽快片100色毛片视频 | 欧美一级免费在线观看 | 久久久精品视频网站 | 久久久久久久久久亚洲 | 日日狠狠久久 | 欧美一级美国一级 | 中国久久久 | 72pao成人国产永久免费视频 | 国产午夜精品一区二区三区免费 | 91av大片| 成人免费午夜视频 | 女18一级大黄毛片免费女人 | 91性高湖久久久久久久久网站 | 日韩精品免费看 | 欧美性生活视频免费 | 久久精品.com| 国产成人高清在线 |

  • <font id="iasbj"></font>