2、片元着色器之有向距离场(SDF)运算:并集、差集、交集

1、并集

float sdCircle(vec2 uv,float r){return length(uv)-r;
}
float sdRect(vec2 uv,float r){return max(abs(uv.x),abs(uv.y))-r;
}
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{float w = 1.0/iResolution.y;// 计算纹理坐标vec2 uv = fragCoord/iResolution.xy;// 将纹理坐标系原点移动到屏幕中央uv-=0.5;// 调整 x 轴比例,使得坐标系纵横比一致uv.x*=iResolution.x/iResolution.y;vec3 col = vec3(0.0);// `sdRect(uv - vec2(0.1, 0.1), 0.2)`计算当前 uv 坐标到中心在 (0.2, 0.2)、半径为 0.2 的矩形的距离float r= sdRect(uv-vec2(0.1,0.1),0.2);// 大于0代表像素点不在矩形范围内r = r > 0.0 ? 0.0:1.0;float c = sdCircle(uv-vec2(-0.1,-0.1),0.2);c = c > 0.0 ? 0.0:1.0;// 并集就是像素属于圆或者矩形都可以着色,即r=1 or c=1float result = max(r,c);//r和c只能为0或1,取最大值即有一个为1结果就是1col = mix(col,vec3(1.0,0.0,1.0),result);fragColor = vec4(col,1.0);
}

在这里插入图片描述

2、差集

float sdCircle(vec2 uv,float r){return length(uv)-r;
}
float sdRect(vec2 uv,float r){return max(abs(uv.x),abs(uv.y))-r;
}
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{float w = 1.0/iResolution.y;// 计算纹理坐标vec2 uv = fragCoord/iResolution.xy;// 将纹理坐标系原点移动到屏幕中央uv-=0.5;// 调整 x 轴比例,使得坐标系纵横比一致uv.x*=iResolution.x/iResolution.y;vec3 col = vec3(0.0);// `sdRect(uv - vec2(0.1, 0.1), 0.2)`计算当前 uv 坐标到中心在 (0.2, 0.2)、半径为 0.2 的矩形的距离float r= sdRect(uv-vec2(0.1,0.1),0.2);// 大于0代表像素点不在矩形范围内r = r > 0.0 ? 0.0:1.0;float c = sdCircle(uv-vec2(-0.1,-0.1),0.2);c = c > 0.0 ? 0.0:1.0;// 差集就是像素只属于圆或者只属于矩形才能着色,即(r=1 and c=0)&&(r=0 and c=1)float result = abs(r-c);col = mix(col,vec3(1.0,0.0,1.0),result);fragColor = vec4(col,1.0);
}

在这里插入图片描述

3、交集

float sdCircle(vec2 uv,float r){return length(uv)-r;
}
float sdRect(vec2 uv,float r){return max(abs(uv.x),abs(uv.y))-r;
}
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{float w = 1.0/iResolution.y;// 计算纹理坐标vec2 uv = fragCoord/iResolution.xy;// 将纹理坐标系原点移动到屏幕中央uv-=0.5;// 调整 x 轴比例,使得坐标系纵横比一致uv.x*=iResolution.x/iResolution.y;vec3 col = vec3(0.0);// `sdRect(uv - vec2(0.1, 0.1), 0.2)`计算当前 uv 坐标到中心在 (0.2, 0.2)、半径为 0.2 的矩形的距离float r= sdRect(uv-vec2(0.1,0.1),0.2);// 大于0代表像素点不在矩形范围内r = r > 0.0 ? 0.0:1.0;float c = sdCircle(uv-vec2(-0.1,-0.1),0.2);c = c > 0.0 ? 0.0:1.0;// 交集就是像素既属于圆又属于矩形才能着色,即(r=1 and c=1)&&(r=1 and c=1)float result = r*c;col = mix(col,vec3(1.0,0.0,1.0),result);fragColor = vec4(col,1.0);
}

