首页 > 其他分享 >three.js 第六节 - 纹理以及贴图【.hdr文件(hdr贴图)】- 色彩空间

three.js 第六节 - 纹理以及贴图【.hdr文件(hdr贴图)】- 色彩空间

时间:2024-06-22 16:01:21浏览次数:20  
标签:贴图 hdr THREE texture three let import new

素材

这是素材
在这里插入图片描述
更多素材、案例、项目 好几个G一共,加我q178373168,60大洋拿走


源码

源码


// @ts-nocheck
// 引入three.js
import * as THREE from 'three'
// 导入轨道控制器
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'
// 导入lil.gui
import { GUI } from 'three/examples/jsm/libs/lil-gui.module.min.js'
// 导入hdr加载器(专门加载hdr的)
import { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader.js'

//#region 
const scence = new THREE.Scene()

const camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000)
// 设置相机位置
camera.position.set(0, 0, 2)
// camera.position.z = 5
// camera.position.y = 2
// camera.position.x = 2
// camera.lookAt(0, 0, 0)

const renderer = new THREE.WebGLRenderer()
renderer.setSize(window.innerWidth / 2, window.innerHeight / 2)
document.body.appendChild(renderer.domElement)
//#endregion



// -----------------------------------------------------------------
// -----------------------------------------------------------------

	import imgMap from '/public/assets/texture/watercover/CityNewYork002_COL_VAR1_1K.png'
	import imgAoMap from '/public/assets/texture/watercover/CityNewYork002_AO_1K.jpg'
	import imgAlphaMap from '/public/assets/texture/door/height.jpg'
	import imgLightMap from '/public/assets/texture/colors.png'
	import imgSpecularMap from '../public/assets/texture/watercover/CityNewYork002_GLOSS_1K.jpg'
	
	`【创建纹理加载器】`
	const textureLoader = new THREE.TextureLoader()
	
	// 加载纹理
	let texture = textureLoader.load(imgMap)
	texture.colorSpace = THREE.SRGBColorSpace `纹理的色彩空间,设置为sgb模式的(让纹理看起会更加真实)`
	// texture.colorSpace = THREE.LinearSRGBColorSpace // 纹理的色彩空间,默认是线性模式的(看起来会比较白,不真实)
	// texture.colorSpace = THREE.NoColorSpace // 不设置纹理的色彩空间,默认也是线性模式的

	// 加载ao贴图
	let aoMap = textureLoader.load(imgAoMap)
	// 透明度贴图
	let alphaMap = textureLoader.load(imgAlphaMap)
	// 光照贴图
	let lightMap = textureLoader.load(imgLightMap)
	// 高光贴图
	let specularMap = textureLoader.load(imgSpecularMap)
	
	`【rgbeLoader加载hdr贴图】`
	let rgbeLoader = new RGBELoader()
	rgbeLoader.load('/public/assets/texture/Alex_Hart-Nature_Lab_Bones_2k.hdr', (envMap) => {
	  `设置球形贴图,否则环境贴图就像一个背景图片似的`
	  envMap.mapping = THREE.EquirectangularReflectionMapping
	  `设置环境贴图`
	  scence.background = envMap
	  // 设置plane的环境贴图(planeMaterial是plane的材质)
	  planeMaterial.envMap = envMap
	})
	
	// 创建一个平面
	let planeGeometry = new THREE.PlaneGeometry(1, 1) // 宽,高
	let planeMaterial = new THREE.MeshBasicMaterial({
	  color: 0xffffff,
	  map: texture,
	  transparent: true, // 设置是否透明
	  aoMap: aoMap, // ao贴图(其实就是加上阴影了,ao强度就是控制阴影强度的)
	  aoMapIntensity: 1, // ao强度(不写的话,默认是1)
	  // alphaMap: alphaMap, // 透明度贴图
	  // lightMap: lightMap, // 设置光照贴图(环境贴图之后)
	  specularMap: specularMap, // 高光贴图
	  reflectivity: 1, // 反射强度(值设置的小,贴图上反射的光就不那么强烈了)
	})
	// planeMaterial.map = texture
	let plane = new THREE.Mesh(planeGeometry, planeMaterial)
	scence.add(plane)
	
	// 创建GUI
	const gui = new GUI()
	gui.add(planeMaterial, 'aoMapIntensity').min(0).max(1).name('ao强度')
	gui
	  .add(texture, 'colorSpace', {
	    sRGB: THREE.SRGBColorSpace,
	    linear: THREE.LinearSRGBColorSpace
	  })
	  .onChange(() => {
	    // 当切换纹理的色彩空间时候,需要触发这个更新,不然没有效果
	    texture.needsUpdate = true
	  })

