当前位置: 首页 > news >正文

佛山网站建设公司排行百度模拟点击

佛山网站建设公司排行,百度模拟点击,长沙形友网络科技有限公司,wordpress 适合外贸站CG相机模型 在图形学中最常用的相机模型的原理和小孔成像是类似的。 不同之处在于#xff0c;如上图#xff0c;小孔成像得到的图像是倒立的#xff0c;但是我们希望得到的图像是正向的#xff0c;因此#xff0c;我们选择小孔前成像。 从 3D 到 2D 的投影#xff0c;…CG相机模型 在图形学中最常用的相机模型的原理和小孔成像是类似的。 不同之处在于如上图小孔成像得到的图像是倒立的但是我们希望得到的图像是正向的因此我们选择小孔前成像。 从 3D 到 2D 的投影就是根据 3D 物体的坐标计算其投影到 2D 成像平面上的坐标。对于一个已有的相机而言只有在恰当位置范围内的 3D 物体才可能投影到成像平面上。这个恰当范围跟成像平面的大小以及相机中心到平面距离等因素有关。 在图形学中有一个专门的模型来定义这个范围 上图这个形似棱锥的模型就是相机的可视范围。其中有两个重要的概念Near clipping plane 和 Far clipping plane。 Near clipping plane 是相机前方的平面也就是成像平面Far clipping plane 是更远处的平面限制了相机最远可视的范围它们都与相机的 z 轴垂直。在这两个平面之间的空间就是相机的可视范围。在这个范围内的物体才能投影到相机的成像平面上。在图形学中这个可视范围被称为视锥体 (Viewing Frustum)。 在真实的相机中Far clipping plane 一般是无限远的但在图形学中为了简化计算一般将其设置为有限的距离。 3D坐标到2D坐标 上图是一个典型的物体投影到屏幕上的过程。我们假设已经获得了物体在世界坐标系中的坐标在世界坐标系转换到图像坐标系的过程中涉及以下过程。 世界坐标系转换到相机坐标系 对三维物体投影的第一步是将三维物体从世界坐标系转换到以相机为中心的坐标系统这样方便后续的投影计算。 相机坐标系是以相机为中心的坐标系 (也叫 eye coordinates)由于相机和世界坐标系的原点可能不同且其坐标轴方向和世界坐标系可能不同因此世界坐标系和相机坐标系的转换一般涉及旋转平移两项操作。 在图形学中通常使用齐次坐标并配合 4x4 的矩阵来完成两个坐标系统的转换。 相机坐标系到屏幕坐标系 获得物体的相机坐标系Near clipping plane 和 Far clipping plane 之间后接下来就可以计算物体投影到成像平面上的坐标。 这个过程可以根据相似三角形的原理计算得出。 如上图所示假设相机的中心在 A 点三维物体在 C 点其在成像平面上的投影为 C’。 由于我们已经获得了物体在相机坐标系中的坐标因此可以计算出 AB、BC 的长度。而 AB’、B’C’ 的长度可以根据相似三角形的原理计算出来 (上图假设相机焦距是 1但实际情况中不做限制我们用 Z n e a r Z_{near} Znear​表示) B C A B B ′ C ′ A B ′ \frac{BC}{AB} \frac{BC}{AB} ABBC​AB′B′C′​ 即 P . y ∣ P . z ∣ P ′ . y Z n e a r P ′ . y Z n e a r ∗ P . y ∣ P . z ∣ \frac{P.y}{|P.z|} \frac{P.y}{Z_{near}} \\ P.y \frac{Z_{near}*P.y}{|P.z|} ∣P.z∣P.y​Znear​P′.y​P′.y∣P.z∣Znear​∗P.y​ 同样的可以算出 : P ′ . x Z n e a r ∗ P . x ∣ P . z ∣ P.x \frac{Z_{near}*P.x}{|P.z|} P′.x∣P.z∣Znear​∗P.x​ 对于 z 轴坐标来说由于 Near clipping plane 和 z 轴是垂直的因此所有投影到成像平面上的点z 坐标都是相同的。而事实上在投影到 2D 坐标后z 轴坐标已经没有意义了因此可以直接忽略。 从 P ′ . x P.x P′.x 和 P ′ . y P.y P′.y 可以发现投影到成像平面上的坐标其 x 和 y 坐标都是除以 z 坐标得到的。因此这种投影变换也被称为 z divide 或者 perspective divide。这也是透视投影的特点投影到成像平面上的坐标其 x 和 y 坐标都是 与 z 坐标绝对值成反比的。也因此物体越远其在屏幕上的大小越小。 屏幕坐标系到图像坐标系 转换到屏幕坐标系后我们理论上已经获得了物体的 2D 坐标但这个坐标并不是最终图像上的坐标。 在第 2 步相机坐标系到屏幕坐标系的转换中不难发现屏幕坐标系的原点是在屏幕中心的但在图像坐标系中原点一般是在左上角或者左下角。因此要转换到图像坐标系还需要一步归一化的过程。 在不同的系统中图像坐标系的原点是存在差异的。比如有些系统中的图像原点位于左下角y 轴朝上但有些则反着来。而 NDC 坐标系是一个跟设备无关的坐标系统它将图像的 x/y/z 轴都统一归一化到 [0, 1]并规定了坐标轴方向 (在有些图形系统中也会将 x/y/z 轴归一化到 [-1, 1])如下图所示 (中间即是 NDC 坐标系)。 NDC 全称是 Normalized Device Coordinate也即归一化的设备坐标系。这是从屏幕坐标系转换到图像坐标系的中间媒介。 用上图的例子来演示 屏幕坐标系 - NDC 坐标系 - 图像坐标系 (即上图的 raster 坐标系) 的转换过程。 假设 投影屏幕 长宽分别为 height、widthNDC 的原点在左下角y 轴朝上那么屏幕坐标系到 NDC 坐标系的转换公式为 P b d c . x P ′ . x w i d t h / 2 w i d t h P b d c . y P ′ . y h e i g h t / 2 h e i g h t P_{bdc}.x \frac{P.xwidth/2}{width} \\ P_{bdc}.y \frac{P.yheight/2}{height} Pbdc​.xwidthP′.xwidth/2​Pbdc​.yheightP′.yheight/2​ 假设图像大小为 image_height、image_width图像原点位于左上角y 轴朝下。那么NDC 坐标系到图像坐标系的转换公式为 P i m a g e . x P n d c . x ∗ i m a g e _ w i d t h P i m a g e . y ( 1 − P n d c . y ) ∗ i m a g e _ h e i g h t P_{image}.x P_{ndc}.x * image\_width \\ P_{image}.y (1-P_{ndc}.y) * image\_height Pimage​.xPndc​.x∗image_widthPimage​.y(1−Pndc​.y)∗image_height NDC 坐标系是连续的坐标系只有转换到图像坐标系才会对坐标进行取整操作。此外NDC 坐标系仍是三维坐标系不过在考虑投影的时候z 轴通常会被忽略 OpenGL 中NDC 坐标到 raster 图像坐标的转换过程也被称为 viewport transform 采用 NDC 坐标的好处是我们可以将 NDC 看作是一个通用的坐标系统并将不同系统的坐标统一起来。比如我们在将屏幕坐标系转换到图像坐标系时可以先换算到统一的 NDC 坐标系中再实现二者的相互转化。在 NDC 坐标系中进行处理的时候就不需要关心投影屏幕长宽、图像大小等信息了。 投影矩阵(Projection Matrix) 从上面三维坐标到二维坐标的转换过程中不难发现整个过程涉及步骤很多非常繁琐。为了简化计算在很多图形系统中会将物体从相机坐标系到 NDC 坐标系的过程用一个矩阵串联起来 (即投影矩阵)。 即完成所有操作总共需要两个矩阵世界坐标系和相机坐标系之间的变换矩阵、投影矩阵。 理解投影矩阵对后面 NeRF 中 NDC 坐标系统的推导至关重要。因此这里先详细介绍投影矩阵的由来并补充一些相关的数学知识。 不同坐标系统的转换 三维坐标转二维坐标的第一步就是将物体从世界坐标系转换到相机坐标系。 这一步在投影矩阵的求解中是不需要的。不过由于图形学中不同坐标系之间的转换是一个基本操作。 任何三维坐标系统都可以用三个互相垂直的坐标轴以及坐标原点来唯一确定。 这三个坐标轴在线性代数中也被称为基向量v{ v 1 , v 2 , v 3 v_1,v_2,v_3 v1​,v2​,v3​} 。通常情况下我们会用标准向量 e 1 [ 1 , 0 , 0 ] e_1[1,0,0] e1​[1,0,0]、 e 1 [ 0 , 1 , 0 ] e_1[0,1,0] e1​[0,1,0]、 e 1 [ 0 , 0 , 1 ] e_1[0,0,1] e1​[0,0,1] 来表示这三个坐标轴。不过事实上也可以随意定义只要它们线性无关可以表达出整个三维空间即可。 现在假设有两个不同的坐标系统 A 和 B。A 的基向量 v { v 1 , v 2 , v 3 } v\{v_1,v_2,v_3\} v{v1​,v2​,v3​}B 的基向量 u { u 1 , u 2 , u 3 } u\{u_1,u_2,u_3\} u{u1​,u2​,u3​} 。根据线性无关可以得出 u 1 γ 11 v 1 γ 12 γ 13 v 3 u 2 γ 21 v 1 γ 22 γ 23 v 3 u 3 γ 31 v 1 γ 32 γ 33 v 3 u_1 \gamma_{11}v_1\gamma_{12}\gamma_{13}v_3 \\ u_2 \gamma_{21}v_1\gamma_{22}\gamma_{23}v_3 \\ u_3 \gamma_{31}v_1\gamma_{32}\gamma_{33}v_3 \\ u1​γ11​v1​γ12​γ13​v3​u2​γ21​v1​γ22​γ23​v3​u3​γ31​v1​γ32​γ33​v3​ 用矩阵方程的形式表示为 u M v uMv uMv 对于三维空间中的某个点 w 来说均可以由 u、v 这两个坐标系表示 w a T v b T u wa^Tvb^Tu waTvbTu 其中的 a T a^T aT和 b T b^T bT 其实就是 w 在这两个坐标系统中的坐标。再结合公式 (2)可以得到 w b T u b T M v a T v wb^Tub^TMva^Tv wbTubTMvaTv 由此推出 a M T b , b ( M T ) − 1 a aM^Tb,b(M^T)^{-1}a aMTb,b(MT)−1a 到这里我们就发现对于点 w 来说想要从坐标系 A 转换到坐标系 B只需要对原坐标系 A 中的坐标乘以一个矩阵 M 即可。反之则是乘以矩阵的逆 ( M T ) − 1 (M^T)^{-1} (MT)−1。而这个矩阵M 可以通过两个坐标系统的基向量也就是坐标轴通过公式 (1) 的矩阵方程进行求解。 在将物体从世界坐标系转到相机坐标系的过程中只需要将这个矩阵应用到世界坐标系的物体坐标上就可以得到三维物体相对于相机坐标系的位置坐标。 这个过程中物体的实际位置没有发生任何改变只不过它的坐标从相对于世界坐标系变成相对于相机坐标系。 齐次坐标(Homogenous Coordinates) 上面提到的变换矩阵 M 存在一点不足那就是它只能表达旋转和缩放操作但无法表达平移。具体原因有很多资料已做了描述这里不再赘述。 在三维世界中旋转、缩放、平移是三个最基础的操作因此为了将平移也融入矩阵运算中人们引入了齐次坐标。 齐次坐标相比普通的三维坐标就是在 x、y、z 之外再引入一维 w:[x,y,z,w]。 同时我们规定 [x,y,z][x,y,z,w1]即当 w1 时齐次坐标可以等价于普通的三维坐标。 如果 w ≠ 1 w\neq1 w1 那换算方法是 [ x , y , z , w ] [ x w , y w , z w ] [x,y,z,w] [ \frac{x}{w},\frac{y}{w},\frac{z}{w}] [x,y,z,w][wx​,wy​,wz​]。 引入齐次坐标后变换矩阵自然也可以拓展成 4x4 的维度。 [ m 00 m 01 m 02 T x m 10 m 11 m 12 T y m 20 m 21 m 22 T z 0 0 0 1 ] ∗ [ x y z w 1 ] \left[ \begin{matrix} m_{00} m_{01} m_{02} T_x \\ m_{10} m_{11} m_{12} T_y \\ m_{20} m_{21} m_{22} T_z \\ 0 0 0 1 \end{matrix} \right] * \left[ \begin{matrix} x \\ y \\ z \\ w1 \end{matrix} \right] ​m00​m10​m20​0​m01​m11​m21​0​m02​m12​m22​0​Tx​Ty​Tz​1​ ​∗ ​xyzw1​ ​ 在 w1 的情况下矩阵第 4 列代表的就是 x、y、z 对应的平移量。 在之后投影矩阵的计算过程中齐次坐标的作用会更加明显。 投影矩阵推导 假设我们已经获得了物体在相机坐标系中的坐标 P e [ x e , y e , z e ] P_e[x_e,y_e,z_e] Pe​[xe​,ye​,ze​] (如果只有世界坐标系也可以通过前面所讲的不同坐标系统的变换来转换到相机坐标系这一步也属于相机外参标定的流程)。 将 P e P_e Pe​ 从相机坐标系转换到 NDC 的过程其实就是将 P e P_e Pe​ 从下图左边的棱锥转换到右边的立方体的过程 (这里使用 OpenGL 中的坐标习惯NDC 将 x/y/z 轴都归一化到 [-1, 1]) 假设 Near Clipping Plane 到相机中心的距离为 n。在 OpenGL 等图形库中由于相机坐标系的 z 轴是朝向屏幕外的因此 Near Clipping Plane 上点的 z 坐标均为 z -n。 再假设 Near Clipping Plane 平面上x 轴的屏幕范围是 [l,r]y 轴的屏幕范围是 [b,t]那么屏幕上四个边界点的坐标分别是(l,t,-n)、(r,t,-n)、(l,b,-n)、(r,b,-n) 首先将点 P e P_e Pe​ 投影到 Near Clipping Plane 上。根据上文的介绍这就是 z divide 的过程由此得到投影后的坐标为 x p n ∗ x e − z e y p n ∗ y e − z e x_p \frac{n*x_e}{-z_e} \\ y_p \frac{n*y_e}{-z_e} \\ xp​−ze​n∗xe​​yp​−ze​n∗ye​​ 在投影后需要考虑把超出屏幕的点裁剪掉不过这一步也可以放在后面进行我们先跳过。 接下来就是把投影后的点转换到 NDC 空间了这是归一化的过程把 [l,r] 和 [b,t] 这两个区间的数值归一化到 [-1,1] 。可以分两步完成。 先把 x p x_p xp​ 归一化到 [0,1] x p − l r − l \frac{x_p-l}{r-l} r−lxp​−l​。 再从 [0,1] 归一化到 [-1,1] 2 ∗ x p − l r − l − 1 2*\frac{x_p-l}{r-l}-1 2∗r−lxp​−l​−1。 x n d c 2 ∗ x p − l r − l − 1 2 x p r − l − r l r − l x_{ndc} 2 * \frac{x_p-l}{r-l}-1 \\ \frac{2x_p}{r-l} - \frac{rl}{r-l} xndc​2∗r−lxp​−l​−1r−l2xp​​−r−lrl​ 同理可得 y n d c y_{ndc} yndc​: y n d c 2 y p t − b − t b t − b y_{ndc} \frac{2y_p}{t-b} - \frac{tb}{t-b} yndc​t−b2yp​​−t−btb​ 由此我们已经得到了 NDC 中的 x/y 坐标将上述 y p , x p y_p,x_p yp​,xp​代入。完整的转换公式 x n d c 2 n ∗ x e − z e ∗ ( r − l ) − r l r − l y n d c 2 n ∗ y e − z e ∗ ( t − b ) − t b t − b x_{ndc} \frac{2n*x_e}{-z_e*(r-l)} - \frac{rl}{r-l} \\ y_{ndc} \frac{2n*y_e}{-z_e*(t-b)} - \frac{tb}{t-b} xndc​−ze​∗(r−l)2n∗xe​​−r−lrl​yndc​−ze​∗(t−b)2n∗ye​​−t−btb​ 这个公式看起来复杂但可以融入到齐次坐标中变成矩阵运算 [ x c y c z c w c ] [ 2 n r − l 0 r l r − l 0 0 2 n t − b t b t − b 0 0 0 A B 0 0 − 1 0 ] ∗ [ x e y e z e w e 1 ] \left[ \begin{matrix} x_c \\ y_c \\ z_c \\ w_c \end{matrix} \right ] \left[ \begin{matrix} \frac{2n}{r-l} 0 \frac{rl}{r-l} 0 \\ 0 \frac{2n}{t-b} \frac{tb}{t-b} 0 \\ 0 0 A B \\ 0 0 -1 0 \\ \end{matrix} \right] * \left[ \begin{matrix} x_e \\ y_e \\ z_e \\ w_e 1 \end{matrix} \right] ​xc​yc​zc​wc​​ ​ ​r−l2n​000​0t−b2n​00​r−lrl​t−btb​A−1​00B0​ ​∗ ​xe​ye​ze​we​1​ ​ 其中 A、B是待求解的参数。 以 x c x_c xc​ 为例计算过程如下 x c 2 n x e r − l r l r − l ∗ z e w c − z e x_c \frac{2nx_e}{r-l} \frac{rl}{r-l} * z_e \\ w_c -z_e xc​r−l2nxe​​r−lrl​∗ze​wc​−ze​ 由于 w ≠ 1 w\neq1 w1需要除去 w 才能得到最终的坐标 x n d c x c w c 2 n ∗ x e − z e ∗ ( r − l ) − r l r − l x_{ndc} \frac{x_c}{w_c} \\ \frac{2n*x_e}{-z_e*(r-l)} - \frac{rl}{r-l} xndc​wc​xc​​−ze​∗(r−l)2n∗xe​​−r−lrl​ 这样子求出的 x n d c x_{ndc} xndc​ 和上述的一致这就是使用齐次坐标的好处。 由于 r 和 l 是沿中心对称的即 l-r所以 r-l2rrl0。同理 t-b2ttb0 。所以矩阵可以简化为 [ n r 0 0 0 0 n t 0 0 0 0 A B 0 0 − 1 0 ] \left[ \begin{matrix} \frac{n}{r} 0 0 0 \\ 0 \frac{n}{t} 0 0 \\ 0 0 A B \\ 0 0 -1 0 \end{matrix} \right] ​rn​000​0tn​00​00A−1​00B0​ ​ 上面的矩阵中还缺失 z e z_e ze​ 对应的参数 A、B。由于 z 轴的计算和 x/y 无关因此矩阵第三行 x/y 对应的参数可以直接设为 0我们单独看A、B 如何求解。 由上面的矩阵可以算出 z n d c A ∗ z e B − z e z_{ndc} \frac{A*z_eB}{-z_e} zndc​−ze​A∗ze​B​ 假设 Far Clipping Plane 到相机中心的距离为 f 。那么 z 轴是从 [-n,-f] 归一化到 [-1,1]即 z e − n z_e-n ze​−n 时 z n d c − 1 z_{ndc} -1 zndc​−1 z e − f z_e-f ze​−f 时 z n d c 1 z_{ndc}1 zndc​1。由此可以得到两个等式 − A ∗ f B f 1 A ∗ n B n − 1 \frac{-A*fB}{f} 1 \\ \frac{A*nB}{n} -1 f−A∗fB​1nA∗nB​−1 解得: A − f n f − n A-\frac{fn}{f-n} A−f−nfn​ 、 B − − 2 f n f − n B-\frac{-2fn}{f-n} B−f−n−2fn​ 最终的矩阵为: [ n r 0 0 0 0 n t 0 0 0 0 − f n f − n − 2 f n f − n 0 0 − 1 0 ] \left[ \begin{matrix} \frac{n}{r} 0 0 0 \\ 0 \frac{n}{t} 0 0 \\ 0 0 -\frac{fn}{f-n} \frac{-2fn}{f-n} \\ 0 0 -1 0 \end{matrix} \right] ​rn​000​0tn​00​00−f−nfn​−1​00f−n−2fn​0​ ​ 这个矩阵即是所谓的投影矩阵它可以完成相机坐标系到 NDC 坐标系的转换。 对于投影点的坐标 ( x n d c , y n d c , z n d c ) (x_{ndc},y_{ndc},z_{ndc}) (xndc​,yndc​,zndc​)如果数值超出 [-1,1] 的范围就说明投影后的点超出了屏幕范围可以直接舍弃。 NeRF中的NDC ray space NeRF 中的坐标是以射线的形式表示otd其中 o 是射线起点d 是方向向量t 是射线长度。 所谓的 NDC ray space就是把这种射线形式表示的坐标从相机坐标系投影到 NDC 坐标系。因此转换的媒介仍然是投影矩阵 ( n r 0 0 0 0 n t 0 0 0 0 − f n f − n − 2 f n f − n 0 0 − 1 0 ) ( x y z 1 ) ( n r x n t y − f n f − n z − 2 f n f − n − z ) p r o j e c t → ( n r x − z n t y − z f n f − n − 2 f n f − n 1 − z ) \left( \begin{matrix} \frac{n}{r} 0 0 0 \\ 0 \frac{n}{t} 0 0 \\ 0 0 -\frac{fn}{f-n} \frac{-2fn}{f-n} \\ 0 0 -1 0 \end{matrix} \right) \left( \begin{matrix} x \\ y \\ z \\ 1 \end{matrix} \right) \left( \begin{matrix} \frac{n}{r} x\\ \frac{n}{t}y \\ -\frac{fn}{f-n}z - \frac{2fn}{f-n} \\ -z \end{matrix} \right) \\ project \rightarrow \left( \begin{matrix} \frac{n}{r} \frac{x}{-z}\\ \frac{n}{t}\frac{y}{-z} \\ \frac{fn}{f-n} - \frac{2fn}{f-n}\frac{1}{-z} \end{matrix} \right) ​rn​000​0tn​00​00−f−nfn​−1​00f−n−2fn​0​ ​ ​xyz1​ ​ ​rn​xtn​y−f−nfn​z−f−n2fn​−z​ ​project→ ​rn​−zx​tn​−zy​f−nfn​−f−n2fn​−z1​​ ​ 不过由于坐标的表达形式换了因此公式上也发生了一些变动 假设我们已经获得了相机坐标系中的坐标点 P e o t d P_eotd Pe​otd对应 x/y/z 轴的坐标分别为 (注意区分这里的 t 和投影平面的边界 t ) x e o x t ∗ d x y e o y t ∗ d y z e o z t ∗ d z x_e o_xt*d_x \\ y_e o_yt*d_y \\ z_e o_zt*d_z xe​ox​t∗dx​ye​oy​t∗dy​ze​oz​t∗dz​ 现在需要求出它在 NDC 坐标系中的投影坐标假设是 P ′ o ′ t ′ d ′ Potd P′o′t′d′ 那么根据投影矩阵 P e P_e Pe​ 转换到 P’ 的过程可以表示为 x ′ o x ′ t ′ ∗ d x ′ − n r ∗ o x t ∗ d x o z t ∗ d z y ′ o y ′ t ′ ∗ d y ′ − n t ∗ o y t ∗ d y o z t ∗ d z z ′ o z ′ t ′ ∗ d z ′ f n f − n 2 f n f − n ∗ 1 o z t ∗ d z x o_x t*d_x - \frac{n}{r} * \frac{o_xt*d_x}{o_zt*d_z} \\ y o_y t*d_y - \frac{n}{t} * \frac{o_yt*d_y}{o_zt*d_z} \\ z o_z t*d_z \frac{fn}{f-n} \frac{2fn}{f-n}*\frac{1}{o_zt*d_z} x′ox′​t′∗dx′​−rn​∗oz​t∗dz​ox​t∗dx​​y′oy′​t′∗dy′​−tn​∗oz​t∗dz​oy​t∗dy​​z′oz′​t′∗dz′​f−nfn​f−n2fn​∗oz​t∗dz​1​ 为了简洁一些假设 − n r a x -\frac{n}{r} a_x −rn​ax​ − n t a y -\frac{n}{t}a_y −tn​ay​ f n f − n a z \frac{fn}{f-n}a_z f−nfn​az​ 2 f n f − n b z \frac{2fn}{f-n} b_z f−n2fn​bz​。那么上面这堆复杂的式子可以简化为 x ′ a x ∗ o x t ∗ d x o z t ∗ d z y ′ a y ∗ o y t ∗ d y o z t ∗ d z z ′ a z ∗ b z o z t ∗ d z x a_x * \frac{o_xt*d_x}{o_zt*d_z} \\ y a_y * \frac{o_yt*d_y}{o_zt*d_z} \\ z a_z * \frac{b_z}{o_zt*d_z} x′ax​∗oz​t∗dz​ox​t∗dx​​y′ay​∗oz​t∗dz​oy​t∗dy​​z′az​∗oz​t∗dz​bz​​ 接下来就是要把 o’、t’、d’ 求解出来。 首先对于 o’ 来说可以直接通过 o 投影得到即让上述公式中 t为0 o ′ [ o x ′ o y ′ o z ′ ] [ a x ∗ o x o z a y ∗ o y o z a z b z o z ] o \left[ \begin{matrix} o_x \\ o_y \\ o_z \\ \end{matrix} \right] \left[ \begin{matrix} a_x * \frac{o_x}{o_z} \\ a_y * \frac{o_y}{o_z} \\ a_z\frac{b_z}{o_z} \end{matrix} \right] o′ ​ox′​oy′​oz′​​ ​ ​ax​∗oz​ox​​ay​∗oz​oy​​az​oz​bz​​​ ​ 在 o’确定后t‘*d’ 可以表示为 [ t ′ ∗ d x ′ t ′ ∗ d y ′ t ′ ∗ d z ′ ] [ x ′ − o x ′ y ′ − o y ′ y ′ − o z ′ ] \left[ \begin{matrix} t*d_x \\ t*d_y \\ t*d_z \end{matrix} \right] \left[ \begin{matrix} x-o_x \\ y-o_y \\ y-o_z \\ \end{matrix} \right] ​t′∗dx′​t′∗dy′​t′∗dz′​​ ​ ​x′−ox′​y′−oy′​y′−oz′​​ ​ 代入 o x ′ , o y ′ , o z ′ o_x,o_y,o_z ox′​,oy′​,oz′​ 并化简得到 解得 t ′ t ∗ d z o z t ∗ d z 1 − o z o z t ∗ d z d ′ [ a x ∗ ( d x d z − o x o z ) a y ∗ ( d y d z − o y o z ) − b z ∗ 1 o z ] t \frac{t*d_z}{o_zt*d_z} 1- \frac{o_z}{o_zt*d_z} \\ d \left[ \begin{matrix} a_x * (\frac{d_x}{d_z} - \frac{o_x}{o_z}) \\ a_y * (\frac{d_y}{d_z} - \frac{o_y}{o_z}) \\ -b_z*\frac{1}{o_z} \end{matrix} \right] t′oz​t∗dz​t∗dz​​1−oz​t∗dz​oz​​d′ ​ax​∗(dz​dx​​−oz​ox​​)ay​∗(dz​dy​​−oz​oy​​)−bz​∗oz​1​​ ​ 当 t 0时t’0当 t → ∞ t\rightarrow \infty t→∞ 时 t ′ → 1 t \rightarrow 1 t′→1。所以在相机坐标系对光线进行采样 ( t ∈ ( 0 , ∞ ) t\in(0,\infty) t∈(0,∞))就等价于在 NDC ray space 中对 t’ 在 [0,1] 范围内进行采样。 对于投影屏幕来说可以设定最后成像的图片长宽 (H*W) 和屏幕大小一致由于投影屏幕的中心即是坐标原点因此 rw/2 tH/2。再假定相机的焦距 f c a m f_{cam} fcam​ 和 Near Clipping Plane 到相机中心的距离相等即 n f c a m nf_{cam} nfcam​。则 a x , a y a_x,a_y ax​,ay​ 可以重新表示为 a x − f c a m W / 2 a y − f c a m H / 2 a_x -\frac{f_{cam}}{W/2} \\ a_y -\frac{f_{cam}}{H/2} \\ ax​−W/2fcam​​ay​−H/2fcam​​ (所谓焦距指的是相机光圈到成像平面的距离。但正如文章开始提到的由于图形学中的相机是模拟的所以并不存在焦距的概念。只是由于投影平面一般和 Near Clipping Plane 重合因此可以简单认为 f c a m n f_{cam} n fcam​n 但二者其实是不同的概念) 对于 a z a_z az​ 和 b z b_z bz​ 由于论文将 f 设定为无穷远因此 a z lim ⁡ f → ∞ f n f − n lim ⁡ f → ∞ ( 1 2 n f − n ) 1 a_z \lim_{f \rightarrow \infty} \frac{fn}{f-n} \\ \lim_{f \rightarrow \infty}(1\frac{2n}{f-n}) \\ 1 az​f→∞lim​f−nfn​f→∞lim​(1f−n2n​)1 b z lim ⁡ f → ∞ 2 f n f − n lim ⁡ f → ∞ 2 n 1 − n f 2 n b_z \lim_{f \rightarrow \infty} \frac{2fn}{f-n} \\ \lim_{f \rightarrow \infty} \frac{2n}{1-\frac{n}{f}} \\ 2n bz​f→∞lim​f−n2fn​f→∞lim​1−fn​2n​2n 可以得到最终的 o’ 和 d’ 在 t ∈ [ 0 , 1 ] t\ \in [0,1] t ∈[0,1] 内采样等价于相机坐标系中在 t ∈ [ 0 , ∞ ] t\in[0,\infty] t∈[0,∞] 范围内采样。但是如前文描述的相机坐标系的可视范围是从 Near Clipping Plane 到 Far Clipping Plane 之间也就是在 z ∈ [ − ∞ ] , − n z\in[-\infty],-n z∈[−∞],−n 这个区间。为了保证光线上每个采样点可见需要把光线起点对齐到 Near Clipping Plane 上。 即 o 沿光线方向移动 t n t_n tn​ 个单位后 o z − z o_z -z oz​−z表示成公式为 o z t n ∗ d z − n t n n o z d z o_zt_n*d_z -n \\ t_n \frac{no_z}{d_z} oz​tn​∗dz​−ntn​dz​noz​​ 因此移动后的光线起点为 o n o t n d o_n ot_n d on​otn​d
http://www.zqtcl.cn/news/273696/

