返回顶部
首页 > 资讯 > 精选 >使用three.js怎么模拟一个太阳系行星体系
  • 609
分享到

使用three.js怎么模拟一个太阳系行星体系

2023-06-09 12:06:55 609人浏览 泡泡鱼
摘要

使用three.js怎么模拟一个太阳系行星体系?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。概况如下: SphereGeometry 实现自转的太阳; RingGeometry

使用three.js怎么模拟一个太阳系行星体系?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

概况如下:

SphereGeometry 实现自转的太阳;

RingGeometry 实现太阳系星系的公转轨道;

ImageUtils 加载球体和各行星贴图;

canvas 中 createRadialGradient 实现太阳发光效果;

THREE.Sprite 精灵实现太阳系行星。

// 初始化场景var scene = new THREE.Scene();// 初始化相机,第一个参数为摄像机视锥体垂直视野角度,第二个参数为摄像机视锥体长宽比,// 第三个参数为摄像机视锥体近端面,第四个参数为摄像机视锥体远端面var camera = new THREE.PerspectiveCamera(20, dom.clientWidth / dom.clientHeight, 1, 100000);// 设置相机位置,对应参数分别表示x,y,z位置camera.position.set(0, 0, 500);var renderer = new THREE.webGLRenderer({      alpha: true,      antialias: true});

设置场景窗口尺寸,并且初始化控制器,窗口尺寸默认与浏览器窗口尺寸保持一致,最后将渲染器加载到dom中。

// 设置窗口尺寸,第一个参数为宽度,第二个参数为高度renderer.setSize(dom.clientWidth, dom.clientHeight);// 初始化控制器var orbitcontrols = new THREE.OrbitControls(camera,renderer.domElement);// 将渲染器加载到dom中dom.appendChild(renderer.domElement);

定义太阳及其材质,太阳通过 SphereGeometry 来实现,通过 ImageUtils 来导入贴图。

// 定义太阳材质var sunTexture = THREE.ImageUtils.loadTexture('./image/sun_bg.jpg', {}, function () {    renderer.render(scene, camera);});// 太阳以及太阳材质设定centerBall = new THREE.Mesh(new THREE.SphereGeometry(30, 30, 30), new THREE.MeshBasicMaterial({    map: sunTexture}));scene.add(centerBall);

太阳发光效果通过 Sprite 引入 canvas 渲染的 createRadialGradient 来实现。

var generateSprite = function (color) {   var canvas = document.createElement('canvas');   canvas.width = 16;   canvas.height = 16;   var context = canvas.getContext('2d');   var gradient = context.createRadialGradient(canvas.width / 2, canvas.height / 2, 0, canvas.width / 2,    canvas.height / 2, canvas.width / 2);   gradient.addColorStop(0, 'rgba(' + color + ',1)');   gradient.addColorStop(0.2, 'rgba(' + color + ',1)');   gradient.addColorStop(0.4, 'rgba(' + color + ',.6)');   gradient.addColorStop(1, 'rgba(0,0,0,0)');   context.fillStyle = gradient;   context.fillRect(0, 0, canvas.width, canvas.height);   return canvas;};// 添加太阳发光效果var centerBallLite = new THREE.Sprite(new THREE.SpriteMaterial({   map: new THREE.CanvasTexture(generateSprite(sunSpriteColor)),   blending: THREE.AdditiveBlending}));centerBallLite.scale.x = centerBallLite.scale.y = centerBallLite.scale.z = sunScaleSize;scene.add(centerBallLite);

太阳系各行星公转轨道通过 RingGeometry 来实现,公转轨道偏移通过 position 来实现,行星体系通过 THREE.Sprite 来实现。

