国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

vue2+three.js實(shí)現(xiàn)宇宙(進(jìn)階版)

這篇具有很好參考價(jià)值的文章主要介紹了vue2+three.js實(shí)現(xiàn)宇宙(進(jìn)階版)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

2023.9.12今天我學(xué)習(xí)了vue2+three.js實(shí)現(xiàn)一個(gè)好看的動態(tài)效果:

vue2+three.js實(shí)現(xiàn)宇宙(進(jìn)階版),javascript,開發(fā)語言,ecmascript首先是安裝:

npm install three

相關(guān)代碼如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-708136.html

<!--3d宇宙效果-->
<template>
  <div>
    <div id="content" />
  </div>
</template>
<script>
import * as THREE from 'three'

export default {
  data() {
    return {
      scene: null,
      camera: null,
      renderer: null,
      mesh: null,
      light: null,
      stars: null,
      mesh3: null
    }
  },
  mounted() {
    this.init()
    this.animate()
  },
  methods: {
    init() {
      // 創(chuàng)建場景
      this.createScene()
      //創(chuàng)建照相機(jī)
      this.createCamera()
      // 創(chuàng)建渲染器
      this.createRenderer()
      // 創(chuàng)建物體
      this.createMesh()
      // 創(chuàng)建星空
      this.createStars()
      //觸發(fā)
      this.render()
    },
    // 創(chuàng)建場景
    createScene() {
      this.scene = new THREE.Scene()
      this.light = new THREE.DirectionalLight(0xffffff, 1)
      this.light.position.set(100, 100, 100)
      this.scene.add(this.light)
    },
    createStars() {
      const geometry = new THREE.BufferGeometry()
      const positions = []
      for (let i = 0; i < 10000; i++) {
        const x = THREE.MathUtils.randFloatSpread(2000)
        const y = THREE.MathUtils.randFloatSpread(2000)
        const z = THREE.MathUtils.randFloatSpread(2000)
        positions.push(x, y, z)
      }
      geometry.setAttribute('position', new THREE.Float32BufferAttribute(positions, 3))
      const material = new THREE.PointsMaterial({color: 0xffffff})
      this.stars = new THREE.Points(geometry, material)
      this.scene.add(this.stars)
    },
    // 創(chuàng)建相機(jī)
    createCamera() {
      this.camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000)
      this.camera.position.set(200, 200, 200)
      this.camera.lookAt(this.scene.position) // 設(shè)置相機(jī)方向(指向的場景對象)
    },
    // 創(chuàng)建渲染器
    createRenderer() {
      this.renderer = new THREE.WebGLRenderer()
      this.renderer.setSize(window.innerWidth, window.innerHeight)
      this.renderer.setClearColor(new THREE.Color(0x000000))
      document.getElementById('content').appendChild(this.renderer.domElement)
    },
    // 創(chuàng)建物體
    createMesh() {
      let geometry1 = new THREE.SphereGeometry(40, 40, 40)
      let material1 = new THREE.MeshLambertMaterial({
        color: 0x00ff00
      })
      this.mesh = new THREE.Mesh(geometry1, material1)
      this.mesh.position.set(0, 0, 0)
      this.scene.add(this.mesh)

      let geometry2 = new THREE.SphereGeometry(50, 50, 50)
      let material2 = new THREE.MeshLambertMaterial({
        color: 0xADD8E6
      })
      let mesh2 = new THREE.Mesh(geometry2, material2)
      mesh2.position.set(-40, 0, 0)
      this.scene.add(mesh2)

      let geometry3 = new THREE.SphereGeometry(30, 50, 50)
      let material3 = new THREE.MeshLambertMaterial({
        color: 0x800080
      })
      this.mesh3 = new THREE.Mesh(geometry3, material3)
      this.mesh3.position.set(160, 0, 0)
      this.scene.add(this.mesh3)

      let geometry4 = new THREE.SphereGeometry(35, 50, 50)
      let material4 = new THREE.MeshLambertMaterial({
        color: 0xFFFF00
      })
      let mesh4 = new THREE.Mesh(geometry4, material4)
      mesh4.position.set(-20, 80, 150)
      this.scene.add(mesh4)

      let geometry5 = new THREE.SphereGeometry(15, 50, 50)
      let material5 = new THREE.MeshLambertMaterial({
        color: 0x0000FF
      })
      let mesh5 = new THREE.Mesh(geometry5, material5)
      mesh5.position.set(120, 80, -80)
      this.scene.add(mesh5)

      this.render()
    },
    // 觸發(fā)
    render() {
      this.renderer.render(this.scene, this.camera)
    },
    animate() {
      // 計(jì)算時(shí)間差
      const time = Date.now() * 0.001
      // 根據(jù)時(shí)間變化更新球體和光源的位置
      this.mesh.position.set(100 * Math.cos(time), 100 * Math.sin(time), 0)
      this.mesh3.position.set(0, 50 * Math.cos(time), 100 * Math.sin(time))
      this.light.position.set(50 * Math.cos(time), 50 * Math.sin(time), 0)
      // 觸發(fā)渲染
      this.render()
      // 不斷循環(huán)調(diào)用 animate 函數(shù)
      requestAnimationFrame(this.animate)
    },
  }
}
</script>

