找回密码
 立即注册
首页 业界区 安全 【OpenGL ES】光栅化插值原理和射线拾取原理 ...

【OpenGL ES】光栅化插值原理和射线拾取原理

羔迪 前天 18:20
1 前言

​    最近在推导光栅化插值公式和射线拾取公式,发现计算过程中有很多共同点,因此将它们放在一篇文章里介绍。具体共同点如下。

  • 都引入了四面体模型
  • 都以四面体的三条边作为基向量构建坐标系(非直角坐标系)
  • 都需要求解射线向量在基向量上的坐标
2 光栅化插值原理

​    光栅化要解决的问题:如下图,已知三角形的三个顶点的坐标及其他属性(如颜色、纹理坐标、法线向量、切线向量、副切线向量等),对于三角形内任意一点,若已知其坐标,求该点的颜色、纹理坐标等属性的值。
1.png

​    进一步细化问题:如下图,O 点是坐标原点,已知 A、B、C、Q 4 个点的坐标,假设 Q = x · A + y · B + z · C,求 x 、y、z 的值。
2.png

​    定义向量如下。
3.png

​    向量 d 可以用向量 a、b、c 线性表示如下。
4.png

​    使用矩阵表示如下。
5.png

​    求解向量 m 如下。
6.png

​    说明如下:

  • 向量 m 的几何含义是:若以向量 a、b、c 为坐标轴建立坐标系(非直角坐标系),向量 m 表示向量 d 在该坐标系下的坐标。
  • 由于 Q 点在 ΔABC 的内部,因此 mx + my + mz = 1,并且 mx >= 0、my >= 0、mz >= 0(第一象限)。
  • 如果 mx = my = mz = 1 / 3,则 Q 点一定是 ΔABC 的重心
​    为简化计算,可以使用以下数学工具。

  • 对于线性方程组 A·x=b,根据克拉默法则可以求解:xi = |Bi| / |A|,其中 Bi 是将矩阵 A 的第 i 列替换为 b 向量后的矩阵。
  • 假设 3x3 矩阵 A 由 a、b、c 三个列向量组成,则 |A| = a x b · c。
2 射线拾取原理

​    参考:直线与三角形相交Moller Trumbore算法推导。
​    如下图,已知 A、B、C、P 4 个点的坐标,向量 n 是由 P 点发射的单位方向向量,Q 点是向量 n 与 ΔABC 的交点,求 Q 点坐标。由于 Q = P + d,因此本节只求向量 d 的坐标。
7.png

​    定义向量如下。
8.png

​    向量 n 可以用向量 a、b、c 线性表示如下。
9.png

​    使用矩阵表示如下。
10.png

​    求解向量 m 如下。
11.png

​    如果 mx、my、mz 中有一个为负数,说明交点 Q 一定在 ΔABC 外部;如果 mx + my + mz = 0,说明向量 m 与 ΔABC 平行。
​    由于向量 d 与向量 a 线性相关,并且 Q 点在 ΔABC上,可以得出以下方程,求解后即可得到向量 d 的坐标。
12.png

​    声明:本文转自【OpenGL ES】光栅化插值原理和射线拾取原理。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册