three.js入门篇6之 环境贴图、经纬线映射贴图与高动态范围成像HDR

013-1 环境贴图

  • 就是把周边的环境,贴在物体的表面之上
    注意:px:x轴正向,nx:x轴负向
import * as THREE from "three"
// console.log('main.js',THREE);

// 导入轨道控制器
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls"
// gsap 1-1:导入动画库
import gsap from "gsap"
// 导入 dat.gui
import * as dat from "dat.gui"

// 1:创建场景
const scene = new THREE.Scene()

// 2:创建相机
const camera = new THREE.PerspectiveCamera(75,window.innerWidth/ window.innerHeight,0.1,1000)
// 设置相机位置 x y z
camera.position.set(0,0,10) 
// 把相机添加到场景之中
scene.add( camera );

// 013-1 环境贴图 start
// 设置cube纹理加载器
const cubeTextureLoader = new THREE.CubeTextureLoader()
const envTextureMap = cubeTextureLoader.load([
  "env/1/px.png", // x轴的正方向
  "env/1/nx.png", // x轴的负方向
  "env/1/py.png",
  "env/1/ny.png",
  "env/1/pz.png",
  "env/1/nz.png",
])
// 设置一个球形 - 几何体
const sphereGeometry = new THREE.SphereBufferGeometry(1,20,20)
const materials = new THREE.MeshStandardMaterial({
  metalness:0.8, // 金属材质
  roughness:0.1, // 粗糙度
  envMap:envTextureMap, // 环境贴图
})
const sphere = new THREE.Mesh(sphereGeometry,materials)
scene.add(sphere)
// 013-1 环境贴图 end

// 环境光
const light = new THREE.AmbientLight( 0xffffff,0.8 ); // soft white light
scene.add( light );
// 平行光
const directionalLight = new THREE.DirectionalLight( 0xffffff, 0.5 );
directionalLight.position.set(10,10,10) // 光源位置
scene.add( directionalLight );

// 初始化渲染器
const renderer = new THREE.WebGL1Renderer()
// 设置渲染的尺寸大小
renderer.setSize(window.innerWidth,window.innerHeight)
// 将webgl渲染的canvas内容添加到body上
document.body.appendChild(renderer.domElement)

// 创建轨道控制器
const controls = new OrbitControls(camera,renderer.domElement)
// 设置控制器阻尼,让控制器更具有真是效果
controls.enableDamping = true
// 06-1:添加坐标轴辅助器
const axesHelper = new THREE.AxesHelper( 5 );
scene.add( axesHelper );

// 渲染函数 - 每一帧渲染一次
function animate() {
  // 渲染下一帧 的时候 会调用 animate 函数
	requestAnimationFrame( animate );
	controls.update();
	renderer.render( scene, camera );
}
animate()
  • 效果
    在这里插入图片描述

013-2 经纬度映射贴图与HDR

  • 高动态范围成像,是用来实现比普通数位图像技术更大曝光动态范围(即更大的明暗差别)的一组技术。
  • 高动态范围成像的目的就是要正确地表示真实世界中从太阳光直射到最暗的阴影这样大的范围亮度。
  • 亮暗的曝光度的突出,凸显细节
import * as THREE from "three"
// console.log('main.js',THREE);

// 导入轨道控制器
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls"
// gsap 1-1:导入动画库
import gsap from "gsap"
// 导入 dat.gui
import * as dat from "dat.gui"

// 1:创建场景
const scene = new THREE.Scene()

// 2:创建相机
const camera = new THREE.PerspectiveCamera(75,window.innerWidth/ window.innerHeight,0.1,1000)
// 设置相机位置 x y z
camera.position.set(0,0,10) 
// 把相机添加到场景之中
scene.add( camera );

// 013-2 经纬度映射贴图与HDR start
import {RGBELoader} from 'three/examples/jsm/loaders/RGBELoader'
// 设置hdr环境图
const rgbeLoader = new RGBELoader()
rgbeLoader.loadAsync("hdr/001.hdr").then((texture)=>{
  // 等距圆柱投影的环境贴图,也被叫做经纬线映射贴图
  texture.mapping = THREE.EquirectangularReflectionMapping
  // 设置背景图
  scene.background = texture
  // 设置默认环境
  scene.environment = texture
})
// 设置一个球形 - 几何体
const sphereGeometry = new THREE.SphereGeometry(1,20,20)
const materials = new THREE.MeshStandardMaterial({
  metalness:0.8, // 金属材质
  roughness:0.1, // 粗糙度
})
const sphere = new THREE.Mesh(sphereGeometry,materials)
scene.add(sphere)
// 013-2 经纬度映射贴图与HDR end

// 环境光
const light = new THREE.AmbientLight( 0xffffff,0.8 ); // soft white light
scene.add( light );
// 平行光
const directionalLight = new THREE.DirectionalLight( 0xffffff, 0.5 );
directionalLight.position.set(10,10,10) // 光源位置
scene.add( directionalLight );

// 初始化渲染器
const renderer = new THREE.WebGL1Renderer()
// 设置渲染的尺寸大小
renderer.setSize(window.innerWidth,window.innerHeight)
// 将webgl渲染的canvas内容添加到body上
document.body.appendChild(renderer.domElement)

// 创建轨道控制器
const controls = new OrbitControls(camera,renderer.domElement)
// 设置控制器阻尼,让控制器更具有真是效果
controls.enableDamping = true
// 06-1:添加坐标轴辅助器
const axesHelper = new THREE.AxesHelper( 5 );
scene.add( axesHelper );

// 渲染函数 - 每一帧渲染一次
function animate() {
  // 渲染下一帧 的时候 会调用 animate 函数
	requestAnimationFrame( animate );
	controls.update();
	renderer.render( scene, camera );
}
animate()
  • 效果
    在这里插入图片描述
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ArcGIS制图软件是一种功能强大的地理信息系统工具,它可以用于创建和编辑地图,包括经纬线的制作。 经纬线是地球表面上的惯例,用于确定地理位置和导航。经线是从北极到南极的线,也称为纬线,而纬线则是从东到西的线,也称为经线。经纬线的交汇处被称为地理坐标。 在ArcGIS中制作经纬线非常简单。首先,需要创建一个新的目标图层,可以选择点、线或多边形类型的图层。然后,在工具箱中选择"经纬线生成器"工具,并打开该工具以设定参数。 在经纬线生成器工具中,可以设定生成线的起点和终点,并设置经纬线的间距和方向。例如,可以选择让经线每隔一定的经度间距生成一条,并设定纬度范围为-90度到90度。也可以选择生成特定区域的经纬线,例如中国或欧洲。 完成设置后,点击运行按钮,ArcGIS会自动生成相应的经纬线图层。可以根据需要对图层进行样式和符号的编辑,以使其在地图上更加清晰和易读。 通过ArcGIS制作的经纬线可以用于各种不同的目的。例如,在地图制作中,经纬线可以标识出地理位置和区域范围;在导航和GPS系统中,经纬线可以用于定位和导航;在地球科学研究中,经纬线可以用于进行地质、气候和环境的分析。 总之,ArcGIS制图软件可以轻松创建并编辑经纬线,为不同领域提供准确的地理位置和导航信息。这种功能强大的工具在地理信息系统和地图制作中具有广泛的应用前景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值