向量基础个人思维训练_纹理采样边缘做旧效果的推导

news2024/11/23 19:32:50

        之前光照demo的玻璃盒子边缘感觉太锐利了,于是想看看能不能让面的边缘逐渐变黑,这样应该会更接近于真实的拼接效果。

        首先,玻璃盒子每个面的纹理采样坐标设定如下:        

        已知采样坐标范围是(0,0)~(1,1)这个矩形范围,现在我想把这个矩形范围的边缘弄成渐变黑色,换个说法可以变换为:构造一个比采样范围举行更小的矩形,例如宽高均为0.8,两个矩形同心,两个矩形之间的位置填充渐变的黑色。

        但显然上图形式的向量实现起来没那么方便,如果向量的起点都在矩形的中心,那实现这个想法就方便得多。于是我把所有的向量都减去最大向量(1,1)的一半,即(0.5, 0.5),这样就可以将向量变换为:

        

         那么内部的矩形叠加到上图就是如下所示:

        从向量的角度来看,可以理解为每个向量从长度80%的位置开始逐渐填充为黑色即可。

        具体逻辑,实际代码我换成从向量长度百分之90开始变黑,缩小一些黑边:

        首先已知向量在遍历这个矩形的过程,要么x不变,y变化。要么y不变,x变化。因此:

        0、将当前采样向量减去(0.5, 0.5),让它从中心开始发散。

        1、首先通过normalize获取向量的方向,然后用1去除以它,分量中较小的那个值作为系数,去乘以normalize后的结果,即可得到同方向的、其中一分量为1的向量,再乘以0.5(因为实际变换后的向量最长长度只有0.5)。

        2、再将当前采样向量长度 / 步骤1所得向量长度,判断是否已达90%位置,是的话通过smoothstep系数的作用,从0开始逐步接近1,再用1去减前述结果。

        这样就实现了获取当前采样向量,并判断其是否到达同方向最大长度向量的90%,如达到后就逐步衰减颜色浓淡系数的目的。

        具体代码如下:

vec2 fragVTexCoordInCenter = fragVTexCoord - vec2(0.5, 0.5); //采样点变换为以点(0,0)为原点
vec2 fragVTexCoordInCenterNor = normalize(fragVTexCoordInCenter); //当前采样变量的方向特征向量
vec2 times = abs(1.0 / fragVTexCoordInCenterNor); //求出如果让x要为单位1.0,要让fragVTexCoordInCenterNor.x乘以多少系数
vec2 uvInCenterMaxLen = min(times[0], times[1]) * fragVTexCoordInCenterNor * 0.5;
vec2 uvInCenter = fragVTexCoord - vec2(0.5, 0.5);
float edgeColorX = 1.0 - smoothstep(0.9, 1.0, distance(uvInCenter, vec2(0.0, 0.0)) /  distance(uvInCenterMaxLen, vec2(0.0, 0.0)));
color = vec4(color.rgb * edgeColorX, color.a);

        最后效果如图:

 

视频如下:

【OpenGL 毛玻璃盒子_通过片元shader的向量处理添加黑边】 OpenGL 毛玻璃盒子_通过片元shader的向量处理添加黑边_哔哩哔哩_bilibili

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

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

相关文章

【代理设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

简介 代理模式(Proxy Pattern)是一种结构型设计模式,用一个类来代理另一个类或几个类的功能。 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。 延迟初始化(虚拟代理)。如…

Talk预告 | AAAI‘23 Oral 北京大学陈嘉毅:自然条件下基于三维点云的手物联合位姿追踪与重建

本期为TechBeat人工智能社区第488期线上Talk! 北京时间4月6日(周四)20:00,北京大学计算机学院博士——陈嘉毅的Talk将准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “自然条件下基于三维点云的手物联合位姿追踪与重建”&#xf…

iOS - 内存管理

一、App 内存分布 二、OC对象的内存管理 iOS 中,使用引用计数来管理 OC 对象的内存,新创建的 OC 对象引用计数默认是1,当引用计数减为0,OC对象就会销毁,释放其占用的内存空间。调用 retain 会让 OC 对象的引用计数 1&…

perf生成火焰图

文章目录 1,top发现webserver进程空转情况下CPU占用高达200%2,使用性能分析工具perf来进行分析2.1,抓取采集样本2.2,使用perf简单分析性能数据 3,火焰图3.1,生成火焰图3.2,将生成的.svg文件用浏…

电视盒子哪个好?数码小编盘点2023电视盒子排行榜

随着网络剧的热播,电视机又再度受宠,电视盒子也成为不可缺少的小家电。但面对复杂的参数和品牌型号,挑选时不知道电视盒子哪款最好,小编根据销量和用户评价整理半个月后盘点了电视盒子排行榜前五,对电视盒子哪个好感兴…

python编程课后练习答案:一批书几天能买完,勾股数组,个位数字与十位位数字之和除以10所得余数刚好是其百位,剪刀、石头、布猜拳游戏

