TBN 矩阵中的法向量、切向量和双切向量总是垂直的吗?

2023-11-26

这与另一个问题中描述的问题有关(那里有图片):

Opengl 着色器问题 - 奇怪的光反射伪像

我有一个 .obj 导入器,它创建数据结构并计算切线和双切线。这是我的对象中第一个三角形的数据:

Data Structure

我对切线空间的理解是,法线从顶点向外指向,切线垂直(正交?)于法线向量并指向纹理中正S的方向,双切线垂直于两者。我不确定你怎么称呼它,但我认为这 3 个向量形成了看起来像旋转或变换的 x、y、z 轴。他们不会是3randomly定向向量,对吧?

还有我的理解:法线贴图中的法线提供了一个新的法线向量。但在切线空间纹理贴图中,RGB 编码法线和每个顶点法线之间没有内置方向。因此,您可以使用 TBN 矩阵来弥合间隙,并使它们处于同一空间(或在正确的空间中获得照明)。

但后来我看到了对象数据...我的结构有 270 个顶点,所有顶点的切线 Y 均为 0。这对于切线数据正确吗?这些切线是否像顶点法线空间之类的?或者他们只是看起来完全错误?或者我对它是如何工作的以及我的数据是否正确感到困惑?

为了更接近解决另一个问题中的问题,我需要确保我的数据是正确的以及我对切线空间照明数学如何工作的理解。


切线和双切线向量指向纹理坐标的 S 和 T 分量的方向(对于不熟悉 OpenGL 术语的人来说是 U 和 V)。所以切向量沿着 S 点,双切点沿着 T 点。

所以是的,这些不have与法线正交或彼此。它们遵循纹理映射的方向。事实上,这就是它们的目的:允许您将法线从模型空间转换到纹理空间。它们定义了从模型空间到纹理空间的映射。

