在Three.js中,EXRExporter API通常用于将场景导出为EXR(OpenEXR)格式的图像。

demo案例

在这里插入图片描述

在Three.js中,EXRExporter API通常用于将场景导出为EXR(OpenEXR)格式的图像。下面是对其入参、出参、方法和属性的详细解释:

  1. 入参(输入参数)

    • scene(场景):要导出的Three.js场景对象。
    • camera(相机):用于渲染场景的相机对象。
    • options(选项):一个包含导出选项的对象,用于配置导出的行为。这些选项可能包括渲染分辨率、是否包含深度信息等。
  2. 出参(输出参数)

    • EXR文件:导出的EXR格式图像文件。这是通过调用export方法并提供正确的入参生成的。
  3. 方法

    • export(scene, camera, options):这是主要的方法,用于执行导出操作。它接受三个参数:场景、相机和选项,并返回导出的EXR文件。
  4. 属性

    • (可能的属性)
      • precision(精度):指定导出的EXR文件的精度级别。
      • depth (boolean):指定是否导出深度信息。
      • resizedWidth(调整后的宽度):指定导出图像的调整后的宽度(如果有的话)。
      • resizedHeight(调整后的高度):指定导出图像的调整后的高度(如果有的话)。

在Three.js中,要使用EXRExporter API,你需要按照以下步骤进行调用:

  1. 创建一个EXRExporter实例
    在你的JavaScript代码中,首先需要创建一个EXRExporter实例。你可以像这样实例化它:
var exporter = new THREE.EXRExporter();
  1. 准备场景和相机
    确保你已经创建了要导出的场景对象和相机对象,并将它们准备好传递给导出方法。

  2. 配置选项(可选)
    如果需要,你可以配置导出选项。例如,你可以设置导出的图像分辨率、是否包含深度信息等。将选项对象传递给导出方法。

  3. 调用导出方法
    调用export方法,将场景、相机和选项传递给它。该方法将返回导出的EXR文件。你可以将其保存到本地文件或使用它进行其他操作。

// 示例导出调用
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 1000);// 准备场景和相机...// 可选:配置导出选项
var options = {depth: true, // 包含深度信息resizedWidth: 1024, // 调整后的宽度resizedHeight: 768 // 调整后的高度
};// 调用导出方法
var exportedEXR = exporter.export(scene, camera, options);// 保存导出的EXR文件或进行其他操作

完成源码

