需要电子档书籍或者源码可以Q群:828202939   希望可以和大家一起学习、一起进步!!

如有错别字或有理解不到位的地方,可以留言或者加微信15250969798,博主会及时修改!!!!!

玩游戏的时候我们或多或少会发现那些特效很漂亮!很多产品里面也喜欢用粒子效果!

下面群主分享一篇去年写好的仿星空的粒子案例!

主要讲shader与geometry.attributes的一些知识点

录屏:

代码:

<html><head><title>shader02-仿星空粒子</title><style>body {background-color: #000;margin: 0px;overflow: hidden;}#WebGL {width: 100%;height: 100%;position: absolute;left: 0;top: 0;z-index: 999;}</style>
</head><body><div id="WebGL"></div><script src="http://libs.baidu.com/jquery/2.0.0/jquery.js"></script><script src="../../../build/three.js"></script><script src="../../js/controls/OrbitControls.js"></script><script type="x-shader/x-vertex" id="vertexshader">attribute float size;varying vec3 vColor;void main() {vColor = color;vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );gl_PointSize = size * ( 300.0 / -mvPosition.z );gl_Position = projectionMatrix * mvPosition;}</script><script type="x-shader/x-fragment" id="fragmentshader">uniform sampler2D texture;varying vec3 vColor;void main() {gl_FragColor = vec4( vColor, 1.0 );gl_FragColor = gl_FragColor * texture2D( texture, gl_PointCoord );}</script><script>'use strict';var container, camera, scene, renderer, material, animate, controls; //常用变量var  mesh; //自定义对象变量var particleSystem, uniforms, geometry;var particles = 200;var target = new THREE.Vector3(0, 30, 0);var webGLW = $('#WebGL').width();var webGLH = $('#WebGL').height();init();animate();function init() {container = document.getElementById('WebGL');scene = new THREE.Scene();camera = new THREE.PerspectiveCamera(40, window.innerWidth / window.innerHeight, 0.1, 4000);camera.position.set(0, 60, 300);camera.lookAt(target);addSperite();rendererScene(); //场景渲染OrbitControls(camera, renderer); window.addEventListener('resize', onWindowResize, false); //监听屏幕变化}function plane() {// 地面let grid_mesh = new THREE.Mesh(new THREE.PlaneBufferGeometry(2000, 2000), new THREE.MeshPhongMaterial({color: 0x999999,depthWrite: false}));grid_mesh.rotation.x = -Math.PI / 2;grid_mesh.receiveShadow = true;scene.add(grid_mesh);var grid = new THREE.GridHelper(2000, 20, 0x000000, 0x000000);grid.material.opacity = 0.2;grid.material.transparent = true;scene.add(grid);}function addSperite(params) {uniforms = {texture: {value: new THREE.TextureLoader().load("../../textures/sprites/2.png")}};var shaderMaterial = new THREE.ShaderMaterial({uniforms: uniforms,vertexShader: document.getElementById('vertexshader').textContent,fragmentShader: document.getElementById('fragmentshader').textContent,blending: THREE.AdditiveBlending,depthTest: false,transparent: true,vertexColors: true});var radius = 200;geometry = new THREE.BufferGeometry();var positions = [];var colors = [];var sizes = [];var color = new THREE.Color();for (var i = 0; i < particles; i++) {//范围内位置随机positions.push((Math.random() * 2 - 1) * radius);positions.push((Math.random() * 2 - 1) * radius);positions.push((Math.random() * 2 - 1) * radius);// 随机设置粒子的颜色color.setHSL(i / particles, 1.0, 0.5);colors.push(color.r, color.g, color.b);sizes.push(10);;}geometry.addAttribute('position', new THREE.Float32BufferAttribute(positions, 3));geometry.addAttribute('color', new THREE.Float32BufferAttribute(colors, 3));geometry.addAttribute('size', new THREE.Float32BufferAttribute(sizes, 1).setDynamic(true));particleSystem = new THREE.Points(geometry, shaderMaterial);scene.add(particleSystem);}function onWindowResize() {camera.aspect = window.innerWidth / window.innerHeight;camera.updateProjectionMatrix();renderer.setSize(window.innerWidth, window.innerHeight);}function rendererScene() {renderer = new THREE.WebGLRenderer({antialias: true,});renderer.setPixelRatio(window.devicePixelRatio);renderer.setSize(window.innerWidth, window.innerHeight);renderer.shadowMap.type = THREE.PCFSoftShadowMap;renderer.gammaInput = true;renderer.gammaOutput = true;container.appendChild(renderer.domElement);}function OrbitControls(camera, renderer) {//OrbitControls控件操作模块controls = new THREE.OrbitControls(camera, renderer.domElement);controls.target = target; //控制的target// controls.autoRotate = true; //是否自动旋转controls.autoRotateSpeed = 0.5; //自动旋转速度,正比}function animate() {requestAnimationFrame(animate);var time = Date.now() * 0.004;// 让粒子旋转,看起来好看一点particleSystem.rotation.x  = particleSystem.rotation.y = 0.001 * time;var sizes = geometry.attributes.size.array;//sin周期,改变粒子的大小,让粒子看起来有闪烁的效果,当然,效果并没闪烁的好//后期会发布发光渐变的粒子for (var i = 0; i < particles; i++) {sizes[i] = 10 * (1 + Math.sin(0.5 * i + time));}geometry.attributes.size.needsUpdate = true;render();}function render() {renderer.render(scene, camera);}</script>
</body></html>

