首页 > 其他分享 >three.js加载环境贴图

three.js加载环境贴图

时间:2023-03-22 14:12:06浏览次数:35  
标签:贴图 function url THREE texture three js hdrtexture

 

three.js加载环境贴图

 

HDR的全称是High Dynamic Range,即高动态范围;动态范围是指图像中所包含的从“最亮”至“最暗”的比值,也就是图像从“最亮”到“最暗”之间灰度划分的等级数;动态范围越大,所能表示的层次越丰富,所包含的色彩空间也越广。那高动态范围(HDR)顾名思义就是从“最亮”到“最暗”可以达到非常高的比值。
HDR文件的像素值可以覆盖现实世界中存在的整个色调范围。HDR图像能够显示尽可能大的像素值范围。 因此,可以通过栩栩如生的色彩描绘来捕捉直射光和阳光以及极端阴影。HDR图像可以通过以特定方式合成不同的照片、使用特殊的图像传感器或通过计算机渲染来创建。

 const textureLoader = new THREE.TextureLoader(manager)
  const rgbeLoader = new RGBELoader()

  function loadTexture(url) {
    if (!url) {
      return Promise.resolve()
    }
    return new Promise(function(resolve, reject) {
      textureLoader.load(
        url,
        function(texture) {
          texture.encoding = THREE.sRGBEncoding
          texture.needsUpdate = true
          resolve(texture)
        },
        null,
        function(error) {
          reject(error)
        }
      )
    })
  }

  function loadHdr(url, isNoEq) {
    if (!url) {
      return Promise.resolve()
    }
    return new Promise(function(resolve, reject) {
      console.log('hdr load', url)
      /* if (isNoEq) {
        rgbeLoader.setDataType(THREE.FloatType);
      } else {
        rgbeLoader.setDataType(THREE.HalfFloatType);
      } */
      rgbeLoader.load(
        url,
        (texture, textureData) => {
          console.log('hdr loaded', url)
          let hdrtexture
          if (isNoEq) {
            hdrtexture = texture
          } else {
            hdrtexture = pmremGenerator.fromEquirectangular(texture).texture
            texture.dispose()
          }
          hdrtexture.encoding = THREE.sRGBEncoding
          hdrtexture.needsUpdate = true
          resolve(hdrtexture)
        },
        null,
        function(error) {
          console.log('hdr error', url, error)
          reject(error)
        }
      )
    })
  }

  loadHdr('图片地址').then((texture) => {
      obj.traverse(function(child) {
        if (child.isMesh) {
          // child.frustumCulled = false
        }
        if (child.material) {
          child.material.envMap = texture
          child.material.needsUpdate = true
        }
    })


  loadTexture('环境贴图地址').then((texture)=>{
        scene.environment = texture;
        scene.environment.mapping = THREE.EquirectangularReflectionMapping;
  })

  // renderer.toneMappingExposure 可以调整光照渲染强度

  //hdr环境贴图

  renderer.toneMapping = THREE.NoToneMapping        renderer.physicallyCorrectLights = true       //普通环境贴图
  1.  renderer.toneMapping = THREE.ACESFilmicToneMapping;
  2.  renderer.toneMappingExposure = 0.85;

标签:贴图,function,url,THREE,texture,three,js,hdrtexture
From: https://www.cnblogs.com/yaosusu/p/16639991.html

相关文章

  • Web前端入门之JS基础知识梳理汇总
    Web前端工程师是当前各大企业都比较稀缺的人才,薪资待遇和就业前景都很不错。不论是专业还是非专业,有基础亦或是无基础,都想通过学习Web前端实现高薪就业。不过,学习要一步一个......
  • NodeJS 多线程编程
    一、开发环境Node.JSv14.8.0二、快速开始-worker_threadsjs和nodejs一直都是单线程,直到官方推出了worker_threads模块,用来解决CPU密集型计算场景。可以通过......
  • 基于webpack与TypeScript的SolidJS项目搭建
    本文将讲述如何基于webpack与TypeScript搭建一个基础的支持less模块的solidjs项目。方便后续涉及到solidjs相关分析与讨论都可以基于本文的成果之上进行。前置nodejsv1......
  • daemon.json 常用配置项
    {"registry-mirrors":["https://fv50tv30.mirror.aliyuncs.com","https://reg-mirror.qiniu.com"],"dns":["114.114.114.114","8.8.8.8"],"dat......
  • JS 超大文件上传解决方案:分片断点上传(一)
    ​ 以ASP.NETCoreWebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API,包括文件的上传和下载。 准备文件上传的API #region 文件上传......
  • JS中生成8位的随机数字
    场景前端使用websocket连接服务端时,后缀添加一个随机的8位数字,确保多个浏览器能同时访问。注:注公众号霸道的程序猿获取编程相关电子书、教程推送与免费下载。实现1、实现......
  • Modern.js v2 正式发布
    好消息,2023年3月16号字节跳动WebInfra团队宣布Modern.jsv2正式发布。字节跳动WebInfra团队从2021年10月27号发起Modern.js正式开源起,距离现在开发维护迭代已经50......
  • js- xlsx使用过程中遇到的问题
    导入--EXCEL1.引入js<scriptsrc="https://github.com/SheetJS/sheetjs/blob/github/dist/xlsx.full.min.js"></script>2定义上传input<inputclass="position-ab......
  • 【ASP.NET Core】在node.js上托管Blazor WebAssembly应用
    由于Blazor-WebAssembly是在浏览器中运行的,通常不需要执行服务器代码,只要有个“窝”能托管并提供相关文件的下载即可。所以,当你有一个现成的Blazorwasm项目,没必要用其......
  • 在 React 组件中使用 JSON 数据文件,怎么去读取请求数据呢?
    要在React组件中使用JSON数据,有多种方法。常用的有以下几种方法:1、直接将JSON数据作为一个变量或常量引入组件中。importjsonDatafrom'./data.json';functio......