在这里插入图片描述

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

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

相关文章

【Apache Zookeeper】

一、简介 1、场景 如何让⼀个应⽤中多个独⽴的程序协同⼯作是⼀件⾮常困难的事情。开发这样的应⽤,很容易让很多开发⼈员陷⼊如何使多个程序协同⼯作的逻辑中,最后导致没有时间更好地思考和实现他们⾃⼰的应⽤程序逻辑;又或者开发⼈员对协同…

Gitlab 官方推荐自动化cache服务器Minio的安装

极狐GitLab Runner 使用 cache 加快 CI/CD 构建速度。 极狐GitLab CI/CD Job 在运行过程中不可避免的要下载一些外部依赖,cache 的存在是为了让不同 Job 之间能够共享这些文件,避免每个 Job 都去再次下载,这样做能够节约 CI/CD 的执行时间&a…

面试经典 150 题.P26. 删除有序数组中的重复项(003)

本题来自:力扣-面试经典 150 题 面试经典 150 题 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台https://leetcode.cn/studyplan/top-interview-150/ 题解: class Solution {public int removeDuplicates(int[] nums) …

【华为HCIP实战课程二十六】中间到中间系统协议IS-IS配置默认路由及IS-IS数据库,网络工程师

一、IS-IS路由器分类 1、L1路由器:Level-1路由器负责区域内的路由,它只与属于同一区域的Level-1和Level-1-2路由器形成邻居关系,属于不同区域的Level-1路由器不能形成邻居关系。Level-1路由器只负责维护Level-1的链路状态数据库LSDB,该LSDB包含本区域的路由信息。到本区域…

名词(术语)了解 -- SSG

名词(术语)了解 – SSG 什么是静态站点生成(SSG)? 静态站点生成(Static Site Generation, SSG)是一种在构建时生成静态HTML网页的网站构建方法。与动态网站相比,SSG会提前将所有页面渲染成静态HTML文件,这些文件可以直接部署到…

MyBatis 学习记录(六)之逆向工程

MyBatis 学习记录(六) MyBatis的逆向工程1、创建逆向工程添加依赖和插件创建逆向工程的配置文件执行MBG插件的generate目标最终生成的效果 2、QBC查询 MyBatis的逆向工程 **正向工程:**先创建Java实体类,由框架负责根据实体类生成…

【项目实战】通过LLaMaFactory+Qwen2-VL-2B微调一个多模态医疗大模型

前言 随着多模态大模型的发展,其不仅限于文字处理,更能够在图像、视频、音频方面进行识别与理解。医疗领域中,医生们往往需要对各种医学图像进行处理,以辅助诊断和治疗。如果将多模态大模型与图像诊断相结合,那么这会…

jupyter notebook 启动 Clusters 教程

jupyter notebook 启动 Clusters 教程 Anaconda 的话输入代码 conda install ipyparallel pip 安装的jupyter notebook,输入代码 pip install ipyparallel (base) C:\Users\VICTUS>conda install ipyparallel Channels:- defaults Platform: win-64 Collecti…

本篇文章来介绍下dockerfile

我开始玩儿docker的时候,都是通过docker pull命令把基础镜像拉取到本地,然后在跑成容器,在操作容器,做一些自己的事情,比如安装个java环境什么的,直到我接触到了dockerfile,我发现dockerfile真是…

Java识别图片或扫描PDF中的文字

目录 使用工具 Java识别图片中的文字 Java识别扫描PDF中的文字 注意事项 图片和扫描文件通常以非文本格式存在,这使得其中的文字信息难以直接编辑、搜索或复制。为了解决这个问题,光学字符识别(OCR)技术应运而生。OCR通过分析…

view design之table自定义单元格模版

View Design之table自定义单元格模版 在 columns 的某列声明 slot 后&#xff0c;就可以在 Table 的 slot 中使用参数。 slot 的参数有 3 个&#xff1a;当前行数据 row&#xff0c;当前列数据 column&#xff0c;当前行序号 index。 完整示例 <template><Table …

