OpenGL3.3_C++_Windows(27)

news2024/11/19 9:25:05

法线/凹凸贴图

  • 如何让纹理产生更细节的效果,产生凹凸视觉感?
  • 解决思路之一:镜面贴图(黑—白)((diffuse贴图(rgba)),阻止部分表面被照的更亮,但这并不是一个好方案。我们需要模拟深度这样的细节的方式。而非反射效果。
  • 是什么使表面被视为完全平坦的表面来照亮?答案是法线向量,第二个解决方案:
  • 法线/凹凸贴图(偏蓝色调的纹理):替代一个面上所有fragment为法线贴图采样,模拟凹凸感,细节获得了极大提升,开销却不大
  • 纹理:存储颜色,深度值,模板值,法线向量……

基本概念

  • 将法线向量的x、y、z元素储存到纹理中,代替颜色的r、g、b(红,绿,蓝大部分法线指向z轴,所以大部分都为蓝色)元素。
  • 用纹理储存法线向量:法线向量的范围在-1到1之间,所以我们先要将其映射到0到1的范围(* 0.5 + 0.5;):将法线向量变换为像这样的RGB颜色元素,我们就能保存在2D纹理中
  • 注意,我们真正使用的法线贴图,是上下颠倒的,OpenGL读取的纹理的y(或V)坐标和纹理通常被创建的方式相反
  • 从法线贴图采样的法线颜色从0到1重新映射回-1到1(* 2.0 - 1.0),便能将RGB颜色重新处理成法线

当我们旋转实体,

  • 光照看起来完全不对(普通的normal可以*model变换到世界坐标),原因:法线贴图里面的所有法线向量依旧是指向正z方向的
  • 为什么要有切线空间?我们也可以针对每个变换,新建特定的法线贴图,但那太麻烦了,需要任意的变换法线朝向,可以复用的法线贴图

  • 切线空间tangent space)局部坐标系统xyz:
  • TBN向量:切线空间的3个向量:tangent切线(右->三角形面)、bitangent副切线(前->三角形面),normal法线(上->法向量)
  • 对于一个quad有2个三角形,需要求每个三角形的TBN,每个三角形的每个顶点的TBN都是一样的,有了这个图中的转换公式,就可以求出TB了
  • 求TB单位向量:
  • 已知顶点坐标(求边E)和纹理坐标(求差U与T方向相同,V与𝐵方向相同),边向量E = 向量1 UT + 向量2VB (向量加法),分解为矩阵xyz3个分量,
  • 平滑:
  • 通常三角形和三角形之间都会共享顶点。这种情况下开发者通常将每个顶点的法线和切线/副切线等顶点属性平均化,以获得更加柔和的效果。
TBN

在glsl中创建mat3 TBN,如何使用它?

  • TBN矩阵:切线空间转成世界或视图空间下,从法线贴图采样法线,映射回-1到1,*TBN变换到世界空间
  • TBN逆矩阵:世界或视图空间下转成切线空间中
  • 注意,这里用到置换函数transpose,而非求逆函数inverse,对于正交矩阵(每个轴既是单位向量同时相互垂直)的一大属性是一个正交矩阵的置换矩阵与它的逆矩阵相等。因为逆矩阵的求得比求置换开销大;结果却是一样的。
  • 第二种方法看似要做的更多,为何还第二种方法呢?
  • uniform变量(对本shader属于全局的,唯一的,所以每次每个片段运行都是一致的),完全可以在vertex去计算,顶点着色器通常比像素着色器运行的少。这是一个极佳的优化。对于法线每个顶点运行fragment shader都是不同的,采样的都是不一致的,所以必须放在fragment shader中

为模型应用法线贴图

无Normal_Texture
应用Normal_Texture->TBN
  • 图中:可以看到应用了Normal_Texture->TBN后的model,显示的更加立体,凹凸感。
  • assimp库当ReadFile()调用aiProcess_CalcTangentSpace来加载场景scene时,Assimp会为每个加载的顶点计算出柔和的切线和副切线向量
  • 通过mesh->mTangents[i].获取切线空间
  • loadMaterialTextures时需要aiTextureType_NORMAL加载法线贴图
  • //
  • 格拉姆-施密特正交化: (不必花费太多性能开销的情况下稍稍提升画质表现)
  • 更大的网格上计算切线向量的时候,它们往往有很大数量的共享顶点,当法向贴图应用到这些表面时将切线向量平均化时通常能获得更好更平滑的结果。就是TBN向量可能会不能互相垂直
  • 重正交化:T = normalize(T - dot(T, N) * N)