到了這里,關(guān)于vue2+three.js實(shí)現(xiàn)宇宙(進(jìn)階版)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Three.js系列: 在元宇宙看電影,享受 VR 視覺盛宴

    Three.js系列: 在元宇宙看電影,享受 VR 視覺盛宴

    本文 gihtub 地址: https://github.com/hua1995116/Fly-Three.js 最近元宇宙的概念很火,并且受到疫情的影響,我們的出行總是受限,電影院也總是關(guān)門,但是在家里又沒有看大片的氛圍,這個(gè)時(shí)候我們就可以通過自己來造一個(gè)宇宙,并在 VR 設(shè)備(Oculus 、cardboard)中來觀看。 今天我打算

    2024年02月08日
    瀏覽(23)
  • three.js實(shí)現(xiàn)點(diǎn)擊事件(vue)

    three.js實(shí)現(xiàn)點(diǎn)擊事件(vue)

    1.加載模型(通過點(diǎn)擊模型觸發(fā)事件) 2.通過射線獲取到事件源 (new THREE.Raycaster()和new THREE.Vector2()) 3.通過點(diǎn)擊到該模型使用名字匹配 clickedObject.name==“xx” addEventListener監(jiān)聽事件觸發(fā) 創(chuàng)建 Raycaster和Vector2 計(jì)算鼠標(biāo)或觸摸點(diǎn)的位置 (這里的event是通過事件監(jiān)聽獲?。?更新射線

    2024年02月16日
    瀏覽(23)
  • three.js實(shí)現(xiàn)vr全景圖(vue)

    three.js實(shí)現(xiàn)vr全景圖(vue)

    方法: 可以利用Threejs中的立方體或者球體實(shí)現(xiàn)全景圖功能,把立方體或球體當(dāng)成天空盒子,將無縫銜接的圖片貼上,看起來就像在一個(gè)場景中,相機(jī)一般放置在中央。 three.js中文網(wǎng) 1、立方體實(shí)現(xiàn) 立方體6個(gè)面要貼上6個(gè)方向的圖片,這6個(gè)圖片如下所示: 實(shí)現(xiàn)代碼如下: 圖片

    2024年02月12日
    瀏覽(20)
  • 使用JavaScript和Vue.js框架開發(fā)的電子商務(wù)網(wǎng)站,實(shí)現(xiàn)商品展示和購物車功能

    引言: 隨著互聯(lián)網(wǎng)的快速發(fā)展和智能手機(jī)的普及,電子商務(wù)行業(yè)正迎來一個(gè)全新的時(shí)代。越來越多的消費(fèi)者選擇網(wǎng)上購物,而不再局限于傳統(tǒng)的實(shí)體店。這種趨勢不僅僅是改變了消費(fèi)者的習(xí)慣購物,也給企業(yè)帶來了巨大的商機(jī)。為了不斷滿足消費(fèi)者的需求,電子商務(wù)網(wǎng)站需要

    2024年02月15日
    瀏覽(26)
  • vue 項(xiàng)目使用three.js 實(shí)現(xiàn)3D看房效果

    vue 項(xiàng)目使用three.js 實(shí)現(xiàn)3D看房效果

    0.前言 該教程能幫助直接寫出vue項(xiàng)目的3D看房效果?。?! 先上效果圖 1.安裝依賴 2.vue代碼 這里文件名為three.vue 代碼非原創(chuàng),出處 vue3+threejs實(shí)現(xiàn)全景看房 (異步加載 BOLLROOM 部件為對原代碼的修改) 注意這里的hdr 文件必須要放在assets文件夾中,且要通過import模塊的形式導(dǎo)入!

    2024年02月13日
    瀏覽(94)
  • vue3結(jié)合three.js實(shí)現(xiàn)3D帶有交互的動畫

    three.js引入 安裝軌道控件插件: 安裝渲染器插件: vue文件中引用: 在頁面中創(chuàng)建場景 創(chuàng)建一個(gè)透視相機(jī) 初始化渲染器 初始動畫混合器 參數(shù):rootObject 混合器播放的動畫所屬的對象。就是包含動畫模型的場景對象。 常用參數(shù)和屬性: .time 全局的混合器時(shí)間。 .clipAction(Ani

    2024年02月04日
    瀏覽(29)
  • three.js進(jìn)階之動畫系統(tǒng)

    three.js進(jìn)階之動畫系統(tǒng)

    我曾在three.js進(jìn)階之骨骼綁定文章中提到了AnimationMixer、AnimationAction等內(nèi)容,其實(shí)這些應(yīng)該屬于Three.js的動畫系統(tǒng),本文就系統(tǒng)的介紹一下動畫系統(tǒng)(Animation System)。 一般情況下,我們很少會使用three.js的動畫系統(tǒng)去手動創(chuàng)建動畫——因?yàn)檫@真的很麻煩,更高效便捷的做法還是

    2024年02月02日
    瀏覽(23)
  • 【js&three.js】全景vr看房進(jìn)階版

    【js&three.js】全景vr看房進(jìn)階版

    Scene場景 指包含了所有要渲染和呈現(xiàn)的三維對象、光源、相機(jī)以及其他相關(guān)元素的環(huán)境;場景可以被渲染引擎或圖形庫加載和處理,以生成最終的圖像或動畫 常見屬性: 常見方法: Geometry? 幾何體 指的是表示和描述三維對象形狀的數(shù)據(jù), 描述了對象的形狀 常用的Geometry(幾

    2024年02月10日
    瀏覽(25)
  • Three.js 進(jìn)階之旅:頁面平滑滾動-王國之淚 ?

    Three.js 進(jìn)階之旅:頁面平滑滾動-王國之淚 ?

    聲明:本文涉及圖文和模型素材僅用于個(gè)人學(xué)習(xí)、研究和欣賞,請勿二次修改、非法傳播、轉(zhuǎn)載、出版、商用、及進(jìn)行其他獲利行為。 瀏覽網(wǎng)頁時(shí),常被一些基于鼠標(biāo)滾輪控制的頁面動畫所驚艷到,比如greensock 官網(wǎng)這些 showcase 案例頁面就非常優(yōu)秀,它們大多數(shù)都是使用 Tw

    2024年02月02日
    瀏覽(92)
  • Three.js 進(jìn)階之旅:滾動控制模型動畫和相機(jī)動畫 ?

    Three.js 進(jìn)階之旅:滾動控制模型動畫和相機(jī)動畫 ?

    聲明:本文涉及圖文和模型素材僅用于個(gè)人學(xué)習(xí)、研究和欣賞,請勿二次修改、非法傳播、轉(zhuǎn)載、出版、商用、及進(jìn)行其他獲利行為。 專欄上篇文章《Three.js 進(jìn)階之旅:頁面*滑滾動-王國之淚》 講解并實(shí)現(xiàn)了如何使用 R3F 進(jìn)行頁面圖片*滑滾動,本文內(nèi)容在上節(jié)的基礎(chǔ)上,學(xué)習(xí)

    2024年02月06日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包