tnblog
首页
视频
资源
登录

Three js 绘制星空(二)

3576人阅读 2023/5/31 16:43 总访问:3656143 评论:0 收藏:0 手机
分类: threejs

Three js 绘制星空


package.json

  1. {
  2. "name": "01-three_basic",
  3. "version": "1.0.0",
  4. "description": "",
  5. "main": "index.js",
  6. "scripts": {
  7. "dev": "parcel src/index.html",
  8. "build": "parcel build src/index.html"
  9. },
  10. "author": "",
  11. "license": "ISC",
  12. "devDependencies": {
  13. "parcel-bundler": "^1.12.5"
  14. },
  15. "dependencies": {
  16. "dat.gui": "^0.7.9",
  17. "gsap": "^3.11.5",
  18. "three": "^0.152.2"
  19. }
  20. }


index.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <link rel="stylesheet" href="./assets/css/style.css">
  9. </head>
  10. <body>
  11. <script src="./main/main.js" type="module"></script>
  12. </body>
  13. </html>


main.js

  1. import * as THREE from 'three';
  2. // 导入轨道控制器
  3. import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'
  4. // 导入动画库
  5. // import { gsap } from 'gsap';
  6. // 导入dat.gui
  7. // import * as dat from 'dat.gui'
  8. // 创建平面
  9. // 创建场景
  10. const scene = new THREE.Scene()
  11. // 创建相机
  12. // PerspectiveCamera 透视相机
  13. const camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000)
  14. // 设置位置
  15. // x,y,z
  16. camera.position.set(0, 0, 40);
  17. // 添加相机
  18. scene.add(camera)
  19. // 添加辅助线
  20. // const axesHelper = new THREE.AxesHelper( 5 );
  21. // scene.add( axesHelper );
  22. function createPoints(url,size = 0.5){
  23. // 创建球几何体
  24. const sphereGeometry = new THREE.BufferGeometry();
  25. const count = 5000;
  26. // 设置缓冲区数组
  27. const positions = new Float32Array(count * 3);
  28. // 设置顶点
  29. const colors = new Float32Array(count * 3)
  30. for (let i = 0; i < count * 3; i++) {
  31. positions[i] = (Math.random() - 0.5) * 100;
  32. colors[i] = Math.random();
  33. }
  34. sphereGeometry.setAttribute('position',new THREE.BufferAttribute(positions,3))
  35. sphereGeometry.setAttribute("color", new THREE.BufferAttribute(colors, 3));
  36. // 设置点材质
  37. const pointMaterial = new THREE.PointsMaterial()
  38. // 设置点大小
  39. pointMaterial.size = 0.5;
  40. // 设置点颜色
  41. pointMaterial.color.set(0xfff000)
  42. // 添加受光影响
  43. pointMaterial.sizeAttenuation = true
  44. // 载入纹理
  45. const textureLoader = new THREE.TextureLoader()
  46. const texture = textureLoader.load(`./textures/particles/${url}.png`)
  47. // 设置纹理
  48. pointMaterial.map = texture;
  49. pointMaterial.alphaMap = texture;
  50. pointMaterial.transparent = true;
  51. pointMaterial.depthWrite = false;
  52. pointMaterial.blending = THREE.AdditiveBlending;
  53. // 启用顶点颜色
  54. pointMaterial.vertexColors = true;
  55. // 创建点
  56. const points = new THREE.Points(sphereGeometry, pointMaterial)
  57. // 场景添加点
  58. scene.add( points );
  59. return points
  60. }
  61. const points = createPoints("zs2",1.5)
  62. const points2 = createPoints("xh",1)
  63. const points3 = createPoints("6",2)
  64. // 初始化添加渲染器
  65. const renderer = new THREE.WebGLRenderer();
  66. // 设置渲染的尺寸大小
  67. renderer.setSize(window.innerWidth,window.innerHeight)
  68. // 开启场景中的阴影贴图
  69. renderer.shadowMap.enabled = true;
  70. renderer.useLegacyLights = true;
  71. // 将webgl渲染的canvas内容添加到body
  72. document.body.appendChild(renderer.domElement)
  73. // 创建控制器
  74. const controls = new OrbitControls(camera, renderer.domElement)
  75. // 设置控制器阻力,让控制器更有真实效果,必须在你的动画循环里调用.update()。
  76. controls.enableDamping = true;
  77. // 设置时钟
  78. const clock = new THREE.Clock();
  79. function render() {
  80. let time = clock.getElapsedTime();
  81. // points.material.map.needsUpdate = true;
  82. // texture.needsUpdate = true
  83. // 自动旋转
  84. points.rotation.x = time * 0.3
  85. points2.rotation.x = time * 0.5
  86. points2.rotation.y = time * 0.4
  87. points3.rotation.z = time * 0.4
  88. // 对应设置控制器阻力
  89. controls.update();
  90. // 渲染render
  91. renderer.render(scene,camera);
  92. // 渲染下一帧的时候就会调用render函数
  93. requestAnimationFrame( render );
  94. }
  95. render()
  96. // 监听画面变化,更新渲染画面
  97. window.addEventListener("resize", () => {
  98. // 更新摄像头
  99. camera.aspect = window.innerWidth / window.innerHeight;
  100. // 更新摄像机的投影矩阵
  101. camera.updateProjectionMatrix();
  102. // 更新渲染器
  103. renderer.setSize(window.innerWidth, window.innerHeight);
  104. // 设置渲染器的像素比
  105. renderer.setPixelRatio(window.devicePixelRatio);
  106. });