矩阵:

  • 矩阵乘法:A(mx) * B(yn) = C(mn),注意:xy必须相等,才可以相乘
  • 行列式determinant:计算方法((基本算法,其余还包括:代数余子式,等价转化法,逆序数法……)
    • 对角线法:斜对角线(左下右上)每条相乘后相加  - 斜对角线(左上右下)每条相乘后相加 
    • 作用:应用于求逆矩阵的过程
  • 转置transpose A^T:横读竖写
  • 伴随矩阵A*:
    • 分量aij的余子式Mij:对于矩阵A,将i行j列划去后,剩余的分量按照原顺序排列得到的n-1阶矩阵,所确定的行列式
    • 分量aij的代数余子式Aij:符号(-1^i+j) * Mij
    • A的伴随矩阵A*:由各分量aij的代数余子式Aij构成
    • 计算过程:
      • 首先求解每个分量的Mij
      • 再计算符号*Mij
    • 应用:线性方程组:把每个系数写为矩阵中的对应分量……
    • 作用:应用于求逆矩阵的过程
  • 逆矩阵inverse A^-1:
    • 和倒数原理一样,x * 1/x = 1; A * A^-1(因为矩阵不能被除) = 单位矩阵(对角线上的数字都是1,其他地方都是0)
    • 如何计算一个矩阵的逆矩阵A^-1?(基本算法,其余还包括初等变换……)
      • 待定系数法:新建矩阵X,对应分量写成等式 == 单位矩阵的对应分量,求系数,即逆矩阵
      • 伴随矩阵:  伴随矩阵  / 行列式 (float) (或 * 1/行列式)
    • 普通除法:已知a * x = b,求x,x = b / a == b * (1/a) ->应用于矩阵
    • 矩阵:A * X = B,我们可以通过 (B/A->)B * A^-1,求出X矩阵(相当于除法的作用

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

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

相关文章

鸿蒙数据防泄漏(DLP)【Data Loss Prevention Kit简介】

Data Loss Prevention Kit简介 Data Loss Prevention Kit(数据防泄漏服务,简称为DLP),是系统提供的系统级的数据防泄漏解决方案,提供文件权限管理、加密存储、授权访问等能力,数据所有者可以基于帐号认证对…

pjsip环境搭建、编译源码生成.lib库

使用平台: windows qt(5.15.2) vs(2019)x86 pjsip版本以及第三方库使用 pjsip 2.10 ffmpeg4.2.1 sdl2.0.12pjsip源码链接: https://github.com/pjsip/pjproject源码环境配置 首先创建两个文件夹,分别是include、lib其中include放置ff…

亚马逊跟卖卖家还在选品发愁吗!已经有卖家用这种方式选品大卖!

对于亚马逊相信很多卖家都不陌生,也有很多新手卖家涌入,但是进入后就不知道怎么选品了,很多新手卖家是不是天天盯着亚马逊页面的产品,眼花撩乱的,不知道那些产品,能跟卖那些不能跟卖,也有些卖家…

通过卷防水上限,解锁手机的新玩法?IP68之间亦有不同

当手机的日常防水已经成了基本功,防水能力的上限便成了新的赛道。 毕竟再谨慎的人,也可能会有手滑的时候。这个时候,一台有着IP68级防水的手机,就能给你提供一份安心。 【IP68是标准上限,不是手机防水上限】 IP68是…

据阿谱尔统计,全球mRNA原料酶市场预计2024年达到11.98亿美元

Codexis 宣布与 Aldevron 达成协议,授予 Aldevron Codexis 的 Codex HiCap RNA 聚合酶的全球制造和商业化权利。 Applied DNA、Maravai LifeSciences (MRVI) 和 Alphazyme 达成协议,Alphazyme 将扩大 Applied DNA 专有 Linea™ RNA 聚合酶 (RNAP) 的生产…

新声创新20年:无线技术给助听器插上“娱乐”的翅膀

听力损失并非现代人的专利,古代人也会有听力损失。助听器距今发展已经有二百多年了,从当初单纯的声音放大器到如今的全数字时代助听器,助听器发生了翻天覆地的变化,现代助听器除了助听功能,还具有看电视,听…

Character.ai因内容审查流失大量用户、马斯克:Grok-3用了10万块英伟达H100芯片

ChatGPT狂飙160天,世界已经不是之前的样子。 更多资源欢迎关注 1、爆火AI惨遭阉割,1600万美国年轻人失恋?Character.ai被爆资金断裂 美国流行的社交软件Character.ai近期对模型进行大幅度内容审查,导致用户感到失望并开始流失。…

国内外生成式AI教育产品:深度解析教育各环节的智能化教学

随着人工智能技术的飞速发展,教育行业迎来了一场革命性的变革。 2024年,AI教育产品不仅在课堂上大放异彩,更在课前备课、课后辅导、教研支持等各个环节发挥着重要作用。 本文将为您全面总结AI教育产品如何渗透教育的每一个环节,…

PD虚拟机对电脑配置要求高吗 PD虚拟机配置怎么改 Parallels Desktop使用教程

说到虚拟机,很多人会觉得电脑需要很高的配置才能安装。其实不然,有些虚拟机软件的技术已经很成熟,不需要借助电脑的高配置支撑其功能,比如PD软件,很多旧的Mac机型都能安装使用。本文会给大家详细介绍PD虚拟机对电脑配置…

鸿蒙数据防泄漏(DLP)【Data Loss Prevention Kit开发指导】

Data Loss Prevention Kit开发指导 DLP是系统提供的系统级的数据防泄漏解决方案,提供一种称为DLP的文件格式。后缀格式为“原始文件名(包含原始文件后缀).dlp”,例如: “test.docx.dlp”,文件由授权凭证和原始文件密文…

09 docker 安装tomcat 详解

目录 一、安装tomcat 1. tomcat镜像的获取 2. docker创建容器实列 3. 访问测试 404错误 4. 解决方案 5. 使用免修改版容器镜像 5.1. 运行实列的创建 5.2. 出现问题及解决: 6. 验证 OK 一、安装tomcat 1. tomcat镜像的获取 docker search tomcat #docker …

Spire.PDF for .NET【文档操作】演示:以特定的缩放比例/百分比打开 PDF 文件

有时,我们可能需要在显示 PDF 文件时更改缩放比例以满足我们的要求。在本文中,我们将演示如何使用 Spire.PDF for .NET 以特定的缩放比例/百分比(例如默认值、100% 或任何其他所需的缩放比例)打开 PDF 文件。 Spire.PDF for .NET…

echarts legend组件单独设置样式形状

为legend组件单独设置一个样式 //单独legend样式 const customLegend {name: test,// 设置文本为红色textStyle: {color: red} } legend: {data: [Email, Union Ads, Video Ads, Direct, Search Engine, customLegend ] }注意事项:series里面也必须配置与legend相对…

python中的文件

1.什么是文件? 硬盘上存储的数据都是以文件的形式来组织的~ 文件是数据在硬盘上的存储形式,不同的数据在硬盘上的存储形式是不同的, 2.文件路径 文件夹/目录。 文件夹,再包含文件夹的情况,这就是一个嵌套的关系&…

OpenCV教程02:图像处理系统1.0(翻转+形态学+滤波+缩放+旋转)

-------------OpenCV教程集合------------- Python教程99:一起来初识OpenCV(一个跨平台的计算机视觉库) OpenCV教程01:图像的操作(读取显示保存属性获取和修改像素值) OpenCV教程02:图像处理…

272. 最长公共上升子序列

Powered by:NEFU AB-IN Link 文章目录 272. 最长公共上升子序列题意思路代码 272. 最长公共上升子序列 题意 如题 思路 若按这个思路的话&#xff0c;代码为 O ( n 3 ) O(n^3) O(n3) for (int i 1; i < n; i ) {for (int j 1; j < n; j ){f[i][j] f[i - 1][j];…

CoAtNet(NeurIPS 2023, Google)论文解读

paper&#xff1a;CoAtNet: Marrying Convolution and Attention for All Data Sizes third-party implementation&#xff1a;https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/maxxvit.py 背景 自AlexNet以来&#xff0c;ConvNets一直是计算机…

antfu/ni 在 Windows 下的安装

问题 全局安装 ni 之后&#xff0c;第一次使用会有这个问题 解决 在 powershell 中输入 Remove-Item Alias:ni -Force -ErrorAction Ignore之后再次运行 ni Windows 11 下的 Powershell 环境配置 可以参考 https://github.com/antfu-collective/ni?tabreadme-ov-file#how …

登录功能和校验

基础版 controller package com.web.management.controller;import com.web.management.pojo.Emp; import com.web.management.pojo.Result; import com.web.management.service.EmpService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.anno…

STM32F1+HAL库+FreeTOTS学习4——任务挂起与恢复

STM32F1HAL库FreeTOTS学习4——任务挂起与恢复 任务挂起和恢复的API介绍代码实现 上一期我们学习了FreeRTOS中任务创建的两种方法&#xff0c;这一期我们学习任务的挂起和恢复。 任务挂起和恢复的API介绍 在 &#xff1a;STM32F1HAL库FreeTOTS学习1——FreeRTOS入门 的学习中&…