【Leecode】Leecode刷题之路第35天之搜索插入位置

题目出处 35-搜索插入位置-题目出处 题目描述 个人解法 思路&#xff1a; 1.依次遍历数组&#xff0c;看目标值是否在数组中 2.如果不在&#xff0c;将目标值插入数组&#xff08;涉及到数组移动、扩容&#xff09;&#xff0c;返回下标代码示例&#xff1a;&#xff08;Java…

深入解析JavaScript 中的 Object.defineProperty() 与 Object.defineProperties() 方法

目录 前言1. Object.defineProperty()2. Object.defineProperties() 前言 写在前面&#xff0c;基本的功能与差异如下&#xff1a; Object.defineProperty()&#xff1a; 定义单个属性&#xff0c;接受三个参数&#xff08;对象、属性名、描述符&#xff09; Object.definePr…

大模型提示词简介 举例

目录 大模型提示词&#xff08;Prompt&#xff09;详解 1. 什么是AI提示词&#xff08;Prompt&#xff09; 2. 为什么提示词对AI结果的影响很大 3. 提示词构成 4. 提示词举例 示例1&#xff1a;生成新闻标题 示例2&#xff1a;创作诗歌 示例3&#xff1a;撰写电子邮件 …

【Java笔记】0-为什么学习Java

呃&#xff0c;当然是为了找个Java的开发工作 当然是由于Java使用的人多和它天生自带的优点了~ 主要优点有以下几点&#xff1a; 简单性 C语法纯净版&#xff0c;没有头文件、指针运算、不用分配内存 面向对象 重点放在对象与其接口上&#xff0c;接近人的逻辑 可移植性 …

Nop平台与APIJSON的功能对比

APIJSON是由腾讯的工程师研发的一款流传甚广的零代码接口与文档ORM库&#xff0c;github的star数高达16.8K。这个库实现了一种基于JSON的轻量级数据交换格式&#xff0c;提供万能通用接口&#xff0c;无需编码即可实现增删改查、跨库连表、嵌套子查询等。APIJSON的生态相当完整…

CAN物理层(ISO 11898-2 2024)

一、说明 CAN(Controller area network)中文名称是控制器局域网,是用于解决汽车众多控制部件之间的数据交换而开发的一种串行数据通信总线,可以使用双绞线来传输信号,由德国博世公司在20世纪80年代专门为汽车行业开发。 ISO 11898-2 2024版相对于2016版,主要由以下更新…

VQGAN(2021-06:Taming Transformers for High-Resolution Image Synthesis)

论文&#xff1a;Taming Transformers for High-Resolution Image Synthesis 1. 背景介绍 2022年中旬&#xff0c;以扩散模型为核心的图像生成模型将AI绘画带入了大众的视野。实际上&#xff0c;在更早的一年之前&#xff0c;就有了一个能根据文字生成高清图片的模型——VQGAN…

HBuilder X 中Vue.js基础使用4->表单输入绑定(三)

表单绑定是实现动态数据双向绑定的重要部分&#xff0c;它让开发者可以轻松地管理和响应用户输入。本文将详细介绍如何在Vue 3中利用v-model指令以及一些特定修饰符来处理不同类型的表单输入。 v-model双向数据绑定 Vue的 v-model 指令提供了双向绑定的功能&#xff0c;key在…

「虚拟现实中的心理咨询:探索心灵世界的新方法」

内容概要 当我们想到虚拟现实时&#xff0c;很多人会联想到游戏或娱乐&#xff0c;但如今其在心理咨询领域的应用正在逐渐崭露头角。传统的心理咨询方式常常局限在咨询室内&#xff0c;面临着空间和情感隔阂的问题。然而&#xff0c;沉浸式环境的出现&#xff0c;使得治疗者能…