仅当该顶点处的 S 和 T 分量正交时,切线和双切线才会彼此正交。也就是说,如果纹理映射没有剪切。虽然大多数纹理映射算法会尝试最小化剪切,但它们可能无法在所有情况下消除剪切。在这些情况下,精确的矩阵将包括剪切位置处的非正交切线和双切线。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TBN 矩阵中的法向量、切向量和双切向量总是垂直的吗? 的相关文章

  • 寻找将集合映射到整数的双射函数

    对于任意两个序列 a b 其中 a a1 a2 an 且 b b1 b2 bn 0a b具有相同的元素 而不关心它们的顺序 例如 如果 a 1 1 2 3 b 2 1 3 1 c 3 2 1 3 则 f a f b f a f b 我知道有
  • 获取所有矩阵列逐元素乘积对的快速方法

    假设我有一个数字matrix set seed 1 mat lt matrix rnorm 1000 ncol 100 我想生成所有向量 它们是中所有唯一向量对的逐元素乘积的结果mat 我们如何改进下面的代码 all pairs lt t
  • Karasuba算法递归过多

    我正在尝试用 c 实现 Karasuba 乘法算法 但现在我只是想让它在 python 中工作 这是我的代码 def mult x y b m if max x y lt b return x y bm pow b m x0 x bm x1
  • GLSL NVidia 方形神器

    当 GLSL 着色器在以下 GPU 上生成不正确的图像时 我遇到了问题 GT 430 GT 770 GTX 570显卡760 但在这些上正常工作 英特尔高清显卡 2500英特尔高清4000英特尔4400显卡740MRadeon HD 631
  • 这个按位运算如何检查 2 的幂?

    我正在看一些应该很简单的代码 但我的数学在这里严重失败 下面是一个使用以下条件检查数字是否为 2 的幂的条件 if num 1 num num 1 make num pow of 2 我的问题是 如何在 num 和 num 1 之间使用按位
  • 指向特征矩阵的指针数组

    我在代码中使用 Eigen 的 MatrixXd 矩阵 在某个时刻我需要一个 3D 矩阵 由于 Eigen 没有三维矩阵类型 因为它仅针对线性代数进行了优化 因此我创建了一个 MatrixXd 类型的指针数组 Eigen MatrixXd
  • IE9-11 检测变换样式:preserve-3d

    我为一个项目制作了一个 3d 类型的菜单 自然 IE 会引起问题 因为 IE10 即使 3d 变换工作 也不支持变换样式 preserve 3d 我尝试了解决方法 通过对 3d 菜单容器的每个子元素应用变换 但至少可以说 动画看起来很糟糕
  • C++ 中求幂的函数是什么?

    如何计算一个数的幂 2 1 2 2 2 3 etc cmath 库中的 pow 更多信息here http en cppreference com w cpp numeric math pow 别忘了放 include
  • numpy python 中的“AttributeError:'matrix'对象没有属性'strftime'”错误

    我有一个维度为 72000 1 的矩阵 该矩阵涉及时间戳 我想使用 strftime 如下所示 strftime d m y 为了得到像这样的输出 11 03 02 我有这样一个矩阵 M np matrix timestamps 我使用了
  • 使用文件 API 将资源加载到 Three.js 中

    我想创建导入 3D 模型以在浏览器中查看的功能 方法是使用File API http www html5rocks com en tutorials file dndfiles Three js 加载器在我托管的文件上运行良好 我的理解是加
  • python:查找围绕某个 GPS 位置的圆的 GPS 坐标的优雅方法

    我有一组以十进制表示的 GPS 坐标 并且我正在寻找一种方法来查找每个位置周围半径可变的圆中的坐标 这是一个例子 http green and energy com downloads test circle html我需要什么 这是一个圆
  • 如何在 C 中将 uint 转换为 int,同时将结果范围的损失最小化

    我想要两个无界整数之间的差 每个整数由一个表示uint32 tvalue 是对 2 32 取模的无界整数 例如 TCP 序列号 请注意 模 2 32表示形式可以环绕 0 这与更受限制的问题 不允许环绕 0 https stackoverfl
  • 改变for循环的顺序?

    我遇到一种情况 我需要根据用户输入以不同的顺序循环遍历 xyz 坐标 所以我是 3D 空间中的一个区域 然后是一组像这样的 for 循环 for int x 0 x lt build getWidth x for int y 0 y lt
  • 重新创建 CSS3 过渡三次贝塞尔曲线

    在 CSS3 过渡中 您可以将计时函数指定为 cubic bezier 0 25 0 3 0 8 1 0 在该字符串中 您仅指定曲线上点 P1 和 P2 的 XY 因为 P0 和 P3 始终分别为 0 0 0 0 和 1 0 1 0 根据苹
  • 使用 Matrix.setPolyToPoly 选择位图上具有 4 个点的区域

    我正在 Android 上使用位图 在使用 4 个点选择位图上的区域时遇到问题 并非所有 4 点组都适合我 在某些情况下 结果只是一个空白位图 而不是裁剪后的位图 如图所示 并且 logcat 中没有任何错误 甚至是内存错误 这是我用来进行
  • 选择一组数字以达到最小总数的算法

    给定 一组数字n 1 n 2 n 3 n x 还有一个数字M 我想找到最好的组合 n a n b n c n gt M 该组合应达到达到或超过 M 所需的最小值 没有其他组合可以提供更好的结果 将在 PHP 中执行此操作 因此可以使用 PH
  • 如何确保整数除法始终向上舍入?

    我想确保如有必要 整数除法总是向上舍入 还有比这更好的方法吗 目前正在进行大量选角工作 int Math Ceiling double myInt1 myInt2 更新 这个问题是我2013年1月博客的主题 http ericlippert
  • C++ Exp 与 Log:哪个更快?

    我有一个 C 应用程序 需要比较两个值并决定哪个值更大 唯一的复杂之处是一个数字在对数空间中表示 而另一个则不是 例如 double log num 1 log 1 23 double num 2 1 24 如果我想比较num 1 and
  • gldrawarrays 不绘制任何东西

    我正在尝试用 VBO 绘制一个三角形 我在窗口上没有看到任何像素 我也没有看到任何 GL ERROR 这是我尝试运行的代码 include
  • 将名称字符串编码为唯一的数字

    我有一大堆名字 数以百万计 他们每个人都有一个名字 一个可选的中间名和一个姓氏 我需要将这些名称编码为唯一代表这些名称的数字 编码应该是一对一的 即一个名称只能与一个数字相关联 一个数字只能与一个名称相关联 对此进行编码的明智方法是什么 我