以下是给每行代码添加注释后的HTML代码:```html
<!DOCTYPE html>
<html lang="en"><head><title>three.js webgl - exporter - exr</title><meta charset="utf-8"><meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"><link type="text/css" rel="stylesheet" href="main.css"></head><body><div id="info"><a href="https://threejs.org" target="_blank" rel="noopener">three.js</a> webgl - exporter - exr</div><script type="importmap">{"imports": {"three": "../build/three.module.js",  // 导入Three.js"three/addons/": "./jsm/"}}</script><script type="module">import * as THREE from 'three';  // 导入Three.js的全部模块import { OrbitControls } from 'three/addons/controls/OrbitControls.js';  // 导入OrbitControlsimport { EXRExporter, ZIP_COMPRESSION, ZIPS_COMPRESSION, NO_COMPRESSION } from 'three/addons/exporters/EXRExporter.js';  // 导入EXRExporter和相关常量import { RGBELoader } from 'three/addons/loaders/RGBELoader.js';  // 导入RGBELoaderimport { GUI } from 'three/addons/libs/lil-gui.module.min.js';  // 导入GUI库let scene, camera, renderer, exporter, mesh, controls, renderTarget, dataTexture;const params = {  // 定义参数对象target: 'pmrem',  // 目标,默认为'pmrem'type: 'HalfFloatType',  // 类型,默认为'HalfFloatType'compression: 'ZIP',  // 压缩方式,默认为'ZIP'export: exportFile  // 导出文件的回调函数};init();  // 初始化animate();  // 开始动画function init() {  // 初始化函数renderer = new THREE.WebGLRenderer( { antialias: true } );  // 创建渲染器renderer.setPixelRatio( window.devicePixelRatio );  // 设置像素比renderer.setSize( window.innerWidth, window.innerHeight );  // 设置大小document.body.appendChild( renderer.domElement );  // 将渲染器添加到页面中//camera = new THREE.PerspectiveCamera( 50, window.innerWidth / window.innerHeight, 0.1, 100 );  // 创建相机camera.position.set( 10, 0, 0 );  // 设置相机位置scene = new THREE.Scene();  // 创建场景exporter = new EXRExporter();  // 创建EXRExporter实例const rgbeloader = new RGBELoader();  // 创建RGBELoader实例//const pmremGenerator = new THREE.PMREMGenerator( renderer );  // 创建PMREMGenerator实例pmremGenerator.compileEquirectangularShader();  // 编译着色器rgbeloader.load( 'textures/equirectangular/san_giuseppe_bridge_2k.hdr', function ( texture ) {  // 加载HDR贴图texture.mapping = THREE.EquirectangularReflectionMapping;renderTarget = pmremGenerator.fromEquirectangular( texture );  // 从HDR贴图生成PMREM贴图scene.background = renderTarget.texture;  // 设置场景背景} );createDataTexture();  // 创建数据贴图//controls = new OrbitControls( camera, renderer.domElement );  // 创建轨道控制器controls.enableDamping = true;  // 启用阻尼controls.rotateSpeed = - 0.25; // negative, to track mouse pointer//window.addEventListener( 'resize', onWindowResize );  // 监听窗口大小变化const gui = new GUI();  // 创建GUIconst input = gui.addFolder( 'Input' );  // 创建输入文件夹input.add( params, 'target' ).options( [ 'pmrem', 'data-texture' ] ).onChange( swapScene );  // 添加目标选择框,并监听变化const options = gui.addFolder( 'Output Options' );  // 创建输出选项文件夹options.add( params, 'type' ).options( [ 'FloatType', 'HalfFloatType' ] );  // 添加类型选择框options.add( params, 'compression' ).options( [ 'ZIP', 'ZIPS', 'NONE' ] );  // 添加压缩方式选择框gui.add( params, 'export' ).name( 'Export EXR' );  // 添加导出按钮gui.open();  // 打开GUI}function onWindowResize() {  // 窗口大小变化处理函数camera.aspect = window.innerWidth / window.innerHeight;  // 更新相机宽高比camera.updateProjectionMatrix();  // 更新相机投影矩阵renderer.setSize( window.innerWidth, window.innerHeight );  // 更新渲染器大小}function animate() {  // 动画函数requestAnimationFrame( animate );  // 请求动画帧controls.update();  // 更新轨道控制器renderer.render( scene, camera );  // 渲染场景}function createDataTexture() {  // 创建数据贴图函数const normal = new THREE.Vector3();  // 创建法线向量const coord = new THREE.Vector2();  // 创建坐标向量const size = 800, radius = 320, factor = Math.PI * 0.5 / radius;  // 设置参数const data = new Float32Array( 4 * size * size );  // 创建数据数组for ( let i = 0; i < size; i ++ ) {for ( let j = 0; j < size; j ++ ) {const idx = i * size * 4 + j * 4;coord.set( j, i ).subScalar( size / 2 );if ( coord.length() < radius )normal.set(Math.sin( coord.x * factor ),Math.sin( coord.y * factor ),Math.cos( coord.x * factor ));elsenormal.set( 0, 0, 1 );data[ idx + 0 ] = .5 + .5 * normal.x;  // 存储数据data[ idx + 1 ] = .5 + .5 * normal.y;data[ idx + 2 ] = .5 + .5 * normal.z;data[ idx + 3 ] = 1.;}}dataTexture = new THREE.DataTexture( data, size, size, THREE.RGBAFormat, THREE.FloatType );  // 创建数据贴图dataTexture.needsUpdate = true;  // 标记贴图需要更新const material = new THREE.MeshBasicMaterial( { map: dataTexture } );  // 创建材质const quad = new THREE.PlaneGeometry( 50, 50 );  // 创建平面几何体mesh = new THREE.Mesh( quad, material );  // 创建网格mesh.visible = false;  // 设置不可见scene.add( mesh );  // 添加到场景中}function swapScene() {  // 切换场景函数if ( params.target == 'pmrem' ) {  // 如果目标为PMREMcamera.position.set( 10, 0, 0 );  // 设置相机位置controls.enabled = true;  // 启用轨道控制器scene.background = renderTarget.texture;  // 设置场景背景为PMREM贴图mesh.visible = false;  // 隐藏数据贴图} else {camera.position.set( 0, 0, 70 );  // 设置相机位置controls.enabled = false;  // 禁用轨道控制器scene.background = new THREE.Color( 0, 0, 0 );  // 设置场景背景为黑色mesh.visible = true;  // 显示数据贴图}}function exportFile() {  // 导出文件函数let result, exportType, exportCompression;if ( params.type == 'HalfFloatType' )  // 判断类型exportType = THREE.HalfFloatType;elseexportType = THREE.FloatType;if ( params.compression == 'ZIP' )  // 判断压缩方式exportCompression = ZIP_COMPRESSION;else if ( params.compression == 'ZIPS' )exportCompression = ZIPS_COMPRESSION;elseexportCompression = NO_COMPRESSION;if ( params.target == 'pmrem' )  // 判断导出目标result = exporter.parse( renderer, renderTarget, { type: exportType, compression: exportCompression } );elseresult = exporter.parse( dataTexture, { type: exportType, compression: exportCompression } );saveArrayBuffer( result, params.target + '.exr' );  // 保存文件}function saveArrayBuffer( buffer, filename ) {  // 保存数组缓冲区函数const blob = new Blob( [ buffer ], { type: 'image/x-exr' } );  // 创建Blob对象const link = document.createElement( 'a' );  // 创建链接元素link.href = URL.createObjectURL( blob );  // 设置链接地址link.download = filename;  // 设置下载文件名link.click();  // 模拟点击链接}</script></body>
</html>

本内容来源于小豆包,想要更多内容请跳转小豆包 》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/576720.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高效物联网连接技术创新:ECWAN边缘协同自组网的未来——基于ChirpLAN窄带扩频技术的无线混合组网

物联网是指将各种物理设备通过互联网进行连接和通信的技术。它是一个庞大的网络&#xff0c;由传感器、设备、网络和云服务组成&#xff0c;旨在实现对物体的远程监测、控制和数据采集。 基于ChirpLAN窄带扩频技术的无线混合组网协议ChirpLAN&#xff0c;ChirpLAN是基于其自有的…

【超图 SuperMap3D】【基础API使用示例】51、超图SuperMap3D - 绘制圆|椭圆形面标注并将视角定位过去

前言 引擎下载地址&#xff1a;[添加链接描述](http://support.supermap.com.cn/DownloadCenter/DownloadPage.aspx?id2524) 绘制圆形或者椭圆形效果 核心代码 entity viewer.entities.add({// 圆中心点position: { x: -1405746.5243351874, y: 4988274.8462937465, z: 370…

岭师大数据技术原理与应用-序章-软工版

HeZaoCha-CSDN博客 序章—软工版 一、环境介绍1. VMware Workstation Pro2. CentOS3. Java4. Hadoop5. HBase6. MySQL7. Hive 二、系统安装1. 虚拟网络编辑器2. 操作系统安装 三、结尾 先说说哥们写这系列博客的原因&#xff0c;本来学完咱也没想着再管部署这部分问题的说&…

Jackson 2.x 系列【6】注解大全篇二

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Jackson 版本 2.17.0 源码地址&#xff1a;https://gitee.com/pearl-organization/study-jaskson-demo 文章目录 注解大全2.11 JsonValue2.12 JsonKey2.13 JsonAnySetter2.14 JsonAnyGetter2.15 …

新华保险失速?业绩负增长,“欺骗投保人”问题屡罚屡犯

近日&#xff0c;新华保险&#xff08;601336.SH、01336.HK&#xff09;披露了2023年全年财报。贝多财经发现&#xff0c;该公司营收和利润出现双位数下滑&#xff0c;即便身处寿险市场回暖的大环境下&#xff0c;该公司今年以来的原保险保费收入也处于下跌态势。 即便新华保险…

Elastic 8.13:Elastic AI 助手中 Amazon Bedrock 的正式发布 (GA) 用于可观测性

作者&#xff1a;来自 Elastic Brian Bergholm 今天&#xff0c;我们很高兴地宣布 Elastic 8.13 的正式发布。 有什么新特性&#xff1f; 8.13 版本的三个最重要的组件包括 Elastic AI 助手中 Amazon Bedrock 支持的正式发布 (general availability - GA)&#xff0c;新的向量…

免费在线制流程图和思维导图ProcessOn高效协同

免费在线制流程图和思维导图ProcessOn高效协同&#xff0c;还有海量的免费模板。在ProcessOn&#xff0c;你可以与全球超过1.1亿的优秀人才一起合作&#xff0c;共同绘制出精美的流程图和思维导图。无论是工作中的项目管理&#xff0c;还是学习中的知识整理&#xff0c;Process…

GESP Python编程二级认证真题 2024年3月

Python 二级 2024 年 03 月 1 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 第 1 题 小杨的父母最近刚刚给他买了一块华为手表&#xff0c;他说手表上跑的是鸿蒙&#xff0c;这个鸿蒙是&#xff1f;&#xff08; &#xff09; A. 小程序 B. 计时器 C. 操作系统…

动态规划刷题(算法竞赛、蓝桥杯)--导弹拦截(线性DP)

1、题目链接&#xff1a;[NOIP1999 提高组] 导弹拦截 - 洛谷 #include <bits/stdc.h> using namespace std; const int N2e55; int a[N],x,n; int b[N],len;int main(){while(cin>>x)a[n]x;//求最长不上升子序列 b[0]2e9;//初始化为无穷大for(int i1;i<n;i){if(…

Immunity(IF=32.4)|空间多组学揭示免疫检查点联合疗法响应机制

免疫检查点疗法&#xff08;immune checkpoint blockade&#xff0c;ICB&#xff09;已经在肿瘤疾病中得到了广泛应用&#xff0c;但部分患者依然出现低应答甚至不应答的现象。因此开发新型免疫疗法是解决患者低响应的关键。aPD-L1aCTLA4联合治疗是目前研究最广泛的联合疗法之一…

如何在CentOS使用Docker搭建Rsshub服务并实现无公网IP远程访问

文章目录 1. Docker 安装2. Docker 部署Rsshub3. 本地访问Rsshub4. Linux安装Cpolar5. 配置公网地址6. 远程访问Rsshub7. 固定Cpolar公网地址8. 固定地址访问 Rsshub是一个开源、简单易用、易于扩展的RSS生成器&#xff0c;它可以为各种内容生成RSS订阅源。 Rsshub借助于开源社…

【计算机图形学】3D Implicit Transporter for Temporally Consistent Keypoint Discovery

对3D Implicit Transporter for Temporally Consistent Keypoint Discovery的简单理解 文章目录 1. 现有方法限制和文章改进2. 方法2.1 寻找时间上一致的3D特征点2.1.1 3D特征Transporter2.1.2 几何隐式解码器2.1.3 损失函数 2.2 使用一致特征点的操纵 1. 现有方法限制和文章改…