shader02-仿星空粒子相关推荐

  1. unity怎么制作云飘动_Unity 如何制作星空粒子效果?

    本经验介绍在Unity游戏引擎中使用Particle System,如何使用自带资源,快速制作星空的粒子特效. 工具/原料 Unity 方法/步骤1: 首先,新建一个场景,如果有自己的天空盒资源的话, ...

  2. Unity 如何制作星空粒子效果?

    本经验介绍在Unity游戏引擎中使用Particle System,如何使用自带资源,快速制作星空的粒子特效. 工具/原料 Unity 方法/步骤1: 首先,新建一个场景,如果有自己的天空盒资源的话, ...

  3. html5 3d引擎 星空,使用3D引擎threeJS实现星空粒子移动效果

    three.js是JavaScript编写的WebGL第三方库.提供了非常多的3D显示功能.Three.js 是一款运行在浏览器中的 3D 引擎,你可以用它创建各种三维场景,包括了摄影机.光影.材质等 ...

  4. html5 3d引擎 星空,使用3D引擎threeJS实现星空粒子移动

    three.js是JavaScript编写的WebGL第三方库.提供了非常多的3D显示功能.Three.js 是一款运行在浏览器中的 3D 引擎,你可以用它创建各种三维场景,包括了摄影机.光影.材质等 ...

  5. 制作放射冲击星空粒子海报图片的PS教程

    今天刚刚做好一个小效果,方法不难但是效果很棒,素材就不提供了,因为这个素材非常好找,也不难,大家找到一张高清图片,最好层次分明,色彩饱和度高些,不同的图片最后的效果差异很大. 效果图: 操作步骤如下: ...

  6. vue好看的星空粒子背景

    效果图 完整代码 xk.vue <template><div class="course"><div class="stars"& ...

  7. android+粒子星空动画,HTML5 Canvas星空粒子动画压力测试

    JavaScript 语言: JaveScriptBabelCoffeeScript 确定 var mycode = function() { 'use strict'; var testTicker ...

  8. 4月24日云栖精选夜读 | 阿里云POLARDB如何助力轻松筹打造5亿用户信赖的大病筹款平台?...

    [点击订阅云栖夜读周刊] 轻松筹首创了"大病救助"模式,帮助了众多病患在第一时间解決了医疗资金等问题,为了从源头解决了医疗资金问题.而在轻松筹这样全球5.5亿用户信赖的大病筹款平台 ...

  9. 【千纸诗书】—— PHP/MySQL二手书网站后台开发之功能实现

    [千纸诗书]-- PHP/MySQL二手书网站后台开发之功能实现 前言:前一篇温习了网站开发需要掌握的基础知识,这一篇重点梳理一下各个功能模块的[详细设计与实现].项目github地址:https:/ ...

  10. JS实现最美的3D宇宙特效

    好久没更新文章了.算下来大概有五个多月了吧.之前本人更新的比较频繁是因为疫情在家,不能出门,所以有充足的时间来更新文章.之后随着疫情越来越好转,本人就出去找工作了,毕竟本人的经济条件不允许本人闲着,哈 ...

最新文章

  1. 3种mysql的储存机制_MySQL三种InnoDB、MyISAM和MEMORY存储引擎对比
  2. E1载波的数据速率是(16)Mb/s,E3载波的数据速率是(17)Mb/s。答案】B D
  3. js数组中indexOf/filter/forEach/map/reduce详解
  4. 低版本mysql utf8mb5_记住:永远不要在 MySQL 中使用 UTF-8
  5. python 判断一个点(坐标)是否在一个多边形内利用射线法
  6. Java工作笔记-注解的进一步理解
  7. mysql映射成hashmap_大厂面试必问!HashMap 怎样解决hash冲突?
  8. 获取activemq 队列所有数据_ActiveMQ的应用
  9. mybatis 三级缓存查询循序_MyBatis手把手跟我做系列(五) --- 一级缓存与二级缓存
  10. MySQL 基准测试(mysqlslap)出现 Using a password on the command line interface can be insecure 警告
  11. [转]非极大值抑制(Non-Maximum Suppression)
  12. Swift 3: let sortedNumbers = numbers.sort { $0 $1 } print(sortedNumbers) 结果显示为()
  13. Windows下搭建elasticsearch集群案例
  14. ftp工具破解版,细数6个ftp工具破解版
  15. android 设备管理和凭证,简述设备管理的涵义
  16. Unity3d报错:Error building Player: Win32Exception: ApplicationName='xxxxxx/zipalign.exe'
  17. Ubuntu设置Adsl上网
  18. UVa 10015 - Joseph's Cousin
  19. 面试官都会问些什么问题?
  20. 科学家发明创可贴式MP3靠人体热量工作

热门文章

  1. 应用华为大数据平台配置大数据项目①
  2. 阿里云【云计算7天实践训练营】新人路线-class6学习笔记
  3. Form_Load():不要甩锅给我
  4. 如何在 JavaScript 中使用SpreadJS导入和导出 Excel 文件
  5. mysql存储包含单引号英文字符串,SQL中写入包含有英文单引号“ '' ”失败问题深入详解...
  6. 我国城市区块链发展水平如何?这个指数告诉你|链塔智库
  7. 关于单体应用的简单讲解
  8. 攻防世界-Web-练习区12题解
  9. python爬虫学习-scrapy爬取链家房源信息并存储
  10. Power Bi Desktop 的删除重复项 和 Excel 的删除重复项的一样的吗?