欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 学习threejs,光晕效果

学习threejs,光晕效果

2024/10/26 0:23:26 来源:https://blog.csdn.net/qq_28419035/article/details/142779976  浏览:    关键词:学习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>

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com