当前位置: 首页 > news >正文

three.js gltf后处理颜色异常(伽马校正)

效果:

应用了伽马校正,好像效果不明显

代码:

<template><div><el-container><el-main><div class="box-card-left"><div id="threejs" style="border: 1px solid red"></div><div style="padding: 10px"><el-button type="primary" plain @click="outline">发光描边</el-button></div></div></el-main></el-container></div>
</template>
<script>
// 引入轨道控制器扩展库OrbitControls.js
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader.js";
// 效果制作器
import { EffectComposer } from "three/examples/jsm/postprocessing/EffectComposer.js";
// 渲染通道
import { RenderPass } from "three/examples/jsm/postprocessing/RenderPass.js";
// 发光描边OutlinePass
import { OutlinePass } from "three/examples/jsm/postprocessing/OutlinePass.js";
import { ShaderPass } from "three/examples/jsm/postprocessing/ShaderPass.js";// 伽马校正后处理Shader
import {GammaCorrectionShader} from 'three/examples/jsm/shaders/GammaCorrectionShader.js';import { text_a } from "@/utils/TYQW";
import axios from 'axios'
export default {data() {return {name: "",scene: null, // 场景对象camera: null, // 相机对象renderer: null,geometry: null,group: null,material: null,effectComposer: null,};},created() {},mounted() {this.name = this.$route.query.name;this.init();},methods: {//导出我们建立的axios实例模块,ES6 export用法
// export default APIgoBack() {this.$router.go(-1);},outline() {// 创建后处理对象,这里我将该对象称作  效果制作器this.effectComposer = new EffectComposer(this.renderer);// 创建渲染器通道const renderPass = new RenderPass(this.scene, this.camera);this.effectComposer.addPass(renderPass);// 创建发光描边对象const outlinePass = new OutlinePass(new this.$three.Vector2(1000, 800), this.scene, this.camera);// 设置发光描边颜色outlinePass.visibleEdgeColor.set(0x999000);// 设置发光描边厚度outlinePass.edgeThickness = 5;// 设置发光描边强度outlinePass.edgeStrength = 7;// 设置闪烁频率outlinePass.pulsePeriod = 2;const obj = [];this.scene.traverse(item => {if(item.isMesh) {obj.push(item);}})outlinePass.selectedObjects = obj;this.effectComposer.addPass(outlinePass);// 创建伽马校正通道const gammaPass= new ShaderPass(GammaCorrectionShader);this.effectComposer.addPass(gammaPass);this.renderFun();},init() {// 创建场景对象this.scene = new this.$three.Scene();// 创建辅助坐标轴对象const axesHelper = new this.$three.AxesHelper(150);this.scene.add(axesHelper);// 创建环境光对象const ambientLight = new this.$three.AmbientLight(0xffffff);this.scene.add(ambientLight);// 创建相机对象this.camera = new this.$three.PerspectiveCamera(60, 1, 0.01, 1000);this.camera.position.set(10, 10, 10);this.camera.lookAt(0, 0, 0);// 创建gltf加载器对象const gltfLoader = new GLTFLoader();let that = this;gltfLoader.load("/models/gltf/combatAircrafts.gltf", (gltf) => {that.scene.add(gltf.scene);// 创建渲染器对象this.renderer = new this.$three.WebGLRenderer();this.renderer.setSize(1000, 800);this.renderer.render(this.scene, this.camera);window.document.getElementById("threejs").appendChild(this.renderer.domElement);// 创建相机空间轨道控制器const controls = new OrbitControls(this.camera, this.renderer.domElement);controls.addEventListener("change", () => {this.renderer.render(this.scene, this.camera);})});},renderFun() {this.effectComposer.render();window.requestAnimationFrame(this.renderFun);},},
};
</script>
<style lang="less" scoped>
.box-card-left {display: flex;align-items: flex-start;flex-direction: row;width: 100%;.box-right {text-align: left;padding: 10px;.xyz {width: 100px;margin-left: 20px;}.box-btn {margin-left: 20px;}}
}
.el-form-item {margin: 0;
}
</style>

http://www.lryc.cn/news/272657.html

相关文章:

  • 面试经典150题(55-58)
  • 如果一个n位正整数等于其各位数字的n次方之和
  • solidity显示以太坊美元价格
  • ChatGPT学习笔记——大模型基础理论体系
  • Termius for Mac/Win:一款功能强大的终端模拟器、SSH 和 SFTP 客户端软件
  • python如何读取被压缩的图像
  • 华为OD机试 - 寻找最优的路测线路(Java JS Python C)
  • 互联网演进历程:从“全球等待”到“全球智慧”的技术革新与商业变革
  • 计算机组成原理——总线
  • 2023.12.27 关于 Redis 数据类型 List 常用命令
  • 【Web】vulhub-httpd apache解析漏洞复现(1)
  • 市场复盘总结 20240103
  • Java技术栈 —— Redis的雪崩、穿透与击穿
  • Scala知识点——App类
  • (vue)增加行,对应行删除
  • 案例088:基于微信小程序的校车购票平台设计与实现
  • pytorch集智-1安装与简单使用
  • 『番外篇六』SwiftUI 取得任意视图全局位置的三种方法
  • Ribbon相关面试及答案(2024)
  • 【Mybatis】深入学习MyBatis:CRUD操作与动态SQL实战指南
  • 前端uniapp的tab选项卡for循环切换、开通VIP实战案例【带源码/最新】
  • 【我的RUST库】get_local_info
  • 【JUC】Synchronized及JVM底层原理
  • 用户管理第2节课--idea 2023.2 后端--实现基本数据库操作(操作user表) -- 自动生成 --【本人】
  • 深入了解隧道代理HTTP的协议与技术细节
  • 系统运维-Apache服务的基础安装与使用
  • Android 相机库CameraView源码解析 (四) : 带滤镜预览
  • 蜥蜴目标检测数据集VOC格式1400张
  • 2020年认证杯SPSSPRO杯数学建模C题(第一阶段)抗击疫情,我们能做什么全过程文档及程序
  • Java技术栈 —— Hadoop入门(一)