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

news2024/12/23 6:08:50

效果:

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

代码:

<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 API
    goBack() {
      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.coloradmin.cn/o/1352680.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RocketMQ5.0消息过滤

前言 消费者订阅了某个主题后&#xff0c;RocketMQ 会将该主题中的所有消息投递给消费者。若消费者只需要关注部分消息&#xff0c;可通过设置过滤条件在 Broker 端进行过滤&#xff0c;只获取到需要关注的消息子集&#xff0c;避免接收到大量无效的消息。 以电商交易场景为例…

手机视频监控客户端APP如何实现跨安卓、苹果和windows平台,并满足不同人的使用习惯

目 录 一、手机视频监控客户端的应用和发展 二、手机视频监控客户端存在的问题 三、HTML5视频监控客户端在手机上实现的方案 &#xff08;一&#xff09;HTML5及其优点 &#xff08;二&#xff09;HTML5在手机上实现视频应用功能的优势 四、手机HTML5…

FFmpeg之——获取上传视频的尺寸(长、宽)

获取上传视频的尺寸&#xff1a; 获取视频尺寸通常需要借助第三方库FFmpeg。 首先&#xff0c;确保你的系统中已安装了FFmpeg&#xff0c;并且FFmpeg的可执行文件路径已经添加到你的系统环境变量中。 1.官网下载ffmpeg 进入 链接: ffmpeg官网 网址&#xff0c;点击下载wind…

milvus学习(一)cosin距离和欧式距离

参考&#xff1a;https://blog.csdn.net/qq_36560894/article/details/115408613 归一化以后的cosin距离和欧式距离可以相互转化&#xff0c;未归一化的不可以相互转化&#xff08;因为距离带单位&#xff09;。

AI的明天从这里开始:OJAC近屿智能带您探索AIGC星辰大海的无限可能!

你是对人工智能充满好奇的编程小白&#xff0c;还是渴望工作赋能的白领&#xff1f;或者是想投身AIGC浪潮的创业者&#xff1f;无论你的背景如何&#xff0c;只要你对AI世界充满热情&#xff0c;我们OJAC近屿智能AIGC星辰大海大模型工程师和产品经理启航班以及系列课程都欢迎您…

利用Spring Cloud和Java系统设置优化工程项目管理系统源码的二次开发体验

工程项目管理涉及众多环节和角色&#xff0c;如何实现高效协同和信息共享是关键。本文将介绍一个采用先进技术框架的Java版工程项目管理系统&#xff0c;该系统支持前后端分离&#xff0c;功能全面&#xff0c;可满足不同角色的需求。从项目进度图表到施工地图&#xff0c;再到…

Java 语言概述

Java 概述 是 SUN&#xff08;Stanford University Network&#xff0c;斯坦福大学网络公司&#xff09;1995年推出的一门高级编程语言 是一种面向 Internet 的编程语言。Java 一开始富有吸引力是因为 Java 程序可以在 Web 浏览器中运行。这些 Java 程序被称为 Java 小程序&am…

深入研究矫正单应性矩阵用于立体相机在线自标定

文章&#xff1a;Dive Deeper into Rectifying Homography for Stereo Camera Online Self-Calibration 作者&#xff1a;Hongbo Zhao, Yikang Zhang, Qijun Chen,, and Rui Fan 编辑&#xff1a;点云PCL 欢迎各位加入知识星球&#xff0c;获取PDF论文&#xff0c;欢迎转发朋…

文件监控软件丨文件权限管理工具

文件已经成为企业最重要的资产之一。然而&#xff0c;文件的安全性和完整性经常受到威胁&#xff0c;如恶意软件感染、人为误操作、内部泄密等。 为了确保文件的安全&#xff0c;文件监控软件应运而生。本文将深入探讨文件监控软件的概念、功能、应用场景和未来发展等方面。 文…

Deep Q-Network (DQN)理解

DQN&#xff08;Deep Q-Network&#xff09;是深度强化学习&#xff08;Deep Reinforcement Learning&#xff09;的开山之作&#xff0c;将深度学习引入强化学习中&#xff0c;构建了 Perception 到 Decision 的 End-to-end 架构。DQN 最开始由 DeepMind 发表在 NIPS 2013&…

中兴通讯携手龙蜥社区,共创繁荣生态 | 2023龙蜥操作系统大会

12 月 17-18 日&#xff0c;由开放原子开源基金会指导&#xff0c;龙蜥社区主办&#xff0c;阿里云、中兴通讯、浪潮信息、Arm、Intel 等 24 家理事单位共同承办&#xff0c;主题为“云智融合共筑未来”的 2023 龙蜥操作系统大会在北京圆满结束。本次大会上&#xff0c;中兴通讯…

海外静态IP和动态IP有什么区别?推荐哪种?

什么是静态ip、动态ip&#xff0c;二者有什么区别&#xff1f;哪种好&#xff1f;关于这个问题&#xff0c;不难发现&#xff0c;在知道、知乎上面的解释有很多&#xff0c;但据小编的发现&#xff0c;这些回答都是关于静态ip和动态ip的专业术语解释&#xff0c;普通非专业人事…

java生产设备效率管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web生产设备效率管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为ac…

web自动化(6)——项目配置和Grid分布式

1. 框架的可配置性 项目之间的区别&#xff1a; 兼容性&#xff1a;有些项目只兼容chrome&#xff0c;有些只兼容Firefox等元素定位特点&#xff1a;有些项目闪现快&#xff0c;有的项目很慢有些项目集成Jenkins&#xff0c;不需要用python生成allure报告 如果想要我们的框架…

分布式(8)

目录 36.什么是TCC&#xff1f; 37.分布式系统中常用的缓存方案有哪些&#xff1f; 38.分布式系统缓存的更新模式&#xff1f; 39.分布式缓存的淘汰策略&#xff1f; 40.Java中定时任务有哪些&#xff1f;如何演化的&#xff1f; 36.什么是TCC&#xff1f; TCC&#xff08…

HTML5+CSS3③——无语义布局标签、画盒子、CSS定义、CSS引入方式

目录 无语义布局标签 画盒子 CSS定义 小结 CSS引入方式 小结 无语义布局标签 画盒子 CSS定义 小结 CSS引入方式 小结

潮玩宇宙大逃杀游戏搭建

潮玩宇宙是当下较火的社交互动平台&#xff0c;它不仅涵盖了各种潮玩商品&#xff0c;还拥有各种游戏玩法&#xff0c;尤其是大逃杀游戏非常火爆&#xff01;本文将介绍大逃杀游戏的开发和发展前景。 大逃杀游戏 大逃杀游戏是当下的一种新型游戏模式&#xff0c;旨在为玩家提供…

十分钟带你学会用python3网络爬虫抓取猫眼电影排行!

本节中&#xff0c;我们利用requests库和正则表达式来抓取猫眼电影TOP100的相关内容。requests比urllib使用更加方便&#xff0c;而且目前我们还没有系统学习HTML解析库&#xff0c;所以这里就选用正则表达式来作为解析工具。 1. 本节目标 本节中&#xff0c;我们要提取出猫眼…

ConcurrentHashMap源码学习

实现接口 ConcurrentMap&#xff08;Map的基础方法&#xff09;、Serializable(序列化) 基础属性 最大容量&#xff1a;2^30 默认容量&#xff1a;16 常用方法 PUT 调用PutVal方法进行插入。 判断key或value是否为空&#xff1a; 是&#xff1a;抛出空指针一场 否&#xff…

系列六、RestTemplate

一、RestTemplate 1.1、概述 RestTemplate是一种便捷的访问RestFul服务的模板类&#xff0c;是Spring提供的用于访问Rest服务的客户端模板工具集&#xff0c;它提供了多种便捷访问远程HTTP服务的方法。 1.2、API https://docs.spring.io/spring-framework/docs/5.2.2.RELEASE…