学习threejs,光晕效果

👨‍⚕️ 主页: gis分享者
👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅!
👨‍⚕️ 收录于专栏:threejs gis工程师


文章目录

  • 一、🍀前言
  • 二、🍀光晕效果实现
    • 1. ☘️实现思路
    • 2. ☘️代码样例


一、🍀前言

本文详细介绍如何基于threejs在三维场景中实现光晕效果,亲测可用。希望能帮助到您。一起学习,加油!加油!

二、🍀光晕效果实现

1. ☘️实现思路

  • 1、初始化renderer渲染器
  • 2、初始化Scene三维场景
  • 3、初始化camera相机,定义相机位置 camera.position.set,设置相机方向camera.lookAt
  • 4、初始化THREE.AmbientLight环境光源,scene场景加入环境光源,初始化THREE.PointLight点光源,设置点光源位置,scene添加点光源。通过THREE.Lensflare实现光晕效果,场景scene添加光晕效果
  • 5、加载几何模型:创建SphereGeometry球体、BoxGeometry立方体、PlaneGeometry地面几何体以及AxisHelper辅助工具坐标系,Scene场景加入以上几何体和工具。
  • 6、加入controls控制,实现自动旋转,加入stats监控器,监控帧数信息

2. ☘️代码样例

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>learn17(光晕)</title><script src="lib/threejs/127/three.js-master/build/three.js"></script><script src="lib/threejs/127/three.js-master/examples/js/objects/Lensflare.js"></script><script src="lib/threejs/127/three.js-master/examples/js/controls/OrbitControls.js"></script><script src="lib/threejs/127/three.js-master/examples/js/libs/stats.min.js"></script><script src="lib/threejs/127/three.js-master/examples/js/libs/dat.gui.min.js"></script>
</head>
<style>body {margin: 0;}canvas {width: 100%;height: 100%;display: block;}
</style>
<body onload="draw();">
</body>
<script>var renderervar initRender = () => {renderer = new THREE.WebGLRenderer({antialias: true, alpha: true})renderer.shadowMap.enabled = truerenderer.shadowMap.type = THREE.PCFSoftShadowMap// 背景色renderer.setClearColor(0x111111)// 如果设置,那么它期望所有纹理和颜色都是预乘伽马。默认值为falserenderer.gammaInput = true//如果设置,那么它期望所有纹理和颜色需要以预乘伽马输出。默认值为falserenderer.gammaOutput = truerenderer.setSize(window.innerWidth, window.innerHeight)document.body.appendChild(renderer.domElement)}var scenevar initScene = () => {scene = new THREE.Scene()}var cameravar initCamera = () => {camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000)camera.position.set(400, -600, 100)camera.lookAt(new THREE.Vector3(-400, 600, -100))}var ambientLight, pointLightvar initLight = () => {ambientLight = new THREE.AmbientLight('#111111')scene.add(ambientLight)pointLight = new THREE.PointLight('#ffffff')pointLight.position.set(-400, 600, -100)pointLight.castShadow = truescene.add(pointLight)var textureLoader = new THREE.TextureLoader()var textureFlare0 = textureLoader.load('lib/threejs/127/three.js-master/examples/textures/lensflare/lensflare0.png')var textureFlare2 = textureLoader.load('lib/threejs/127/three.js-master/examples/textures/lensflare/lensflare2.png')var textureFlare3 = textureLoader.load('lib/threejs/127/three.js-master/examples/textures/lensflare/lensflare3.png')var flareColor = new THREE.Color(0xffffff)flareColor.setHSL(0.55, 0.9, 1.0)var lensFlare = new THREE.Lensflare()lensFlare.addElement(new THREE.LensflareElement(textureFlare0, 500, 0, flareColor))lensFlare.addElement(new THREE.LensflareElement(textureFlare2, 512, 0.0))lensFlare.addElement(new THREE.LensflareElement(textureFlare2, 512, 0.0))lensFlare.addElement(new THREE.LensflareElement(textureFlare2, 512, 0.0))lensFlare.addElement(new THREE.LensflareElement(textureFlare3, 60, 0.6))lensFlare.addElement(new THREE.LensflareElement(textureFlare3, 70, 0.7))lensFlare.addElement(new THREE.LensflareElement(textureFlare3, 120, 0.9))lensFlare.addElement(new THREE.LensflareElement(textureFlare3, 70, 1.0))lensFlare.position.copy(pointLight.position)scene.add(lensFlare)}var statsvar initStats = () => {stats = new Stats()document.body.appendChild(stats.dom)}var controlsvar initControls = () => {controls = new THREE.OrbitControls(camera, renderer.domElement)controls.enableDamping = true//是否自动旋转controls.autoRotate = truecontrols.autoRotateSpeed = 1controls.minDistance  = 1controls.maxDistance  = 200}var cube, sphere, planevar initModel = () => {var helper = new THREE.AxisHelper(10)scene.add(helper)var sphereGeometry = new THREE.SphereGeometry(10, 30, 30)var sphereMaterial = new THREE.MeshStandardMaterial({color: 0xff00ff})sphere = new THREE.Mesh(sphereGeometry, sphereMaterial)sphere.position.set(-20, 20, 0)sphere.castShadow = truescene.add(sphere)var cubeGeometry = new THREE.BoxGeometry(10, 10, 10)var cubeMaterial = new THREE.MeshLambertMaterial({color: 0x00ffff})cube = new THREE.Mesh(cubeGeometry, cubeMaterial)cube.position.set(30, 5, -5)cube.castShadow = truescene.add(cube)var planeGeometry = new THREE.PlaneGeometry(5000, 5000, 20, 20)var planeMaterial = new THREE.MeshLambertMaterial({color: 0xaaaaaa})plane = new THREE.Mesh(planeGeometry, planeMaterial)plane.rotation.x = -0.5 * Math.PIplane.position.y = -0plane.receiveShadow = truescene.add(plane)}var render = () => {renderer.render(scene, camera)}var onWindowResize = () => {camera.aspect = window.innerWidth / window.innerHeightcamera.updateProjectionMatrix()render()renderer.setSize(window.innerWidth, window.innerHeight)}var animate = () => {render()stats.update()controls.update()requestAnimationFrame(animate)}var draw = () => {initRender()initScene()initCamera()initLight()initModel()initStats()initControls()animate()window.onresize = onWindowResize}
</script>
</html>

效果如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1558499.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

蓝牙模块(BT04/HC05)

目录 一、介绍 二、模块原理 1.原理图与外形尺寸 2.引脚描述 3.蓝牙模块基础AT指令介绍 三、程序设计 usart3.h文件 usart3.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 BT04A是一款蓝牙低功耗&#xff08;Bluetooth Low Energy, BLE&#xff09;模块&…

(RAG)技术结合了大模型(LLM)与内部数据,从而实现更智能且相关性更高的 AI 应用

利用先进的生成式 AI 技术&#xff08;如 RAG&#xff09;&#xff0c;释放数据的潜力&#xff0c;推动创新并获取战略优势 主要功能 使用向量数据库优化数据检索和生成 通过 AI 代理提升决策效率并自动化工作流程 克服实施真实 RAG 系统中的常见挑战 购买印刷版或 Kindle …

股指期货和股指期权有什么区别?

在金融衍生品的世界里&#xff0c;股权类衍生品无疑是其中的佼佼者&#xff0c;而股指期货和股指期权更是其中的佼佼者。尽管它们之间有着千丝万缕的联系&#xff0c;但它们之间的区别同样不容忽视。本文衍生股指君将详细解析股指期货和股指期权的核心区别。 一、交易的东西不…

数据库软题7-数据库设计

一、概念结构设计 题1-ER图的属性分类 题2-局部ER图的冲突分类 1.命名冲突 命名冲突有同名异义&#xff0c;异名同义2.结构冲突 结构冲突分为&#xff1a;统一实体不同属性&#xff0c;同一对象在不同关系里可能为属性或者实体 教师其实就是职工&#xff0c;他们有不同的属性…

5.将扩散模型应用于具有特殊结构的数据

虽然扩散模型在图像和音频等数据应用领域中取得了巨大的成功&#xff0c;但他们不一定能无缝地转移到其他模态上。在许多重要的领域&#xff0c;数据有特殊的结构。为了让扩散模型有效运作&#xff0c;必须考虑并处理这些特殊结构。比如&#xff0c;经典扩散模型所依赖的分数的…

「JVS更新日志」低代码、智能BI、逻辑引擎10.9功能更新说明

项目介绍 JVS是企业级数字化服务构建的基础脚手架&#xff0c;主要解决企业信息化项目交付难、实施效率低、开发成本高的问题&#xff0c;采用微服务配置化的方式&#xff0c;提供了 低代码数据分析物联网的核心能力产品&#xff0c;并构建了协同办公、企业常用的管理工具等&am…

SDUT数据结构与算法第二次机测

目录 7-1 括号匹配 7-2 后缀式求值 7-3 表达式转换 7-4 【模板】KMP字符串匹配 比较详细注释和图解请看KMP——字符串匹配-CSDN博客&#xff0c;&#xff08;点击链接可跳转&#xff09;一看就会 7-5 约瑟夫环&#xff08;押题&#xff0c;重要&#xff09; 7-6 单调栈&a…

迪士尼数据泄露事件:全面审视数据安全策略与未来防护方向

迪士尼数据泄露事件概述 一、 事件背景以及影响 在全球数字化转型加速的浪潮中&#xff0c;数据安全已成为企业运营不可忽视的基石。 华特迪士尼公司&#xff0c;作为全球知名的娱乐传媒巨头&#xff0c;其数据泄露事件无疑为业界敲响了警钟。此次事件不仅揭示了数据保护的严…

Pymysql cur.fetchall() 返回 None

大家在pymysql 的 cur.fetchall() 函数通常用于获取执行 SQL 查询后的所有结果。该函数返回一个包含查询结果的元组列表。如果 cur.fetchall() 返回 None&#xff0c;可能是由于以下多种问题导致的。 1、问题背景 在使用 Pymysql 库连接到 MySQL 数据库时&#xff0c;遇到这样…

YOLOv5改进——普通卷积和C3模块更换为GhostConvV2卷积和C3GhostV2模块

目录 一、GhostNetV2核心代码 二、修改common.py 三、修改yolo.py 三、建立yaml文件 四、训练 一、GhostNetV2核心代码 在models文件夹下新建modules文件夹&#xff0c;在modules文件夹下新建一个py文件。这里为GhostV2.py。复制以下代码到文件里面。 # TODO: ghostnetv…

好用的免费录屏软件推荐,让软件操作教程制作不再困难

录屏软件就像是我们做教程或者玩游戏时的“小助手”&#xff0c;它能帮我们把屏幕上的东西都记录下来&#xff0c;让视频看起来更高大上。今天我就给你推荐三款免费的好货&#xff0c;用它们做教程&#xff0c;保证让你轻松又开心。 1. 福昕录屏大师 虫洞 https://www.foxits…

【读书笔记·VLSI电路设计方法解密】问题4:今天的设计环境中使用的主要工艺技术是什么

主流的工艺技术是互补金属氧化物半导体&#xff08;CMOS&#xff09;技术。其他技术还包括双极性、双极CMOS&#xff08;biCMOS&#xff09;、绝缘体上硅&#xff08;SOI&#xff09;和砷化镓&#xff08;GaAs&#xff09;。 在CMOS技术中&#xff0c;"互补对称"指的…

SD入门教程一:Stable Diffusion 基础(技术篇)

前言 在开篇的时候就大致讲了SD和VAE&#xff0c;那么今天我们具象化地再来讲讲Stable Diffusion&#xff08;稳定扩散&#xff09;。 严格说来它是一个由几个组件&#xff08;模型&#xff09;构成的系统&#xff0c;而非单独的一个模型。我以最常见的文生图为例&#xff0c;…

大型保险公司进行营销活动时,如何与外部客户实现文件安全外发?

大型保险公司为了吸引新客户、维护老客户、提升品牌形象以及推广特定的保险产品&#xff0c;会定期向外部客户或潜在客户发送营销文件。在客户签单后&#xff0c;保险公司会将客户相关的签单个人文件发送给客户。因此&#xff0c;大型保险公司内部存在较为频繁且重要的文件安全…

安装DNS

在 CentOS 7 上安装并配置 BIND 以实现 DNS 的正向和反向解析可以按照以下步骤进行&#xff1a; 安装 BIND 打开终端并运行以下命令来安装 BIND 及其工具&#xff1a; yum install bind bind-utils -y配置 BIND 编辑主配置文件&#xff1a; 使用文本编辑器打开 BIND 的主配…

电商价格监测的创新之路

在当今数字化高速发展的时代&#xff0c;电商如汹涌的浪潮席卷了商业的每一个角落。品牌们在这片广阔的电商海洋中奋力前行&#xff0c;而价格监测则成为了他们手中至关重要的罗盘。 力维网络以其专业的价格监测服务&#xff0c;为品牌在电商之海的航行点亮了一盏明灯。然而&a…

多节点网络流量监控与网络性能优化的利器——轻松实现高效管理

目录 为什么网络性能监控如此重要&#xff1f; 多节点网络流量监控如何优化网络性能&#xff1f; 实例&#xff1a;AnaTraf如何帮助企业解决网络故障 了解更多 随着企业网络规模的不断扩大&#xff0c;维护网络性能的复杂性日益增加。如何实时监控网络流量、快速排查网络故…

网安加·百家讲坛 | 潘继平:AI赋能DevOps平台:全面提升代码安全性

作者简介&#xff1a;潘继平&#xff0c;中国软协项目管理专委会专家&#xff0c;深圳市软件行业协会特聘专家。华为土耳其研究所外聘高级项目顾问&#xff0c;负责华为云应用生态圈产品线研发管理。曾为华为全球技术服务中心、华为制造IT以及华为流程IT解决方案提供等多个部门…

(二)、CT系统硬件构成

简单来说分为以下几个步骤来描述整个CT系统的运行流程&#xff1a; X射线管和探测器环绕被测物体&#xff0c;准直器进行高度准直X射线。X射线穿过被测物料时发生衰减&#xff0c;其中有两个探测器&#xff0c;一个是参考探测器记录和测量来自X射线管的辐射强度&#xff0c;另…

【C语言从不挂科到高绩点】28-数组综合运用

Hello&#xff01;彦祖们&#xff0c;俺又回来了&#xff01;&#xff01;&#xff01;&#xff0c;继续给大家分享 《C语言从不挂科到高绩点》课程!! 数组是我们在C语言学习过程中比较重要的一个知识点&#xff0c;也是在今后的学习与开发过程中经常会用到的技能&#xff0c;…