这里有个图。


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

饰心

2019/4/11 16:25:45

大。。。大佬。。。大佬鼠。。。。

饰心

2019/4/11 16:49:20

不对啊,我怎么删掉了。。。

剑轩:@饰心不会吧....用的什么版本.....是不是这个库哦

2019/4/11 16:57:39 回复

饰心:@剑轩又测了下,删不掉。果然是我太天真了,哈哈

2019/4/12 9:26:08 回复

Three js 绘制星空

Three js 绘制星空[TOC] package.json{ &quot;name&quot;: &quot;01-three_basic&quot;, &quot;version&quot;: &q...

Three js 着色器材质 shader

Three js 着色器材质 shader[TOC] 什么是 GLSL?GLSL 代表 openGL Shading Language,它是着色器程序的特定标准,您将在接...

C ?、?? 问号和2个问号的用法类型?、对象?

C# ?C# ???:单问号1.定义数据类型可为空。可用于对int,double,bool等无法直接赋值为null的数据类型进行null的赋值如这...

Python实例 1-日志抓取处理 补错附日志小技巧

有时候数据出了问题,可以从日志中恢复数据(如果你没记日志..没备份..→_→..)一、日志展示介绍个平常自己用的小方法,如...

C 数组拆分泛型

主要用到了泛型。泛型是c#2.0的一个新增加的特性,它为使用c#语言编写面向对象程序增加了极大的效力和灵活性。不会强行对值...

MySQL 视图的增删改 查

要显示视图的定义,需要在SHOWCREATEVIEW子句之后指定视图的名称, 我们先来创建几张表,完事后在进行演示:--用户信息表...

使用NPOI导出excel包括图片

Excl模板导出相信我们都会,那么模板上要导出图片呢?嗯~还是来个例子:准备工作:首先要引用NPOI包:然后获取数据集(我这...

ajaxSubmit异步上传图片嘘,外面都是假的

引用代码&lt;scriptsrc=&quot;/Scripts/jquery.form.js&quot;&gt;&lt;/script&gt;js就在旁边img链接中,只不过大小为0x0,...

.NET MVC 使用百度编辑器详细教程:1配置编辑器

一、什么是百度编辑器百度编辑器UEditor是由百度web前端研发部开发一款应用于网站的编辑器,具有轻量,可定制,注重用户体...

使用jquery操作元素的css样式获取、修改等等

使用jquery操作元素的css样式(获取、修改等等) //1、获取和设置样式 $(&quot;#tow&quot;).attr(&quot;class&quot;)...

.net辗转java系列视野

.net辗转java系列(一)视野.net系java系其它语言C#Java框架.net Framework Standardjava se.net corejava eejave meJava S...

.NET MVC json对象或者json对象数组的序列化和反序列化

1、用JSON.stringify()将对象stuarr或者json数组stuarr序列化成字符串,然后提交给后台。$.post(&quot;/home/DoUpdate&quot...

.NET MVC json对象或者json对象数组的序列化和反序列化

1、用JSON.stringify()将对象stuarr或者json数组stuarr序列化成字符串,然后提交给后台。$.post(&quot;/home/DoUpdate&quot...

mui框架-移动端跳转以及传值的简单方法修改解决方法

纠结了两天的MUI跳转的问题,终于解决了 ,现在分享给大家,希望大家有什么坑的解决也给我分享分享 哈哈,废话不多说,上代...

MVC全局异常处理错误日记

1、在Filter文件夹中创建一个IsExceptionFilter类(类名随意取)2、使用3、在访问的页面控制器中添加几个错误4、在IsExcept...
这一世以无限游戏为使命!
排名
1
文章
872
粉丝
112
评论
163
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术