郑州网站策划,东莞seo快速排名,注册城乡规划师含金量到底有多高,网站建设内容大全#x1f468;⚕️ 主页#xff1a; gis分享者 #x1f468;⚕️ 感谢各位大佬 点赞#x1f44d; 收藏⭐ 留言#x1f4dd; 加关注✅! #x1f468;⚕️ 收录于专栏#xff1a;threejs gis工程师 文章目录 一、#x1f340;前言1.1 ☘️THREE.CubeTextureLoader 立…⚕️ 主页 gis分享者 ⚕️ 感谢各位大佬 点赞 收藏⭐ 留言 加关注✅! ⚕️ 收录于专栏threejs gis工程师 文章目录 一、前言1.1 ☘️THREE.CubeTextureLoader 立方体纹理贴图1.2 ☘️环境贴图envMap 二、设置envMap环境贴图创建反光效果1. ☘️实现思路2. ☘️代码样例 一、前言
本文详细介绍如何基于threejs在三维场景中设置envMap环境贴图创建反光效果亲测可用。希望能帮助到您。一起学习加油加油
1.1 ☘️THREE.CubeTextureLoader 立方体纹理贴图
通常使用THREE.CubeTextureLoader加载六张图片作为立方体纹理贴图并将其用作场景的背景。 构造函数 CubeTextureLoader( manager : LoadingManager ) manager — 加载器使用的loadingManager。默认为THREE.DefaultLoadingManager 常用属性
crossOrigin : String 如果设置了在开始加载前 将为图片分配 crossOrigin 属性其值为 crossOrigin 默认为anonymous。managerLoadingManager 加载器正在使用的loadingManager。默认为DefaultLoadingManager。pathString 加载加载的文件的基本路径。 请参考.setPath。默认为undefined。 方法
1.2 ☘️环境贴图envMap
envMap环境贴图是一种用于模拟环境反射光照的3D技术常用于增强场景的真实感。它通过将环境图像映射到物体的表面使物体能够反射周围的环境从而模拟出更加真实的视觉效果。
二、设置envMap环境贴图创建反光效果
1. ☘️实现思路
1、初始化renderer渲染器2、初始化Scene三维场景scene创建THREE.CubeTextureLoader立方体纹理加载器cubeTextureLoader加载cubeTextureLoader的六个方位的图片获取纹理对象cubeTexturescene背景background设置为cubeTexture。3、初始化camera相机定义相机位置 camera.position.set。4、初始化THREE.AmbientLight环境光源scene场景加入环境光源初始化THREE.DirectionalLight平行光源设置平行光源位置设置平行光源投影scene添加平行光源。5、加载几何模型创建THREE.AxesHelper坐标辅助工具helper创建THREE.SphereBufferGeometry球体几何体geometry。使用scene.background作为envMap环境贴图创建THREE.MeshLambertMaterial漫反射材质sphereMaterial。传入geometry和geometry创建THREE.Mesh网格对象sphereMesh。scene场景中添加helper和sphereMesh。6、加入controls、gui控制加入stats监控器监控帧数信息。
2. ☘️代码样例
!DOCTYPE html
html langen
headmeta charsetUTF-8titlelearn55(使用设置ENVMAP环境贴图创建反光效果)/titlescript srclib/threejs/127/three.js-master/build/three.js/scriptscript srclib/threejs/127/three.js-master/examples/js/controls/OrbitControls.js/scriptscript srclib/threejs/127/three.js-master/examples/js/libs/stats.min.js/scriptscript srclib/threejs/127/three.js-master/examples/js/libs/dat.gui.min.js/scriptscript srclib/js/Detector.js/script
/head
style typetext/csshtml, body {margin: 0;height: 100%;}canvas {display: block;}
/style
body onloaddraw()
/body
scriptvar renderer, camera, scene, gui, light, stats, controls, sphereMesh, sphereMaterialvar initRender () {renderer new THREE.WebGLRenderer({antialias: true})renderer.setPixelRatio(window.devicePixelRatio)renderer.setSize(window.innerWidth, window.innerHeight)renderer.setClearColor(0xeeeeee)renderer.shadowMap.enabled truedocument.body.appendChild(renderer.domElement)}var initCamera () {camera new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 200)camera.position.set(0, 12, 15)}var initScene () {scene new THREE.Scene()var cubeTextureLoader new THREE.CubeTextureLoader()cubeTextureLoader.setPath(data/texture/skybox/)// 六张图片分别是朝前的posz、朝后的negz、朝上的posy、朝下的negy、朝右的posx和朝左的negxvar cubeTexture cubeTextureLoader.load([px.jpg, nx.jpg,py.jpg, ny.jpg,pz.jpg, nz.jpg])scene.background cubeTexture}var initGui () {gui {}var datGui new dat.GUI()}var initLight () {scene.add(new THREE.AmbientLight(0xffffff))light new THREE.DirectionalLight(0xffffff)light.position.set(0, 20, -20)light.castShadow truescene.add(light)}var initModel () {var helper new THREE.AxesHelper(50)scene.add(helper)var geometry new THREE.SphereBufferGeometry(5, 100, 50)sphereMaterial new THREE.MeshLambertMaterial({envMap: scene.background})sphereMesh new THREE.Mesh(geometry, sphereMaterial)scene.add(sphereMesh)}var initStats () {stats new Stats()document.body.appendChild(stats.dom)}var initControls () {controls new THREE.OrbitControls(camera, renderer.domElement)controls.enableDamping true}var render () {renderer.render(scene, camera)}var onWindowResize () {camera.aspect window.innerWidth / window.innerHeightcamera.updateProjectionMatrix()renderer.setSize(window.innerWidth, window.innerHeight)}var animate () {render()stats.update()controls.update()requestAnimationFrame(animate)}var draw () {if(!Detector.webgl)Detector.addGetWebGLMessage()initGui()initRender()initScene()initCamera()initLight()initModel()initControls()initStats()animate()window.onresize onWindowResize}
/script
/html效果如下