随机推荐

  • 如何跳出每个循环的外层

    我有以下场景 each array function each array1 function if condition 怎样才能突破外在each当我的条件在内部计算为 true 时循环each loop each array functi
  • 如何验证整数输入[重复]

    这个问题在这里已经有答案了 例如我有代码 include
  • 有哪些技术/工具可以发现文本块中的常见短语?

    假设我有 100000 封电子邮件正文 其中 2000 封包含任意常见字符串 例如 the Quick Brown Fox Jumps Over the Lazy Dog 或 Lorem ipsum Dolor Sit Amet 我可以 应
  • gcc精度错误?

    我只能假设这是一个错误 第一个断言通过 而第二个断言失败 double sum 1 4 0 6 3 assert sum 1 4 0 6 3 double t1 4 0 t2 6 3 double sum 2 t1 t2 assert su
  • 使用自定义字体时出现问题 - “无法制作原生字体”

    我正在尝试使用在互联网上找到的字体 但问题是我得到的 FC 带有 无法制作原生字体 这是我的 ListVIew 的 getView 中的代码 holder tv SuraName TextView convertView findViewB
  • 数组值之间的百分比

    我正在寻找一种简单的方法来使用 python 查找数据在特定区间内的百分比 考虑浮点值的数组 X 我想做一些类似于分位数的事情 X quantile np linspace 0 1 11 但是 例如 我想知道哪些百分比的值在 10 和 10
  • BadPaddingException 加载 p12 密钥库

    当执行以下代码时 KeyStore ks KeyStore getInstance storeType ks load new FileInputStream keyStore storePassword toCharArray KeyMa
  • 当我将鼠标悬停在 CSS 网格框上时,为什么只有部分 CSS 网格框会展开?

    我对 CSS 网格很陌生 但我想尝试一下 我有一个带有 3x3 盒子的网格 当我将鼠标悬停在一个框上时 它应该超出整行 但这不起作用 当我将鼠标悬停在1它完全填满了屏幕 当我将鼠标悬停在3我的屏幕开始闪烁并且无法工作 container d
  • 匹配美式键盘上所有字符的正则表达式

    我正在寻找一个正则表达式模式来匹配美国键盘上找到的所有字符 现在 我只匹配字母 数字和空格 所以看起来像 a zA Z0 9 s 但现在我需要它匹配键盘上找到的任何字符 如果字符串也为空 我什至希望它匹配 x00 x7F for 0 n A
  • 如何编写一个通用的可变参数 lambda 来丢弃其参数?

    我想编写一个 lambda 它通过通用引用接受任意数量的参数并完全忽略它们 显而易见的方法是使用可变参数通用参数包的语法并省略参数名称 auto my lambda auto return 42 这工作正常 使用 gcc 4 9 2 直到我
  • 什么是实物签名约束

    如果我检查kind of Maybe我明白了 gt k Maybe Maybe gt 现在 如果我检查那种Monad我明白了 gt k Monad Monad gt gt Constraint What is Constraint那里以及为
  • 如何从 Google App Engine High Replication 数据存储区导出数据?

    我正在考虑在一个项目中使用 Google App Engine 并且希望确保在我决定离开 GAE 或 GAE 关闭 时能够导出所有数据 我搜索的有关从 GAE 导出数据的所有内容都指向https developers google com
  • 在 SQL Server 中远程调用表值函数的解决方法存在更多问题

    我有一个包含一组参数的查询 需要使用不同的参数多次运行 因此我将其包装在表值函数中 该表值函数需要从远程服务器调用 不幸的是 调用在链接服务器上失败并出现错误 Msg 4122 Level 16 State 1 Line 29 Remote
  • 滚动嵌入 HTML 的 PDF

    我已在 Iframe 中嵌入了 PDF 文件 我的 html 文件有按钮 向上 向下 当我单击这些按钮时 我希望 pdf 向上或向下滚动 有没有办法用javascript或任何其他方式控制pdf 我将为此应用程序使用 Internet Ex
  • 应该编写文本处理 DCG 来处理代码或字符吗?或两者?

    在 Prolog 中 传统上有两种表示字符序列的方法 作为列表chars 它们是长度为 1 的原子 作为列表codes 它们只是整数 整数将被解释为代码点 但要应用的约定未指定 作为一个 非常理智的 例子 在 SWI Prolog 中 代码
  • 如何使用 OKHTTP 取消请求

    我需要能够MANAGER一些请求与OKHTTP 使用Google Places AutoComplete通过输入地址来接收一些预测 这问题是每次我插入一个CHAR它会提出一个新的请求 但同时我需要取消前一个请求 例如 纽约市 同时有 13
  • 在java中使用10个线程打印1到100

    我是多线程新手 我有一个问题是在 Java 中使用 10 个线程在以下约束下打印 1 到 100 Thread t1应该打印 1 11 21 31 91 t2应该打印 2 12 22 32 92 likewise t10应该打印 10 20
  • 如何仅使用脚本创建自制公式

    我想将一些 shell 脚本 支持文件打包成一个自制程序 将这些脚本安装在用户的某个地方 PATH 我将用我自己的水龙头提供配方 阅读通过配方食谱这些示例似乎假设上游库中存在 cmake 或 autotools 系统 如果我的项目仅包含几个
  • htaccess 重定向 + 隐藏 url 中的子文件夹

    我环顾四周并尝试了一些有效的规则和条件 虽然有些不起作用 或者条件会捕获太多导致其他域也重定向 这对我有用 Redirect also catches www RewriteCond HTTP HOST www domain com Rew
  • TBN 矩阵中的法向量、切向量和双切向量总是垂直的吗?

    这与另一个问题中描述的问题有关 那里有图片 Opengl 着色器问题 奇怪的光反射伪像 我有一个 obj 导入器 它创建数据结构并计算切线和双切线 这是我的对象中第一个三角形的数据 我对切线空间的理解是 法线从顶点向外指向 切线垂直 正交