一、编程题目 编程题目: 4、已知有一批书共1020本,以后每天都买掉一半还多2本,设计程序求出几天能买完。 5、凡是满足x^2y^2z^2的正整数数组(xYz)就称为勾股数组(如345)。请找出任意一个正整数n以内的所有勾股数组 6、编写代码找出满足下面…

不懂如何搭建Web自动化测试环境?这篇文章教你如何上手

摘要: 本文将介绍如何搭建Web自动化测试环境,使用的工具包括Selenium WebDriver和JUnit。同时,本文还提供了详细的代码示例,帮助读者更好地理解和实践相关的知识。 目录 一、前言 二、环境配置 1.安装JDK 2.安装Eclipse 3.下…

对话AI顶尖大牛周明老师:大模型的机遇和挑战?

Datawhale学习 分享人:周明老师,Datawhale 特邀嘉宾 这次 Datawhale开源学习 特别邀请了周明老师分享: 周明,澜舟科技创始人兼CEO,中国计算机学会 CCF 副理事长、NLP和大模型领域的顶尖大牛。 1991年就从NLP重镇哈工大…

typeScript安装以及typeScript配置

1. 什么是typeScript ? 它强调了 TypeScript 的两个最重要的特性——类型系统、适用于任何规模。 包含js的所有的元素,能运行js代码,支持ES语法,是一种开源、跨平台的编程语言。就是js的超 集。 TypeScript 是添加了类型系统的 JavaScri…

Java并发编程 —— ThreadLocal详解

一、什么是ThreadLocal ThreadLocal用于提供线程内部共享的变量,每个线程在访问ThreadLocal实例的时候都可以获得自己的、独立初始化的变量副本,这样线程间互不干扰,从而避免了线程安全问题。 比如我们知道SimpleDateFormat是线程不安全的&…

LVS负载均衡+keepalived高可用

准备准备五台虚拟机 192.168.255.128 MASTER 192.168.255.134 BACKUP 192.168.255.130 Nginx节点服务器1 192.168.255.131 Nginx节点服务器2 192.168.255.132 客户端验证 一、配置节点服务器 1、配置虚接口lo:0 cd /etc/sysconfig/network-scripts/ cp ifcfg-…

Vue-cli 3.x 脚手架搭建的 Vue 2.x 项目进行 npm install 安装时报错: npm ERR! code 1……

项目场景: 公司以前做过的项目,当时开发环境 npm,node.js 版本和现在都不一样,比较旧了,项目之前是用 Vue-cli 3.x 搭建的,Vue 2.x 写的,当时配套的第三方依赖版本也都很落后了,在近…

有趣有爱有温度!迅镭激光第一季度户外团建活动圆满落幕!

阳春四月,元气复苏 凝心聚力,共享喜悦 迅镭激光第一季度寿星及新人 欢聚常熟蒋巷基地 开启一段美妙的户外团建之旅 无创意不团建!蓝天白云下,队员们在教练的指导下解锁各种花样游戏大玩法,大家密切配合、相互协作,…

Docker | 解决docker 容器中csv文件乱码的情况

问题描述:在Ubuntu docker容器中,打开.csv文件时显示乱码 问题如图 错误分析: 用locale查看所用容器支持的字符集 从输出可以看到,系统使用的是POSIX字符集,POSIX字符集是不支持中韩文的,而UTF-8是支持中…

054:cesium加载WMS规范的影像服务

第054个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中加载WMS规范的影像服务。WebMapServiceImageryProvider提供由 Web 地图服务 (WMS) 服务器托管的平铺图像。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代…

剑指 Offer II 026. 重排链表

思路: (1)找到链表中心点,如果链表节点为奇数,那么要保证前面要比后面多一个节点。 (2)将后一部分的结点进行反转。 (3)将反转后的结点插入前一部分的结点。 &#xff0…

前有谷歌的“生存指南”,后有金山系的“表格编程”,均登热榜

谷歌的“生存指南” 一位曾经在谷歌工作的工程师,干了一件了不起的事,花费了两年的时间,整理了一份“xg2xg”的清单。 原来这位离职的谷歌工程师为程序员编写了一份“厂外生存指南”,即使你从谷歌离职后,在这套“生存…

无良公司把我从上家挖过来,白嫖了六个月,临近试用期结束才说不合适,催我赶紧找下家!...

职场套路多,一不小心就会掉坑,一位网友讲述了自己的遭遇: 今天被领导催促离职了,当时就是这个领导把他从别的公司挖过来。这家公司催得太急,为了投奔这里,他和上家的HR都闹翻了,上家总监挽留他&…

ChatGLM ptuning 的实战方案

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

【中间件】kafka

目录 一、概述二、生产者1. 发送原理2. 生产者分区 Partition分区好处分区策略 3. 生产者如何提高吞吐量4. 数据可靠性ACK应答级别数据不丢失:ACK ISR数据不重复:幂等性数据有序 三、broker1. 工作流程2. 副本相关3. 底层存储4. 高效读写数据 四、消费者…