相关文章:

  • 关于申请网站建设经费的请示网推推荐信
  • 网站建设请款报告网站服务器租用价格
  • 贵州建设网老网站手机网站建设运营方案
  • 网站方案范文唐山自助建站模板
  • 金华网站制作网站建设的功能需求
  • 用iis建立网站口碑营销案例分析
  • 注册网站要求线上设计师与线下设计师的区别
  • 个人备案 网站内容网站备案如何查询
  • 宿州科技网站建设百度网站外链发布平台
  • 织梦移动网站wordpress父文章显示不全
  • 游戏攻略网站怎么做网站开发需求确认书
  • 做高大上分析的网站电商到底干嘛的
  • 物流网站哪个好网络推广就找南昌莫非传媒
  • 查看网站空间企业网站管理系统介绍
  • 重庆市工程建设信息网新网站艺术品商城网站开发
  • 上海网站制作商wordpress改主题
  • 钰鸣厦门网站建设2023热点新闻事件
  • 网络营销的主要形式有建设网站免费搭建网站哪个好
  • 建一个网站需要哪些人aso是什么意思
  • 电商网站有哪些淘宝运营培训班哪里有
  • 网站开发网站制作太原优化排名推广
  • 佛山市网站开发桥西区建设局网站
  • 怎么制作网站应用云主机上传wordpress
  • flash网站代做马鞍山网站建设制作公司
  • 温州网站的优化wordpress 注册邮箱验证失败
  • php网站开发实例视频教程宁波seo运营推广平台排名
  • 网络营销网站开发设计公司网站推广营销
  • 2015年做那个网站致富wordpress最新模板
  • 做网站开发平台北京广告公司有哪些
  • 郑州企业建站系统模板兰州需要做网站的公司有哪些