// -----------------------------------------------------------------
// -----------------------------------------------------------------



//#region 
// 添加世界坐标辅助器,红色-X轴; 绿色-Y轴; 蓝色-Z轴
const axesHelper = new THREE.AxesHelper(5)
scence.add(axesHelper)

const controls = new OrbitControls(camera, renderer.domElement)
// 设置带阻尼的惯性
controls.enableDamping = true
// 设置阻尼系数
controls.dampingFactor = 0.05

// 每一帧根据控制器更新画面
function render() {
  // 如果,需要控制器带有阻尼效果,或者自动旋转等效果,就需要加入`controls.update()`
  controls.update()
  // `requestAnimationFrame`:在屏幕渲染下一帧画面时,触发回调函数来执行画面的渲染
  requestAnimationFrame(render)

  renderer.render(scence, camera)
}
render()
//#endregion


色彩空间的效果

在这里插入图片描述

标签:贴图,hdr,THREE,texture,three,let,import,new
From: https://blog.csdn.net/pig_ning/article/details/139832579

相关文章

  • three.js 第八节 - gltf加载器、解码器
    //@ts-nocheck//引入three.jsimport*asTHREEfrom'three'//导入轨道控制器import{OrbitControls}from'three/examples/jsm/controls/OrbitControls'//导入hdr加载器(专门加载hdr的)import{RGBELoader}from'three/examples/jsm/loaders/RGBELoad......
  • three.js 第九节 - 光线投射实现3d物体交互事件
    这个程序的效果是,创建3个球,位置分别在-4,0,4的位置,并且,点击哪个球,哪个球的颜色就变成红色//@ts-nocheck//引入three.jsimport*asTHREEfrom'three'//导入轨道控制器import{OrbitControls}from'three/examples/jsm/controls/OrbitControls'//#regionconst......
  • three.js+vue实现酷炫三维地图web3d大屏可视化GIS地图
    三维地图效果如下,gif压缩导致画质变差了,哈哈three.js+vue代码如下:<template><divid="chinaMap"><divid="threejs"></div><!--右侧按钮--><divclass="rightButton"><divv-for="(item,i......
  • three.js 第六节 -纹理和贴图(普通贴图、hdr贴图)
    素材//@ts-nocheck//引入three.jsimport*asTHREEfrom'three'//导入轨道控制器import{OrbitControls}from'three/examples/jsm/controls/OrbitControls'//导入lil.guiimport{GUI}from'three/examples/jsm/libs/lil-gui.module.min.js&......
  • threejs纹理平铺实现地面效果
    constgeometry=newTHREE.PlaneGeometry(20000,20000);//纹理贴图加载器TextureLoaderconsttexLoader=newTHREE.TextureLoader();//.load()方法加载图像,返回一个纹理对象Textureconstrenderer=newTHREE.WebGLRenderer();consttexture=texL......
  • three.js 从零学习
    基本概念场景用来呈现内容的容器我理解就是类似canvas相机记录场景中呈现的内容一般分类两大类1.正投影相机  所有内容同等大小呈现处理2.透视相机 符合人眼逻辑近大远小渲染器决定场......
  • 获取three.js两点之间的控制点
    首先有两个点: constv0=newTHREE.Vector3(item.x,item.y,item.z);constv3=newTHREE.Vector3(item.target.x,item.target.y,item.target.z);如果想要获取中间点的控制线直接调用方法 getBezierPoint(v0,v3);getBezierPoint(v0,v3){//获取两点的控制点......
  • 【three.js案例一】智慧星球
    直接附上源码:import*asTHREEfrom'three';import{OrbitControls}from'three/addons/controls/OrbitControls.js';//场景constscene=newTHREE.Scene();constgeometry=newTHREE.SphereGeometry(50,32,16);console.log('.postion�......
  • docker 部署three.js
    安装docker没有daemon.json文件检查daemon.json文件是否存在$ls/etc/docker创建一个新的daemon.json文件$sudotouch/etc/docker/daemon.json在daemon.json文件中添加配置项{"registry-mirrors":["https://pee6w651.mirror.aliyuncs.com","https://regist......
  • AT_hitachi2020_c ThREE 题解
    题意:给定一颗树,构造一个排列\(p\)使得对于每一对\((x,y),dis(x,y)=3\),有\(3\midp_x+p_y\)或\(3\midp_x\timesp_y\)。首先我们先将所有\(p_i\)都模上\(3\)。条件等价于每一对距离为\(3\)的\((x,y)\),\(p_x\)和\(p_y\)不同时为\(1\)或\(2\)。那先考虑如......