var initSatellite = function (starLiteSize, starLiteRadius, rotation, speed, imgUrl, scene) {var track = new THREE.Mesh(new THREE.RingGeometry(starLiteRadius, starLiteRadius + 0.05, 50, 1), new THREE.MeshBasicMaterial());var centerMesh = new THREE.Mesh(new THREE.SphereGeometry(1, 1, 1), new THREE.MeshLambertMaterial()); //材质设定var starLite = new THREE.Sprite(new THREE.SpriteMaterial({     map: THREE.ImageUtils.loadTexture(imgUrl)}));starLite.scale.x = starLite.scale.y = starLite.scale.z = starLiteSize;starLite.position.set(starLiteRadius, 0, 0);var pivotPoint = new THREE.Object3D();pivotPoint.add(starLite);pivotPoint.add(track);centerMesh.add(pivotPoint);centerMesh.rotation.set(rotation.x, rotation.y, rotation.z);scene.add(centerMesh);   return {starLite: centerMesh, speed: speed};};

将创建好的太阳及行星自转公转体系渲染到场景中,自转和公转通过定时修改 position 值来实现,动画使用 requestAnimationFrame 来实现。

// 执行函数var render = function () {    renderer.render(scene, camera);    centerBall.rotation.y -= 0.01;    for (var i = 0; i < starLites.length; i++) {        starLites[i].starLite.rotation.z -= starLites[i].speed;    }    orbitcontrols.update();    requestAnimationFrame(render);}

看完上述内容,你们掌握使用three.js怎么模拟一个太阳系行星体系的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: 使用three.js怎么模拟一个太阳系行星体系

本文链接: https://lsjlt.com/news/255980.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用three.js怎么模拟一个太阳系行星体系
    使用three.js怎么模拟一个太阳系行星体系?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。概况如下: SphereGeometry 实现自转的太阳; RingGeometry...
    99+
    2023-06-09
  • Python怎么用3D引擎做一个太阳系行星模拟器
    这一次,我们要实现的效果如下首先,送上本次需要用到的资源Earth.jpgJupiter.jpgMars.jpgMercury.jpgNeptune.jpgSaturn.jpgSun.jpgUranus.jpgVenus.jpg现在,就开始...
    99+
    2023-05-14
    Python
  • 150行Python代码模拟太阳系行星运转
    今天我们用Python来模拟一下太阳系行星运动轨迹玩玩~ 先上成品图(运行效果含音乐的呦) 想要实现这样的效果并不难 准备材料 首先我们需要准备这样一些材料 宇宙背景图 背景透明的行星图  编写代码 代码分块详解 导入需要的模块 ...
    99+
    2023-09-04
    python pygame 开发语言
  • html5怎么使用画布重新排列太阳系效果
    这篇文章给大家分享的是有关html5怎么使用画布重新排列太阳系效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。     星球变量名公转周期光色暗色 &n...
    99+
    2024-04-02
  • 使用Java模拟一个吃货联盟订餐系统
    本篇文章给大家分享的是有关使用Java模拟一个吃货联盟订餐系统,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。java基本数据类型有哪些Java的基本数据类型分为:1、整数类型,...
    99+
    2023-06-14
  • 使用Python怎么模拟一个n阶魔方
    今天就跟大家聊聊有关使用Python怎么模拟一个n阶魔方,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。import cv2import numpy as...
    99+
    2023-06-14
  • 使用python怎么编写一个银行账户系统
    今天就跟大家聊聊有关使用python怎么编写一个银行账户系统,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Py...
    99+
    2023-06-06
  • Win7系统下怎么使用虚拟机运行win10系统? Win7系统下使用虚拟机运行win10系统的方法
    win7系统中使用虚拟机运行Win10系统的方法: 1、首先,下载vmware; 2、打开安装包,点击“典型”点击下一步; 3、选择“稍后安装操作系统”点击下一步; 4、...
    99+
    2023-05-19
    Win7系统 虚拟机 win10系统
  • 使用Android爬虫怎么模拟一个登录功能
    这篇文章将为大家详细讲解有关使用Android爬虫怎么模拟一个登录功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。实例代码:package com.yasin;import&nb...
    99+
    2023-05-30
    android
  • 使用php怎么实现一个命令行模式
    使用php怎么实现一个命令行模式?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。php全集行模式,即php-cli,官方文档中称为: CLI SAPI(Serve...
    99+
    2023-06-06
  • 使用LogAnalyzer怎么实现一个日志系统
    使用LogAnalyzer怎么实现一个日志系统,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、部署LAMP环境1、安装CentOS操作系统,...
    99+
    2024-04-02
  • 使用canvas三角函数怎么模拟一个水波效果
    本篇文章给大家分享的是有关使用canvas三角函数怎么模拟一个水波效果,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、绘制sin函数图像sin函数表达式如下,y=Asin(w...
    99+
    2023-06-09
  • 使用python怎么制作一个云打卡系统
    这期内容当中小编将会给大家带来有关使用python怎么制作一个云打卡系统,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)...
    99+
    2023-06-14
  • 使用PHP怎么实现一个注册登录系统
    这篇文章给大家介绍使用PHP怎么实现一个注册登录系统,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。目录结构如下,其中function文件夹下包含两个函数文件,uploads文件夹用于存放上传的文件。html页面登录页面...
    99+
    2023-06-15
  • 怎么使用java做一个简单的聊天系统
    要使用Java创建一个简单的聊天系统,您可以按照以下步骤进行操作:1. 创建一个ServerSocket对象,用于接收客户端的连接请求。可以使用以下代码:```javaServerSocket serverSocket = new Se...
    99+
    2023-08-11
    java
  • 使用CSS怎么实现一个响应式布局系统
    这篇文章将为大家详细讲解有关使用CSS怎么实现一个响应式布局系统,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。什么是csscss是一种用来表现HTML或XML等文件样式的计算机语言,主要是用...
    99+
    2023-06-08
  • 使用Fluentd和MongoDB怎么构建一个日志收集系统
    使用Fluentd和MongoDB怎么构建一个日志收集系统,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。  安装  为了完成相...
    99+
    2024-04-02
  • 使用Java怎么编写一个酒店前台管理系统
    本文章向大家介绍使用Java怎么编写一个酒店前台管理系统的基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;4....
    99+
    2023-06-06
  • 使用python怎么实现一个人脸识别打卡系统
    使用python怎么实现一个人脸识别打卡系统?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python主要应用领域有哪些1、云计算,典型应用OpenStack。2、WEB前端开...
    99+
    2023-06-14
  • 使用Django怎么实现一个账号密码管理系统
    这期内容当中小编将会给大家带来有关使用Django怎么实现一个账号密码管理系统,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、环境搭建需安装:python3.6Pycharm专业版django 2.2....
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作