vue2+three.js实现宇宙(进阶版)

这篇具有很好参考价值的文章主要介绍了vue2+three.js实现宇宙(进阶版)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

2023.9.12今天我学习了vue2+three.js实现一个好看的动态效果:

vue2+three.js实现宇宙(进阶版),javascript,开发语言,ecmascript首先是安装:

npm install three

相关代码如下:文章来源地址https://www.toymoban.com/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() {
      // 创建场景
      this.createScene()
      //创建照相机
      this.createCamera()
      // 创建渲染器
      this.createRenderer()
      // 创建物体
      this.createMesh()
      // 创建星空
      this.createStars()
      //触发
      this.render()
    },
    // 创建场景
    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)
    },
    // 创建相机
    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) // 设置相机方向(指向的场景对象)
    },
    // 创建渲染器
    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)
    },
    // 创建物体
    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()
    },
    // 触发
    render() {
      this.renderer.render(this.scene, this.camera)
    },
    animate() {
      // 计算时间差
      const time = Date.now() * 0.001
      // 根据时间变化更新球体和光源的位置
      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)
      // 触发渲染
      this.render()
      // 不断循环调用 animate 函数
      requestAnimationFrame(this.animate)
    },
  }
}
</script>

到了这里,关于vue2+three.js实现宇宙(进阶版)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Three.js系列: 在元宇宙看电影,享受 VR 视觉盛宴

    本文 gihtub 地址: https://github.com/hua1995116/Fly-Three.js 最近元宇宙的概念很火,并且受到疫情的影响,我们的出行总是受限,电影院也总是关门,但是在家里又没有看大片的氛围,这个时候我们就可以通过自己来造一个宇宙,并在 VR 设备(Oculus 、cardboard)中来观看。 今天我打算

    2024年02月08日
    浏览(42)
  • three.js实现点击事件(vue)

    1.加载模型(通过点击模型触发事件) 2.通过射线获取到事件源 (new THREE.Raycaster()和new THREE.Vector2()) 3.通过点击到该模型使用名字匹配 clickedObject.name==“xx” addEventListener监听事件触发 创建 Raycaster和Vector2 计算鼠标或触摸点的位置 (这里的event是通过事件监听获取) 更新射线

    2024年02月16日
    浏览(50)
  • three.js实现vr全景图(vue)

    方法: 可以利用Threejs中的立方体或者球体实现全景图功能,把立方体或球体当成天空盒子,将无缝衔接的图片贴上,看起来就像在一个场景中,相机一般放置在中央。 three.js中文网 1、立方体实现 立方体6个面要贴上6个方向的图片,这6个图片如下所示: 实现代码如下: 图片

    2024年02月12日
    浏览(40)
  • 使用JavaScript和Vue.js框架开发的电子商务网站,实现商品展示和购物车功能

    引言: 随着互联网的快速发展和智能手机的普及,电子商务行业正迎来一个全新的时代。越来越多的消费者选择网上购物,而不再局限于传统的实体店。这种趋势不仅仅是改变了消费者的习惯购物,也给企业带来了巨大的商机。为了不断满足消费者的需求,电子商务网站需要

    2024年02月15日
    浏览(59)
  • vue 项目使用three.js 实现3D看房效果

    0.前言 该教程能帮助直接写出vue项目的3D看房效果!!! 先上效果图 1.安装依赖 2.vue代码 这里文件名为three.vue 代码非原创,出处 vue3+threejs实现全景看房 (异步加载 BOLLROOM 部件为对原代码的修改) 注意这里的hdr 文件必须要放在assets文件夹中,且要通过import模块的形式导入!

    2024年02月13日
    浏览(56)
  • vue3结合three.js实现3D带有交互的动画

    three.js引入 安装轨道控件插件: 安装渲染器插件: vue文件中引用: 在页面中创建场景 创建一个透视相机 初始化渲染器 初始动画混合器 参数:rootObject 混合器播放的动画所属的对象。就是包含动画模型的场景对象。 常用参数和属性: .time 全局的混合器时间。 .clipAction(Ani

    2024年02月04日
    浏览(55)
  • three.js进阶之动画系统

    我曾在three.js进阶之骨骼绑定文章中提到了AnimationMixer、AnimationAction等内容,其实这些应该属于Three.js的动画系统,本文就系统的介绍一下动画系统(Animation System)。 一般情况下,我们很少会使用three.js的动画系统去手动创建动画——因为这真的很麻烦,更高效便捷的做法还是

    2024年02月02日
    浏览(41)
  • 【js&three.js】全景vr看房进阶版

    Scene场景 指包含了所有要渲染和呈现的三维对象、光源、相机以及其他相关元素的环境;场景可以被渲染引擎或图形库加载和处理,以生成最终的图像或动画 常见属性: 常见方法: Geometry  几何体 指的是表示和描述三维对象形状的数据, 描述了对象的形状 常用的Geometry(几

    2024年02月10日
    浏览(48)
  • Three.js 进阶之旅:页面平滑滚动-王国之泪 ?

    声明:本文涉及图文和模型素材仅用于个人学习、研究和欣赏,请勿二次修改、非法传播、转载、出版、商用、及进行其他获利行为。 浏览网页时,常被一些基于鼠标滚轮控制的页面动画所惊艳到,比如greensock 官网这些 showcase 案例页面就非常优秀,它们大多数都是使用 Tw

    2024年02月02日
    浏览(51)
  • Three.js 进阶之旅:滚动控制模型动画和相机动画 ?

    声明:本文涉及图文和模型素材仅用于个人学习、研究和欣赏,请勿二次修改、非法传播、转载、出版、商用、及进行其他获利行为。 专栏上篇文章《Three.js 进阶之旅:页面*滑滚动-王国之泪》 讲解并实现了如何使用 R3F 进行页面图片*滑滚动,本文内容在上节的基础上,学习

    2024年02月06日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包