首页 > 其他分享 >three.js多卫星环绕效果

three.js多卫星环绕效果

时间:2024-10-22 23:16:59浏览次数:3  
标签:THREE three 相机 camera renderer new 环绕 js

文章目录

webgl-three.js 多卫星环绕应用

` 提示:three.js 官方给了我们月球绕地球旋转,除了月球,息息相关的就是我们发射的各种卫星,那么多个卫星,不同角度,不同弧度,带有卫星旋转的轨道等功能又是怎样展示的呢?

效果图展示

在这里插入图片描述多维度展示星球旋转效果,以及不同卫星的光晕效果

整体架构流程

该成果采用[email protected] 新版本应用实践,适合页面首屏可视化展示以及新技术应用等方面。

three.js基础介绍:

在 Three.js 中,有三个重要的要素:场景(Scene)、相机(Camera)和渲染器(Renderer)。

一、场景(Scene)

场景就像是一个容器,用来容纳所有要在画面中呈现的物体。

  1. 物体管理:可以将各种 3D 模型、光源、粒子系统等添加到场景中。例如,可以创建一个立方体、球体等几何形状的物体,然后将其添加到场景中展示。
    var geometry = new THREE.BoxGeometry(1, 1, 1);
    var material = new THREE.MeshBasicMaterial({
          color: 0x00ff00 });
    var cube = new THREE.Mesh(geometry, material);
    scene.add(cube);
    
  2. 背景设置:可以设置场景的背景颜色或加载一个背景图像。这为整个 3D 场景提供了一个合适的环境氛围。
    scene.background = new THREE.Color(0xffffff); // 设置白色背景
    

二、相机(Camera)

相机决定了从哪个视角观察场景中的物体。

  1. 视角类型:Three.js 提供了多种类型的相机,其中最常用的是透视相机(PerspectiveCamera)和正交相机(OrthographicCamera)。透视相机模拟人眼的视觉效果,物体近大远小;正交相机则无论物体距离相机多远,大小都保持不变。
    // 透视相机
    var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
    // 正交相机
    var orthoCamera = new THREE.OrthographicCamera(-10, 10, 10, -10, 0.1, 1000);
    
  2. 位置调整:通过设置相机的位置,可以改变观察场景的角度。可以将相机放置在不同的位置,从不同的方向观察场景中的物体。
    camera.position.z = 5;
    

三、渲染器(Renderer)

渲染器负责将场景和相机所定义的 3D 内容绘制到屏幕上。

  1. 设置参数:可以设置渲染器的大小、抗锯齿等参数。例如,可以根据浏览器窗口的大小调整渲染器的尺寸,以确保画面能够完整显示。
    var renderer = new THREE.WebGLRenderer({
          antialias: true });
    renderer.setSize(window.innerWidth, window.innerHeight);
    
  2. 渲染循环:渲染器通过不断地调用渲染函数,更新画面。在渲染循环中,可以对场景中的物体进行动画处理,使画面更加生动。
    function render() {
         
      requestAnimationFrame(render);
      renderer.render(scene, camera);
    }
    render();
    

在充分理解了三要素的作用下下面开始绘制页面实现的效果:

具体展示如下所示:
<template>
    <div class="threeBox" id="xk_bg"></div>
</template>

<script setup>
import {
    onMounted, onBeforeUnmount } from "vue"
import * as THREE from 'three';

import Stats from 'three/addons/libs/stats.module.js';
import {
    OrbitControls } from 'three/addons/controls/OrbitControls.js';

let renderer, scene, camera, stats, earth;
let destroyList = []

let particleSystem, uniforms, geometry;
// console.log(router)
// 创建围绕中心球体环形轨道匀速旋转的物体
var numObjects = 4;
var objects = [];
const satRadius = 25;
const satellites = []


var numObjects1 = 1;
var objects1 = [];
const satRadius1 = 52;

const particles = 1000;
const textureLoader = new THREE.TextureLoader();

destroyList.push(textureLoader)


onMounted(() => {
   
    //   console.log("12121")
    init();
})
onBeforeUnmount(() => {
   
    //   console.log("触发了")
    threeDestory()
})
function threeDestory() {
   

    renderer.setAnimationLoop(null)
    // 销毁mesh对象
    if (earth) {
   
        scene.remove(earth);
        earth.geometry.dispose();
        if (earth.material) {
   
            earth.material.dispose();
        }
        earth = null;
    }
    //   destroyList.forEach(item => {
   
    //     if (item && item.dispose) {
   
    //       item.dispose()
    //     }
    //   })

    // 销毁camera和renderer对象
    if (camera) {
   
        camera = null;
    }

    if (renderer) {
   
        renderer.forceContextLoss(); // 强制WebGL上下文失效
        renderer.domElement = null;
        renderer = null;
    }

    // 销毁scene对象
    scene.traverse(function (child) {
   
        if (child.isMesh) {
   
            child.geometry.dispose();
            if (child.material) {
   
                child.material.dispose();
            }
        }
    });

    scene = null;
}

function init() {
   

    camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 1, 10000);
    camera.position.z = 60;
    camera.position.x = 10;
    camera.position.y = 100;

    scene = new THREE.Scene();


    // 添加灯光
    const dirLight = new THREE.DirectionalLight(0xffffff, 3

标签:THREE,three,相机,camera,renderer,new,环绕,js
From: https://blog.csdn.net/m0_51244077/article/details/143030615

相关文章

  • ssm校友录的设计与实现+jsp
    系统包含:源码+论文所用技术:SpringBoot+Vue+SSM+Mybatis+Mysql免费提供给大家参考或者学习,获取源码请私聊我需要定制请私聊目录摘要 I目录 III第1章绪论 11.1研究背景 11.2目的和意义 11.3论文研究内容 2第2章程序开发技术 32.1Mysql数据库 32.2J......
  • JS实现抽奖效果
    代码:<!DOCTYPEhtml><htmllang="en"><head>  <metacharset="UTF-8">  <metaname="viewport"content="width=device-width,initial-scale=1.0">  <title>Document</title>......
  • jsp高校二级学院通用门户网站p9s8s程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,日志信息,分享信息,标签开题报告内容一、研究背景与目的随着互联网的普及和信息技术的发展,高校二级学院门户网站已成为学院对外展示形象、发布信息、提供......
  • jsp高校创新创业服务平台6eb2q--程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表学生,专家,创业新闻,创业政策,项目申请,项目指派,初期答辩,中期答辩,结题答辩,创业项目开题报告内容一、研究背景与意义随着国家创新驱动发展战略的深入实施,高......
  • jsp高校毕业生就业信息管理系统k7241(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表学生,教师,企业,岗位信息,招聘信息,应聘信息,就业情况,就业协议,问题反馈,反馈回复开题报告内容一、项目背景面对日益严峻的高校毕业生就业形势,传统的人工就业......
  • 手写丐版immerjs
    手写丐版immerjs:constcreateProxy=(target)=>{constdata={__initial:target,__copy:null,__isModified:false}consthandler={get(state,attr){if(!state.__isModified)returnstate.__initial[attr]if(sta......
  • 使用 `com.google.gson` 库将 Java 对象转换为 JSON 字符串,并且确保 `data` 字段是 `M
    要使用com.google.gson库将Java对象转换为JSON字符串,并且确保data字段是Map<String,Object>类型的,你可以按照以下步骤编写一个示例代码。这个示例代码将创建一个包含data字段的Java对象,并将data字段初始化为一个Map<String,Object>,然后动态地向其中添加......
  • Features of three electronic component platforms: Findchips, JLCPCB, and ICgoodF
    Thecharacteristicsofthreeelectroniccomponentplatforms:Findchips,JLCPCB,andICgoodFindareasfollows:Findchips:Powerfulsearchanddataintegrationfunction.Itcanaggregatedatafrommajordistributors.Userscansearchforinformationonse......
  • js类型判断(实用,不拖拉)
    本文介绍三种js类型判断方法。一、typeof(有坑)语法:typeof(表达式)、typeof变量名返回值:undefined/boolean/string/number/object/function/symbol/bigint示例:typeofundefined//undefinedtypeoftrue//booleantypeof'1'//stringtypeof1//numbertypeofn......
  • 原生js实现列表内容向上滚动,列表内容向上轮播
    <divid="review_box"><ulid="conent1"><li>第一条内容</li><li>第二条内容</li><li>第三条内容</li><li>第四条内容</li><li>第五条内容</li>......