From c755b7c6e1d9dda26ac6c41a1c49896ebedd077d Mon Sep 17 00:00:00 2001 From: ZhangXianQiang <1135831638@qq.com> Date: 星期五, 29 三月 2024 15:11:14 +0800 Subject: [PATCH] feat:基础场景搭建 --- src/views/screen/components/screen-map-three/world/renderer.js | 11 +++ src/views/screen/components/screen-map-three/world/camera.js | 8 ++ src/views/screen/components/screen-map-cover/index.vue | 36 ++++++++++++ src/views/screen/components/screen-wrapper/index.vue | 13 +++ src/views/screen/components/screen-map-three/index.vue | 18 ++++- src/views/screen/components/screen-map-three/world/world.js | 29 +++++++++ src/views/screen/components/screen-map-three/world/scene.js | 9 +++ 7 files changed, 118 insertions(+), 6 deletions(-) diff --git a/src/views/screen/components/screen-map-cover/index.vue b/src/views/screen/components/screen-map-cover/index.vue new file mode 100644 index 0000000..c788b03 --- /dev/null +++ b/src/views/screen/components/screen-map-cover/index.vue @@ -0,0 +1,36 @@ +<template> + <div class="map-container"> + <wrapper-title :title="'鍖哄煙鍦板浘'"></wrapper-title> + <div class="map-content"> + </div> + </div> + +</template> + +<script> +import WrapperTitle from '../wrapper-title/index'; + +export default { + name: 'ScreenMapCover', + components: { + WrapperTitle + } +} +</script> + +<style lang="scss" scoped> +.map-container { + width: 100%; + flex: 1; + margin-bottom: 20px; + display: flex; + flex-direction: column; + + .map-content { + flex: 1; + pointer-events: none; + + } + +} +</style> \ No newline at end of file diff --git a/src/views/screen/components/screen-map-three/index.vue b/src/views/screen/components/screen-map-three/index.vue index aae98bf..9d6eedf 100644 --- a/src/views/screen/components/screen-map-three/index.vue +++ b/src/views/screen/components/screen-map-three/index.vue @@ -1,13 +1,23 @@ <template> - <div> - 123 + <div class="map-container" ref="mapContainer"> + </div> </template> <script> +import World from './world/world'; +let world = null; export default { - name: 'ScreenMapThree' + name: 'ScreenMapThree', + mounted() { + world = new World(this.$refs.mapContainer); + } } </script> -<style lang="scss" scoped></style> \ No newline at end of file +<style lang="scss" scoped> +.map-container { + width: 100%; + height: 100%; +} +</style> \ No newline at end of file diff --git a/src/views/screen/components/screen-map-three/world/camera.js b/src/views/screen/components/screen-map-three/world/camera.js new file mode 100644 index 0000000..2605ae8 --- /dev/null +++ b/src/views/screen/components/screen-map-three/world/camera.js @@ -0,0 +1,8 @@ +import { PerspectiveCamera } from 'three'; + +function createCamera() { + const camera = new PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 100); + return camera; +} + +export { createCamera }; \ No newline at end of file diff --git a/src/views/screen/components/screen-map-three/world/renderer.js b/src/views/screen/components/screen-map-three/world/renderer.js new file mode 100644 index 0000000..3105c95 --- /dev/null +++ b/src/views/screen/components/screen-map-three/world/renderer.js @@ -0,0 +1,11 @@ +import {WebGLRenderer} from 'three'; + +function createRenderer() { + const renderer = new WebGLRenderer(); + renderer.setPixelRatio(Math.min(2,window.devicePixelRatio)); + renderer.setSize(window.innerWidth, window.innerHeight); + renderer.setClearAlpha(0); + return renderer; +} + +export {createRenderer}; \ No newline at end of file diff --git a/src/views/screen/components/screen-map-three/world/scene.js b/src/views/screen/components/screen-map-three/world/scene.js new file mode 100644 index 0000000..3c47871 --- /dev/null +++ b/src/views/screen/components/screen-map-three/world/scene.js @@ -0,0 +1,9 @@ +import {Scene} from 'three'; + +function createScene() { + const scene = new Scene(); + + return scene; +} + +export { createScene} \ No newline at end of file diff --git a/src/views/screen/components/screen-map-three/world/world.js b/src/views/screen/components/screen-map-three/world/world.js new file mode 100644 index 0000000..aa1718b --- /dev/null +++ b/src/views/screen/components/screen-map-three/world/world.js @@ -0,0 +1,29 @@ + +import { createScene } from "./scene"; +import { createRenderer } from "./renderer"; +import { createCamera } from "./camera"; +export default class World { + /** + * 鐢熸垚3d鍦烘櫙鏋勯�犲嚱鏁� + * @param {*} container 3d鍦烘櫙html瀹瑰櫒 + */ + constructor(container) { + this.container = container; + this.init(); + this.render(); + } + init() { + this.scene = createScene(); + this.renderer = createRenderer(); + this.camera = createCamera(); + this.scene.add(this.camera); + this.container.appendChild(this.renderer.domElement); + } + + render() { + this.renderer.render(this.scene, this.camera); + window.requestAnimationFrame(() => { + this.render(); + }) + } +} \ No newline at end of file diff --git a/src/views/screen/components/screen-wrapper/index.vue b/src/views/screen/components/screen-wrapper/index.vue index d375a26..fdfd4cf 100644 --- a/src/views/screen/components/screen-wrapper/index.vue +++ b/src/views/screen/components/screen-wrapper/index.vue @@ -11,7 +11,8 @@ <screen-video class="animate-enter-x enter-left animate-delay-2"></screen-video> </div> <div class="center-container center-wrapper"> - <screen-map></screen-map> + <!-- <screen-map></screen-map> --> + <screen-map-cover></screen-map-cover> <screen-table class="animate-enter-y enter-top"></screen-table> <!-- <screen-detection></screen-detection> --> @@ -30,6 +31,7 @@ import ScreenVideo from '../screen-video/index'; import ScreenCar from '../screen-car/index'; import ScreenMap from '../screen-map/index'; +import ScreenMapCover from '../screen-map-cover/index'; import ScreenTable from '../screen-table/index'; export default { name: 'ScreenWrapper', @@ -40,7 +42,8 @@ ScreenVideo, ScreenCar, ScreenMap, - ScreenTable + ScreenTable, + ScreenMapCover }, methods: { returnPath() { @@ -105,24 +108,30 @@ flex-direction: column; justify-content: space-between; } + .animate-enter-x { animation: enter-x 0.4s ease forwards; } + .animate-enter-y { animation: enter-y 0.4s ease forwards; } + .enter-left { transform: translateX(-100px); opacity: 0; } + .enter-right { transform: translateX(100px); opacity: 0; } + .enter-top { transform: translateY(100px); opacity: 0; } + .animate-delay-1 { animation-delay: 0.1s; } -- Gitblit v1.8.0