index.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527
  1. <template>
  2. <div>
  3. <div id="bg_box"></div>
  4. </div>
  5. </template>
  6. <script>
  7. import * as THREE from 'three'
  8. import {TweenMax, TweenLite, TimelineMax} from 'gsap'
  9. var windowLoad = (function () {
  10. return function (cb) {
  11. setTimeout(cb)
  12. }
  13. })()
  14. export default {
  15. mounted () {
  16. /* eslint-disable */
  17. var sctop = 0
  18. var sctopSw = false
  19. var indexSw = true
  20. windowLoad()
  21. setTimeout(() => {
  22. sctop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop
  23. window.addEventListener('scroll', function () {
  24. sctop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop
  25. if (sctop > winH / 3) {
  26. if (!sctopSw && document.querySelector('#bg_box')) document.querySelector('#bg_box').style.opacity = 0.5
  27. sctopSw = true
  28. } else {
  29. if (sctopSw && document.querySelector('#bg_box')) document.querySelector('#bg_box').style.opacity = 1
  30. sctopSw = false
  31. }
  32. })
  33. resizeInt()
  34. intro()
  35. });
  36. var winW, winH
  37. var resizeArr = []
  38. function resizeInt () {
  39. resizeArr.push(resizeFun)
  40. resize()
  41. window.addEventListener('resize', function () {
  42. resize()
  43. })
  44. }
  45. function resize () {
  46. for (var i = 0; i < resizeArr.length; i++) {
  47. resizeArr[i]()
  48. }
  49. }
  50. var resizeFun = function () {
  51. winW = window.innerWidth
  52. winH = window.innerHeight
  53. document.querySelector('#bg_box').setAttribute('height', winH)
  54. }
  55. var optime = 2800
  56. function intro () {
  57. init3d()
  58. makeParticles()
  59. loop_frame()
  60. // setTimeout(function () {
  61. // TweenLite.to(document.querySelector('canvas'), 4.5, {
  62. // opacity: 0.99
  63. // })
  64. // }, optime)
  65. }
  66. var camera,
  67. scene,
  68. renderer,
  69. groupGeometry,
  70. groupPtcl,
  71. groupL,
  72. groupS,
  73. groupP,
  74. groupB
  75. var camera_2, scene_2, renderer_2
  76. var width = window.innerWidth
  77. var height = window.innerHeight
  78. var a_vertices = []
  79. var a_faces = []
  80. function init3d () {
  81. // カメラ,レンダー,シーンのセット
  82. camera = new THREE.PerspectiveCamera(50, width / height, 1, 4000)
  83. scene = new THREE.Scene()
  84. scene.add(camera)
  85. TweenMax.ticker.fps(24)
  86. TweenLite.ticker.fps(24)
  87. /*
  88. camera.position.set( 0, 100, 0);
  89. camera.rotation.x = -1.5
  90. */
  91. camera.position.set(0, 6.123233995736766, 100)
  92. if (winW < 640) {
  93. camera.position.set(0, 6.123233995736766, 105)
  94. }
  95. // camera.rotation.x = -0.8
  96. renderer = new THREE.WebGLRenderer()
  97. renderer.setSize(width, height)
  98. renderer.setClearColor(0xffffff, 1.0)
  99. /*
  100. if(renderer_gl.indexOf("Intel")){
  101. }
  102. */
  103. renderer.setPixelRatio(1)
  104. document.querySelector('#bg_box').appendChild(renderer.domElement)
  105. // $("#bg_box").append(renderer.domElement);
  106. //
  107. // コントローラー
  108. // controls = new THREE.OrbitControls(camera);
  109. if (indexSw) {
  110. camera.rotation.set(6.123233995736766, 0, 0)
  111. } else {
  112. camera.rotation.set(6.123233995736766, 0, 0.4)
  113. }
  114. groupGeometry = new THREE.Group()
  115. groupPtcl = new THREE.Group()
  116. groupL = new THREE.Group()
  117. groupS = new THREE.Group()
  118. groupP = new THREE.Group()
  119. groupB = new THREE.Group()
  120. var resize_3d = function () {
  121. let bg_dom = document.querySelector('#bg_box canvas')
  122. if (winW < 640) {
  123. renderer.setSize(winW * 2, winH * 2)
  124. bg_dom.setAttribute('width', winW * 2)
  125. bg_dom.setAttribute('height', winH * 2)
  126. bg_dom.style.width = winW
  127. bg_dom.style.height = winH
  128. // $("#bg_box canvas")
  129. // .attr("width", winW * 2)
  130. // .attr("height", winH * 2)
  131. // .height(winH)
  132. // .width(winW);
  133. } else {
  134. renderer.setSize(winW, winH)
  135. bg_dom.setAttribute('width', winW)
  136. bg_dom.setAttribute('height', winH)
  137. bg_dom.style.width = winW
  138. bg_dom.style.height = winH
  139. // $("#bg_box canvas")
  140. // .attr("width", winW)
  141. // .attr("height", winH)
  142. // .height(winH)
  143. // .width(winW);
  144. }
  145. camera.aspect = winW / winH
  146. camera.updateProjectionMatrix()
  147. }
  148. resize_3d()
  149. resizeArr.push(resize_3d)
  150. }
  151. var mesh
  152. var wireMesh
  153. var bg_ptcl = []
  154. var material
  155. var y_pos = -120
  156. function makeParticles () {
  157. var geometry_s = new THREE.SphereGeometry(110, 40, 40)
  158. var material = new THREE.MeshBasicMaterial({
  159. opacity: 0.2,
  160. color: 0xcfcfcf,
  161. wireframe: true
  162. })
  163. var sphere = new THREE.Mesh(geometry_s, material)
  164. groupS.position.y = y_pos
  165. // groupS.add(sphere)
  166. var geometry_l = new THREE.SphereGeometry(111, 40, 40)
  167. var material = new THREE.MeshBasicMaterial({
  168. opacity: 0.2,
  169. color: 0xcfcfcf,
  170. wireframe: true
  171. })
  172. var sphere = new THREE.Mesh(geometry_l, material)
  173. groupL.position.y = y_pos
  174. // groupL.add(sphere)
  175. var material_line = new THREE.LineBasicMaterial({
  176. color: 0x1fe4dc
  177. })
  178. var material_line_g = new THREE.LineBasicMaterial({
  179. color: 0xcccccc
  180. })
  181. var imageData1 =
  182. 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIBAMAAAA2IaO4AAAAHlBMVEX////4+PnFwsitqLCqpa2SjJaloKiUjpj19PW/u8GvS+GnAAAALUlEQVR4AWNgVHYSYBAOS/dgUDU2jmQwM3FOYXADEkCucyWDSFh6BgPHFM8GAJB1CFekZ7zyAAAAAElFTkSuQmCC'
  183. var imageData2 =
  184. 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAIAAABLbSncAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFHGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTA0LTE3VDE2OjM0OjMyKzA4OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAxOS0wNC0xN1QxNjozNTo1NSswODowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0wNC0xN1QxNjozNTo1NSswODowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo5MjZiNWQ0ZS0zNzEzLWE2NGMtYTk3YS03YjEzNDQwZjE2MzYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OTI2YjVkNGUtMzcxMy1hNjRjLWE5N2EtN2IxMzQ0MGYxNjM2IiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6OTI2YjVkNGUtMzcxMy1hNjRjLWE5N2EtN2IxMzQ0MGYxNjM2Ij4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo5MjZiNWQ0ZS0zNzEzLWE2NGMtYTk3YS03YjEzNDQwZjE2MzYiIHN0RXZ0OndoZW49IjIwMTktMDQtMTdUMTY6MzQ6MzIrMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE4IChXaW5kb3dzKSIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz79l1JRAAAAdUlEQVQImWP8//fvh3//kq+cOyci9J+RUfrT50lC4sai4ozvf/+2enT7GzsbAwww/v+/iYOP+WOgz3V+XgZkwMh46P1bRs17176xsTFgACZMIaiE/YfPmKLSnz7jtJxJgInpmJyq8eu3jP//Q9SuYeXWFRIBADJ5Mqtay/luAAAAAElFTkSuQmCC'
  185. var img_m_g = new THREE.ImageUtils.loadTexture(imageData1)
  186. var img_m_r = new THREE.ImageUtils.loadTexture(imageData2)
  187. var material_g = new THREE.SpriteMaterial({
  188. transparent: true,
  189. opacity: 0.5,
  190. map: img_m_g
  191. })
  192. var material_r = new THREE.SpriteMaterial({
  193. transparent: true,
  194. opacity: 0.5,
  195. map: img_m_r
  196. })
  197. var pnum = 3000
  198. // 球状の点THREE.ImageUtils.loadTexture('texture.png')
  199. // loader.load('red.png', function(texture) {})
  200. var ll = []
  201. var ls = []
  202. var la = []
  203. for (var i = 0; i < pnum; i++) {
  204. var rad = Math.random() * 10 - 5
  205. var rad2 = Math.random() * 10 - 5
  206. var r = 110
  207. var rgr = Math.random()
  208. if (rgr < 0.8) {
  209. var mesh = new THREE.Sprite(material_g)
  210. } else {
  211. var mesh = new THREE.Sprite(material_r)
  212. }
  213. mesh.scale.set(0.5, 0.5)
  214. mesh.position.x = Math.cos(rad) * Math.cos(rad2) * r
  215. mesh.position.y = Math.cos(rad) * Math.sin(rad2) * r
  216. mesh.position.z = Math.sin(rad) * r
  217. ls.push({
  218. x: Math.cos(rad) * Math.cos(rad2) * r,
  219. y: Math.cos(rad) * Math.sin(rad2) * r,
  220. z: Math.sin(rad) * r
  221. })
  222. ll.push({
  223. x: Math.cos(rad) * Math.cos(rad2) * r + 1,
  224. y: Math.cos(rad) * Math.sin(rad2) * r + 1,
  225. z: Math.sin(rad) * r + 1
  226. })
  227. if (mesh.position.y > 80) {
  228. if (Math.random() < 0.15) {
  229. // グラフ線
  230. var geometry_graf = new THREE.Geometry()
  231. var ran_y = 1.05 + Math.random() * 0.15
  232. geometry_graf.vertices.push(
  233. new THREE.Vector3(ll[i].x * ran_y, ll[i].y * ran_y, ll[i].z * ran_y),
  234. new THREE.Vector3(mesh.position.x, mesh.position.y, mesh.position.z)
  235. )
  236. la.push({
  237. x: ls[i].x,
  238. y: ls[i].y,
  239. z: ls[i].z
  240. })
  241. var line = new THREE.Line(geometry_graf, material_line)
  242. groupPtcl.add(line)
  243. } else {
  244. // 点の描写
  245. if (mesh.position.y > 60) groupP.add(mesh)
  246. }
  247. }
  248. }
  249. groupP.position.y = y_pos
  250. var line_ran = []
  251. // グラフ線アニメーション
  252. for (var i = 0; i < groupPtcl.children.length; i++) {
  253. var x_ = groupPtcl.children[i].geometry.vertices[0].x
  254. var y_ = groupPtcl.children[i].geometry.vertices[0].y
  255. var z_ = groupPtcl.children[i].geometry.vertices[0].z
  256. var x__ = groupPtcl.children[i].geometry.vertices[1].x
  257. var y__ = groupPtcl.children[i].geometry.vertices[1].y
  258. var z__ = groupPtcl.children[i].geometry.vertices[1].z
  259. /* var r = 1+((Math.random()*0.1)-0.05);
  260. var r2 = 1+((Math.random()*0.1)-0.05);
  261. */
  262. var r = Math.random() * 5
  263. var r2 = 1 + -(Math.random() * 0.1)
  264. line_ran.push(r)
  265. TweenLite.to(groupPtcl.children[i].geometry.vertices[0], 0, {
  266. x: x__,
  267. y: y__,
  268. z: z__
  269. })
  270. TweenLite.to(groupPtcl.children[i].geometry.vertices[1], 0.5, {
  271. delay: 3.2 + r,
  272. x: x_,
  273. y: y_,
  274. z: z_
  275. })
  276. TweenLite.to(groupPtcl.children[i].geometry.vertices[0], 1, {
  277. delay: 2.2 + r,
  278. x: x_,
  279. y: y_,
  280. z: z_
  281. })
  282. TweenLite.to(groupPtcl.children[i].geometry.vertices[1], 0, {
  283. delay: 4.2 + r,
  284. x: x__,
  285. y: y__,
  286. z: z__
  287. })
  288. TweenLite.to(groupPtcl.children[i].geometry.vertices[0], 0, {
  289. delay: 4.2 + r,
  290. x: x__,
  291. y: y__,
  292. z: z__
  293. })
  294. var t = new TimelineMax({
  295. repeat: -1,
  296. delay: 3 + r
  297. })
  298. t.to(groupPtcl.children[i].geometry.vertices[0], 1, {
  299. delay: 3,
  300. x: x__ + 0.05,
  301. y: y__ + 0.05,
  302. z: z__ + 0.05
  303. })
  304. t.to(groupPtcl.children[i].geometry.vertices[0], 1, {
  305. delay: 3,
  306. x: x_,
  307. y: y_,
  308. z: z_
  309. })
  310. t.to(groupPtcl.children[i].geometry.vertices[1], 0.5, {
  311. x: x_,
  312. y: y_,
  313. z: z_
  314. })
  315. }
  316. groupPtcl.position.y = y_pos
  317. // 通信線
  318. var line_num = []
  319. for (var i = 0; i < ls.length - 1; i++) {
  320. var ran = Math.floor(Math.random() * geometry_l.vertices.length - 1)
  321. var geometry = new THREE.Geometry()
  322. var ran_y = 1 + Math.random() * 0.2
  323. var x_ = ls[i].x
  324. var y_ = ls[i].y
  325. var z_ = ls[i].z
  326. if (y_ > 80) {
  327. for (var p = 0; p < la.length - 1; p++) {
  328. var x__ = la[p].x
  329. var y__ = la[p].y
  330. var z__ = la[p].z
  331. if (
  332. x_ - x__ < 10 &&
  333. x_ - x__ > -10 &&
  334. z_ - z__ < 10 &&
  335. z_ - z__ > -10 &&
  336. y_ - y__ < 10 &&
  337. y_ - y__ > -10
  338. ) {
  339. geometry.vertices.push(
  340. new THREE.Vector3(x_, y_, z_),
  341. new THREE.Vector3(x__, y__, z__)
  342. )
  343. line_num.push(p)
  344. var line = new THREE.Line(geometry, material_line_g)
  345. groupB.add(line)
  346. break
  347. }
  348. }
  349. }
  350. }
  351. for (var i = 0; i < groupB.children.length; i++) {
  352. var x_ = groupB.children[i].geometry.vertices[1].x
  353. var y_ = groupB.children[i].geometry.vertices[1].y
  354. var z_ = groupB.children[i].geometry.vertices[1].z
  355. var x__ = groupB.children[i].geometry.vertices[0].x
  356. var y__ = groupB.children[i].geometry.vertices[0].y
  357. var z__ = groupB.children[i].geometry.vertices[0].z
  358. TweenMax.to(groupB.children[i].geometry.vertices[1], 0, {
  359. x: x__,
  360. y: y__,
  361. z: z__
  362. })
  363. //
  364. var t2 = new TimelineMax({
  365. delay: 1.2 + line_ran[line_num[i]]
  366. })
  367. t2.to(groupB.children[i].geometry.vertices[0], 1, {
  368. x: x_,
  369. y: y_,
  370. z: z_
  371. })
  372. t2.to(groupB.children[i].geometry.vertices[1], 1, {
  373. x: x_,
  374. y: y_,
  375. z: z_
  376. })
  377. var t = new TimelineMax({
  378. repeat: -1,
  379. delay: 3 + line_ran[line_num[i]]
  380. })
  381. t.to(groupB.children[i].geometry.vertices[0], 1, {
  382. delay: 3,
  383. x: x__,
  384. y: y__,
  385. z: z__
  386. })
  387. t.to(groupB.children[i].geometry.vertices[1], 1, {
  388. x: x__,
  389. y: y__,
  390. z: z__
  391. })
  392. t.to(groupB.children[i].geometry.vertices[0], 1, {
  393. delay: 1,
  394. x: x_,
  395. y: y_,
  396. z: z_
  397. })
  398. t.to(groupB.children[i].geometry.vertices[1], 1, {
  399. x: x_,
  400. y: y_,
  401. z: z_
  402. })
  403. t.to(groupB.children[i].geometry.vertices[1], 0.5, {
  404. x: x_,
  405. y: y_,
  406. z: z_
  407. })
  408. }
  409. groupB.position.y = y_pos
  410. // 回転
  411. var group_rotate = function () {
  412. groupPtcl.rotation.y += 0.002
  413. groupS.rotation.y += 0.002
  414. groupP.rotation.y += 0.002
  415. groupB.rotation.y += 0.002
  416. // groupL.rotation.y +=0.002
  417. for (var i = 0; i < groupB.children.length; i++) {
  418. groupB.children[i].geometry.verticesNeedUpdate = true
  419. }
  420. for (var i = 0; i < groupPtcl.children.length; i++) {
  421. groupPtcl.children[i].geometry.verticesNeedUpdate = true
  422. }
  423. }
  424. enter_anim.push(group_rotate)
  425. scene.add(groupP)
  426. scene.add(groupL)
  427. scene.add(groupS)
  428. scene.add(groupB)
  429. scene.add(groupPtcl)
  430. scene.fog = new THREE.Fog(0xffffff, 50, 250)
  431. // make_para()
  432. enter_arr.push(render)
  433. }
  434. let frame = 0
  435. var render = function () {
  436. // controls.update();
  437. frame++
  438. if (frame % 2 == 0) {
  439. return
  440. }
  441. renderer.render(scene, camera)
  442. }
  443. var enter_arr = []
  444. var enter_anim = []
  445. function loop_frame () {
  446. for (var i = 0; i < enter_arr.length; i++) {
  447. enter_arr[i]()
  448. }
  449. for (var i = 0; i < enter_anim.length; i++) {
  450. enter_anim[i]()
  451. }
  452. requestAnimationFrame(loop_frame)
  453. }
  454. }
  455. }
  456. </script>
  457. <style lang="css">
  458. </style>