从线性代数到unity mvp矩阵

坐标变换:矩阵是一种线性空间变换的描述(矩阵的列向量,是坐标变换后的基向量)。

如:  \begin{bmatrix} 1&3 \\ -2&0 \end{bmatrix}\begin{bmatrix} -1\\ 2 \end{bmatrix} = \begin{bmatrix} 5\\ 2 \end{bmatrix}

如上图,即向量(-1,2)在经过由基底x轴:(1, -2) ,y轴:(3, 0)组成的矩阵变换后得到向量(5,2)

实际上就是-1倍的x轴:(1, -2)加上2倍的y轴:(3, 0)

以基底作为列向量组成的矩阵可以表示旋转、缩放变换。

下面说一个最简单的二维空间变换实例:

假设:BAC是一个以AC:(2,2)作为X轴,AB:(-2,2)作为Y轴的模型空间,那么点D在模型空间下的坐标就是(0.5, 0.5)。

我们现在把点D变换到世界空间下的坐标

1.可以看出点D在世界空间下,基于点A往AC方向走了0.5倍的AC,在AB方向走了0.5倍的AB。

用向量计算就是:0.5 · AC + 0.5 · AB = (0,2)。

那么点D相对于点A在世界空间下偏移了(0,2)。

用矩阵计算就是:\begin{bmatrix} 2 & -2\\ 2& 2 \end{bmatrix}\cdot \begin{bmatrix} 0.5\\ 0.5 \end{bmatrix}=\begin{bmatrix} 0\\ 2 \end{bmatrix}。这个矩阵就是一个缩放、旋转组合的变换矩阵。

2.这时候我们知道了点D比点A在世界空间下是偏移了(0,2),我们又知道点A的世界坐标是(-3,2)。

那么D的世界坐标就是(-3,2) + (0, 2) = (-3, 4),

即:\begin{bmatrix} 1 & 0& -3\\ 0& 1& 2\\ 0& 0& 1 \end{bmatrix}\cdot \begin{bmatrix} 0 \\ 2 \\ 1 \end{bmatrix}=\begin{bmatrix} -3\\ 4\\ 1 \end{bmatrix}  。最左边的这个3X3矩阵就是平移变换矩阵。

最后从上面可以看出,我们必须先计算缩放、旋转矩阵的变换,再计算平移矩阵的变换。因为一开始的点(0.5, 0.5)是模型空间的坐标,而平移的坐标是世界空间下的坐标,两者并不在一个空间维度下,直接平移是不匹配的。只能先通过缩放、旋转矩阵变换之后得到的世界空间下的偏移值才能用坐标A来进行世界空间的平移变换。

逆矩阵:

逆矩阵就是矩阵的逆变换

若有矩阵A,则A的逆矩阵为:A^{-1}。有性质A^{}\cdot A^{-1} = E,其中E为单位矩阵。

若有向量i经过A矩阵变换后得到jA^{}\cdot i = j。又因为矩阵乘法结合律。

则有:A^{-1}\cdot j = A^{-1}\cdot A\cdot i = E\cdot i = i,即j经过A矩阵的逆变换会变回i

四维空间:

        2X2的矩阵代表二维空甲的线性变换,而3X3矩阵则可以表示一个三维空间的变换。

        在三维空间中,将向量 u 变换到向量 v,如果该变换是一个线性变换,一般可以使用一个不依赖于 u、v 的 3x3 的矩阵描述,即 A · u = v,其中 A 是描述该线性变换的变换矩阵。但是,并不是所有线性变换都能使用 3x3 矩阵描述,如:平移变换和对称变换,对于这些变换,需要将空间扩展到四维空间中,再使用 4x4 矩阵描述。这里注意,平移变换对向量来讲是没有意义的,因为无论如何平移,向量都是一样的,平移变换只对坐标点有意义。

        Unity 模型变换主要有平移、旋转、缩放、对称,其中旋转和缩放变换可以使用 3x3 矩阵描述,平移和对称变换必须使用 4x4 矩阵描述,为了统一描述这些变换,将三维空间扩展到四维空间中,扩展方法如下:

三维空间中的坐标原点 [0, 0, 0]' 映射到四维空间中的 [0, 0, 0, 1]' 点;
三维空间中的 x、y、z 轴正方向单位向量 [1, 0, 0]'、[0, 1, 0]'、[0, 0, 1]' 分别映射到四维空间中的 [1, 0, 0, 0]'、 [0, 1, 0, 0]'、 [0, 0, 1, 0]' 向量;
新添加的 w 轴 正方向单位向量为 [0, 0, 0, 1]'。
        注意:三维空间中的原点 [0, 0, 0]' 并没有映射到四维空间中的原点 [0, 0, 0, 0]‘,而是映射到 [0, 0, 0, 1]’。

         由以上空间映射关系可知:

三维空间中的任意点 [x, y, z]',对应的四维空间坐标为:[x, y, z, 1]';
三维空间中的任意向量 [x, y, z]',对应的四维空间坐标为:[x, y, z, 0]'。

为什么这样做?

举个例子:

1:对点(1, 1, 1)进行平移变换:

\begin{bmatrix} 1 & 0& 0& 2\\ 0& 1& 0 & 3\\ 0& 0& 1& 4\\ 0& 0& 0 & 1 \end{bmatrix}  \begin{bmatrix} 1\\ 1\\ 1\\ 1 \end{bmatrix} = \begin{bmatrix} 3\\ 4\\ 5\\ 1 \end{bmatrix} 

2:对向量(1, 1, 1)进行平移变换:

\begin{bmatrix} 1 & 0& 0& 2\\ 0& 1& 0 & 3\\ 0& 0& 1& 4\\ 0& 0& 0 & 1 \end{bmatrix}  \begin{bmatrix} 1\\ 1\\ 1\\ 0 \end{bmatrix} = \begin{bmatrix} 1\\ 1\\ 1\\ 0 \end{bmatrix}

左手坐标系与右手坐标系:

      Unity 局部空间、世界空间、裁剪空间、屏幕空间都采用左手坐标系,只有观察空间采用右手坐标系

左右手坐标系除了坐标系朝向(旋向性)不同,还存在以下差异: 

左手坐标系下旋转正方向的定义遵循左手法则,右手坐标系下旋转正方向的定义遵循右手法则;
左手坐标系下向量叉乘遵循左手法则,右手坐标系下向量叉乘遵循右手法则。
原文链接:https://blog.csdn.net/m0_37602827/article/details/129036096

MVP矩阵的构成:
        MVP矩阵顾名思义,它是由M,V,P三个矩阵组够成的矩阵,其中M为模型矩阵,V为视图矩阵,P为投影矩阵。M矩阵用来将物体顶点在模型空间下的坐标转换为在世界空间下的坐标,V矩阵用来将物体顶点在世界空间下的坐标转换为视图空间下的坐标。P矩阵用来将物体顶点在视图空间的坐标转换为裁剪空间的坐标。M矩阵包括平移矩阵、旋转矩阵、缩放矩阵。V矩阵包括旋转矩阵,平移矩阵。P矩阵则包括正交投影矩阵和透视投影矩阵。

M矩阵

已知:

模型空间坐标原点在世界空间的位置

模型空间坐标系在世界空间的旋转信息

模型空间坐标系在世界空间的缩放信息

有了这几个已知量,根据世界空间的相对位置,相对旋转和相对缩放信息,很容易得到模型变换的矩阵,也就是三个三维空间下的基础变换矩阵,从左至右依次为[平移]*[旋转]*[缩放]

实例:

为了更直观,我们直接用基底来组成旋转、缩放变换矩阵,不用角度了。实际上基底可以用旋转角度和缩放计算出来。

如上图,模型空间(左手坐标系)是由Xm,Ym,Zm三个基底组成的。现在我们需要坐标A变换到世界空间。

(由于上图的世界空间是采用的是右手坐标系,为了切合unity转换成左手坐标系,上图的z轴正方向其实是向下的)

已知:

1:三个基底在世界空间下的向量数值:

Xm:\begin{bmatrix} -1\\ 1\\ 0 \end{bmatrix}    Ym:\begin{bmatrix} -1\\ -1\\ 0 \end{bmatrix}  Zm:\begin{bmatrix} 0\\ 0\\ 1.41 \end{bmatrix}

2:基底原点的世界坐标:

B:\begin{bmatrix} 1\\ -1\\ 0 \end{bmatrix}

3:坐标A在模型空间下的坐标:

A:\begin{bmatrix} 0.5\\ 0\\ -1/1.41 \end{bmatrix}

首先:

1:把基底转换成四维向量(补0):

Xm:\begin{bmatrix} -1\\ 1\\ 0 \\0\end{bmatrix}    Ym:\begin{bmatrix} -1\\ -1\\ 0\\ 0 \end{bmatrix}  Zm:\begin{bmatrix} 0\\ 0\\ 1.41 \\ 0 \end{bmatrix}

2:把模型空间原点转换成四维坐标(补1):

B:\begin{bmatrix} 1\\ -1\\ 0 \\ 1\end{bmatrix}

3:把模型空间下的坐标A转换成四维坐标(补1):

A:\begin{bmatrix} 0.5\\ 0\\ -1/1.41 \\1 \end{bmatrix}

然后用三个基底组成旋转、缩放变换矩阵:

\begin{bmatrix} -1 & -1&0 & 0\\ 1& -1& 0& 0\\ 0& 0 & 1.41 &0 \\ 0&0& 0 & 1 \end{bmatrix}

接着用模型空间原点B得到平移变换矩阵:

\begin{bmatrix} 1& 0& 0&1 \\ 0& 1& 0&-1 \\ 0& 0 & 1 & 0\\ 0& 0 & 0& 1 \end{bmatrix}

最后把上面的平移矩阵和缩放旋转矩阵组成矩阵M然后与A相乘(注意:先计算缩放旋转,再计算平移),则可以把坐标A由模型空间变换到世界空间

M:\begin{bmatrix} 1& 0& 0&1 \\ 0& 1& 0&-1 \\ 0& 0 & 1 & 0\\ 0& 0 & 0& 1 \end{bmatrix}\cdot \begin{bmatrix} -1 & -1&0 & 0\\ 1& -1& 0& 0\\ 0& 0 & 1.41 &0 \\ 0&0& 0 & 1 \end{bmatrix} \cdot \begin{bmatrix} 0.5\\ 0\\ -1/1.41\\ 1 \end{bmatrix}=\begin{bmatrix} 0.5\\ -0.5\\ -1\\ 1 \end{bmatrix}

插入知识点:关于正交矩阵:

正交矩阵的基底两两互相垂直的单位向量(点积为0)。

有推论:正交矩阵的转置矩阵等于其逆矩阵

证明:

为什么正交矩阵的转置矩阵是其逆矩阵-CSDN博客

V矩阵:

从上面的实例已经可以知道模型空间下的坐标变换到世界空间需要经过缩放旋转变换,再进行平移变换,而这里需要把坐标点从世界空间变换到视图空间,则需要先反向进行平移变换,再反向进行旋转变换。因为旋转变换矩阵是正交矩阵,所以逆矩阵就是矩阵的转置。在Unity中,观察空间中使用的是右手系,与世界空间中的左手系z轴方向相反,所以最后需要对z轴反向(如果以基底来组成缩放旋转矩阵的话,可以忽略这个z轴取反,因为基底本身已经取反了)。

 实例:

为了更直观,我们直接用基底来组成旋转变换矩阵,不用角度了。实际上基底是可以用旋转角度计算出来的。

图中的B是摄像机,Xm,Ym,Zm是视图空间的基底(右手坐标系)

(由于上图的世界空间是采用的是右手坐标系,为了切合unity转换成左手坐标系,上图的z轴正方向其实是向下的)

已知:

1:三个基底在世界空间下的向量数值:基底要进行归一化,正交矩阵的基底是单位向量

Xm:\begin{bmatrix} -\frac{\sqrt{2}}{2}\\ \frac{\sqrt{2}}{2}\\ 0 \end{bmatrix}    Ym:\begin{bmatrix} - \frac{\sqrt{2}}{2}\\ -\frac{\sqrt{2}}{2}\\ 0 \end{bmatrix}  Zm:\begin{bmatrix} 0\\ 0\\ -1\end{bmatrix}

2:基底原点的世界坐标=>变成四维坐标:

B:\begin{bmatrix} 1\\ -1\\ 0 \end{bmatrix} => \begin{bmatrix} 1\\ -1\\ 0\\ 1 \end{bmatrix}

3:坐标A在世界空间下的坐标=>变成四维坐标:

A:\begin{bmatrix} 0.5\\ -0.5\\ -1 \end{bmatrix}=>\begin{bmatrix} 0.5\\ -0.5\\ -1\\1 \end{bmatrix}

首先用B组成平移矩阵:

\begin{bmatrix} 1 & 0 & 0 &1 \\ 0& 1& 0& -1\\ 0& 0& 1& 0\\ 0& 0& 0& 1 \end{bmatrix}

该矩阵可以把坐标从视图空间转换到世界空间,如果我们想要把坐标从世界空间转换到视图空间,则要取反:

\begin{bmatrix} 1 & 0 & 0 &-1 \\ 0& 1& 0& 1\\ 0& 0& 1& 0\\ 0& 0& 0& 1 \end{bmatrix}

然后把Xm,Ym,Zm组成3x3矩阵:

\begin{bmatrix} -\frac{\sqrt{2}}{2} & -\frac{\sqrt{2}}{2}&0 \\ \frac{\sqrt{2}}{2}& -\frac{\sqrt{2}}{2}& 0&\\ 0& 0 & -1\\ \end{bmatrix}

则该矩阵可以把视图空间下的向量变换到世界空间,若我们想把向量从世界空间变换到视图空间,则需要把该矩阵进行转置:

\begin{bmatrix} -\frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2}&0 \\ -\frac{\sqrt{2}}{2}& -\frac{\sqrt{2}}{2}& 0&\\ 0& 0 & -1\\ \end{bmatrix}

又因为正交矩阵的转置等于其逆矩阵,所以该矩阵可以把向量从世界空间变换到视图空间(逆变换)

然后我们把三维拓展成四维

\begin{bmatrix} -\frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2}&0 & 0\\ -\frac{\sqrt{2}}{2}& -\frac{\sqrt{2}}{2}& 0& 0\\ 0& 0 & -1 &0 \\ 0&0& 0 & 1 \end{bmatrix}\cdot

接着把两个矩阵组合起来

\begin{bmatrix} -\frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2}&0 & 0\\ -\frac{\sqrt{2}}{2}& -\frac{\sqrt{2}}{2}& 0& 0\\ 0& 0 & -1 &0 \\ 0&0& 0 & 1 \end{bmatrix}\cdot\begin{bmatrix} 1 & 0 & 0 &-1 \\ 0& 1& 0& 1\\ 0& 0& 1& 0\\ 0& 0& 0& 1 \end{bmatrix}

最后进行变换计算就可以得到坐标点A在视图空间下的坐标了:

\begin{bmatrix} -\frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2}&0 & 0\\ -\frac{\sqrt{2}}{2}& -\frac{\sqrt{2}}{2}& 0& 0\\ 0& 0 & -1 &0 \\ 0&0& 0 & 1 \end{bmatrix}\cdot\begin{bmatrix} 1 & 0 & 0 &-1 \\ 0& 1& 0& 1\\ 0& 0& 1& 0\\ 0& 0& 0& 1 \end{bmatrix}\cdot \begin{bmatrix} 0.5\\ -0.5\\ -1\\ 1 \end{bmatrix}=\begin{bmatrix} -\frac{\sqrt{2}}{2} & \frac{\sqrt{2}}{2}&0 & 0\\ -\frac{\sqrt{2}}{2}& -\frac{\sqrt{2}}{2}& 0& 0\\ 0& 0 & -1 &0 \\ 0&0& 0 & 1 \end{bmatrix}\cdot\begin{bmatrix} -0.5\\ 0.5\\ -1\\ 1 \end{bmatrix}=\begin{bmatrix} \frac{\sqrt{2}}{2}\\ 0\\ 1\\ 1 \end{bmatrix}

P矩阵:

以下内容转载自[计算机图形学]MVP变换(前瞻预习/复习回顾)_图形学wmp矩阵-CSDN博客

投影矩阵分为正交投影矩阵和透视投影矩阵,先做透视投影,再做正交投影。

(1)透视投影和正交投影的区别:

左:透视投影 右:正交投影

简单的说,

透视投影符合我们人眼的视觉也就是近大远小,平行线远处相交

正交投影不改变大小,没有近大远小,且平行线永远平行。

(2)透视投影矩阵:
前面我们说了我们要先做透视投影矩阵再做正交投影矩阵,而透视投影矩阵实际上是把我们前面说的视锥,也就是四棱台压缩成正交投影中的长方体的样子的过程。这是一个相当复杂的变换过程,但有几点我们是可以根据经验直接确定的。

首先,规定近平面和远平面也就是上图所写的Near clip plane和Far clip plane。

然后,我们发现当进行压缩时,近平面的坐标是不变的,而远平面的中心点不变。

那么我们总体的过程就是先挤压远平面到和近平面相同的大小,再进行正交投影。


那么我们假设如上图规定近平面和远平面一点的坐标分别为(x',y',z',1)和(x,y,z,1)

根据相似三角形性质有:\begin{bmatrix} x'\\ y'\\ z'\\ 1 \end{bmatrix}=\begin{bmatrix}nx/z \\ny/z\\n \\1 \end{bmatrix}

这里可以看出来x‘与x和z都有关系,所以x‘和x之间不是线性关系,那么我们就无法通过线性变换(矩阵)来让x变换到x‘,为了让x和x‘之间变成线性关系,我们乘以z即\begin{bmatrix}nx/z \\ny/z\\n \\1 \end{bmatrix}\cdot z =\begin{bmatrix}nx \\ny\\nz \\z \end{bmatrix}

根据齐次坐标可知,我们都乘以z,坐标表示的在空间的位置是不变的。

那么我们现在需要找出什么样的矩阵可以把\begin{bmatrix}x \\y\\z \\1 \end{bmatrix}变成\begin{bmatrix}nx \\ny\\nz \\z \end{bmatrix}


到了这一步我们可以根据变换后的坐标写出该4X4矩阵的1,2,4行,那么只剩第三行没有解决如上图。

这里就需要用到我们前面提到的判断,我们虽然不知道常规点是怎么动的但是我们可以找特殊点,而特殊点一定符合规律,通过前面我们可知,近平面上的点不变,远平面的中心点不变。

那么先将近平面的点坐标带入我们刚才得到的未知量方程,得到如下图:


将我们的矩阵第三行未知量分别设为(0,0,A,B),因为n的平方和x,y没有关系。再根据近平面的点列方程可得如下图:(远平面同理,如下图第二个公式)(f是远平面z值)


最终可得到关于A,B的两个方程,n,f分别为近平面到摄像机的距离和远平面到摄像机的距离为已知量。

两个方程,两个未知数,可解,可得:如下图:


再把AB带回原矩阵即可得到透视投影矩阵


(3)正交投影矩阵:
经过透视投影矩阵,我们的视锥体(棱台)已经被挤压成视景体(长方体)了,且内部并不均匀(形成了近大远小的效果),下一步,就是进行正交投影。

我们先把视景体捏成一个正则立方体也就是,三个轴的坐标都在[-1,1]范围内的立方体,并且将中心移到原点,这样方便之后的各种操作计算。过程如下图:


规定了各个面的坐标,那么缩放矩阵(使用2做归一化处理),平移矩阵都很好得出,如下图

为什么要先平移再缩放?

让我们先看先缩放的情况:

ABCD坐标缩小一半之后会变成EFGH,明显不是我们想要的,当然后面只要再平移合适的距离也能得到结果,但是平移多少并不能直观的得出。

下面看先平移的情况:

直接平移视椎体中心点坐标的数值再缩放就能得到我们想要的结果。


而原本视锥体的中心店就在z轴上,所以x和y方向不需要平移。所以该矩阵还可以简化为如下图:


(4)投影矩阵合体:

到这里p矩阵的工作就完成了,把视窗空间下的(x,y,z,1)转换到裁剪空间下的(x'w,y'w,z'w,w)。其中x',y',z'∈[-1,1]。

齐次除法:

把(x'w,y'w,z'w,w)除以w之后可以得到(x',y',z',1),该过程称为齐次除法(或透视除法),得到的坐标称为归一化的设备坐标NDC)。

屏幕映射:
        经齐次除法后,将坐标的 x、y 值映射到屏幕像素位置,该过程称为屏幕映射。映射前 x、y 的值域为 [-1, 1],映射后 x 的值域为 [0, pixelWidth],y 的值域为 [0, pixelHeight],屏幕左下角坐标为 [0, 0],右上角坐标为 [pixelWidth, pixelHeight]。不同平台下,坐标原点可能不同。屏幕映射公式如下:

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

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

相关文章

【ShuQiHere】 如何理解渐进符号及其应用:大 O、大 Ω 和大 Θ

List item 📘 【ShuQiHere】 🚀 在算法复杂度分析中,渐进符号(Asymptotic Notation)是必不可少的工具,帮助我们估计算法的时间和空间需求,特别是当输入规模非常大时。这篇文章将为大家详细介绍…

Docker篇(安装容器)

目录 一、安装mysql容器 1. 拉取mysql镜像 2. 创建并运行容器 二、安装Tomcat容器 1. 拉取镜像 2. 创建并运行容器 三、安装Nginx容器 1. 拉取镜像 2. 创建并运行容器 四、安装Redis容器 1. 拉取镜像 2. 创建并运行容器 五、安装RabbitMQ 1. 拉取镜像 2. 创建并运…

Python酷库之旅-第三方库Pandas(187)

目录 一、用法精讲 866、pandas.Index.T属性 866-1、语法 866-2、参数 866-3、功能 866-4、返回值 866-5、说明 866-6、用法 866-6-1、数据准备 866-6-2、代码示例 866-6-3、结果输出 867、pandas.Index.memory_usage方法 867-1、语法 867-2、参数 867-3、功能 …

PostgreSQL 到 PostgreSQL 数据迁移同步

简述 PostgreSQL 是一个历史悠久且广泛使用的数据库,不仅具备标准的关系型数据库能力,还具有相当不错的复杂 SQL 执行能力。用户常常会将 PostgreSQL 应用于在线事务型业务,以及部分数据分析工作,所以 PostgreSQL 到 PostgreSQL …

JDK的下载

目录 JDK官网 Windows Ubantu 1.安装JDK 2.确定JDK版本 卸载OpenJDK Centos 1.下载JDK 2.安装JDK 3.验证JDK JDK官网 官网网址:Java Downloads | Oracle Windows 双击运⾏exe⽂件, 选择安装⽬录, 直⾄安装完成 Ubuntu 1.安装JDK 更新软件包 sudo apt u…

(56)MATLAB分析码间串扰信道的传递函数与频率响应

文章目录 前言一、3个存在码间串扰的信道二、信道特性仿真三、仿真结果四、迫零均衡器与MMSE均衡器仿真总结 前言 线性均衡器的性能完全取决于通信信道的特性。本文设计了三个不同传输特性的信道,给出了其传递函数系数,然后计算并绘制了各自的频率响应。…

etcd多实例配置

多实例进行配置,分别在多个不同端口进行监听,避免开启单机部署监听端口冲突; 查看go版本: go version 若没有go环境,则进行下载,解压至/usr/local后进行环境配置,编辑vim ~./bashrc vim ~./b…

029_Common_Plots_Matlab常见二维绘图

常用的二维绘图 常用绘图包括下面的种类: 线图, plot柱图, bar梯步图,stairstep误差棒图,errorbar极坐标图,polarplot跟图,stem散点图,scatter 这些命令都可以通过help xxx来查看…

NuGet Next发布,全新版私有化NuGet管理

NuGet Next发布,全新版私有化NuGet管理 NuGet Next是一款基于BaGet的一款私有化NuGet管理平台,我们对BaGet进行了扩展,并且提供了更多的功能。 NuGet 最新版开源私有化包管理,我们基于BaGet的基础之上增加了更多的功能&#xff…

STM32 从0开始系统学习5

目录 STM32 GPIO输入的四种模式 Practice And Usage 练习与封装 Detailed And Reference 更加具体的说明 输入浮空模式 输入上拉模式 输入下拉模式 模拟功能 我们下面聊一聊输入的事情,输入指的是我们的处理器从外部端口接受外设发过来的信号。在我们没有接…

PHP反序列化原生类字符串逃逸框架反序列化利用

PHP反序列化 概念 序列化的原因:为了解决开发中数据传输和数据解析的一个情况(类似于要发送一个椅子快递,不可能整个椅子打包发送,这是非常不方便的,所以就要对椅子进行序列化处理,让椅子分成很多部分在一起打包发送…

WonderWorld: Interactive 3D Scene Generation from a Single Image 论文解读

目录 一、概述 二、相关工作 1、新视图生成 2、单视图3D场景生成 3、视频生成 4、快速的3D场景表示 三、WonderWorld 1、FLAGS表示 2、引导深度扩散模块 3、单视角层次生成 4、基于几何的初始化 surfel表示 5、阶段一——生成3D场景部分 6、阶段二——用户交互控…

网络:IP分片和组装

个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C》《Linux》《网络》 《redis学习笔记》 文章目录 前言16位标识,3位标志,13位片偏移分片组装总结 前言 对于IP分片和组装的总结 当一个IP数据报的大小超过网络的MTU(最…

从0到1搭建flink程序-WordCount(图文/详细/mac)

目录 一、目标以及前置资料 1.1 目标 1.2 前置资料 二、实现 2.1 搭建流程 2.2 调试 参考 一、目标以及前置资料 1.1 目标 初步感受flink任务,从0到1快速搭建一个flink程序 1.2 前置资料 1、下载jdk:Mac 安装jdk_mac 安装jdk 1.8-CSDN博客 2、…

ctfshow——web(总结持续更新)

文章目录 1、基础知识部分2、php伪协议2.1 php://input协议2.2 data://text/plain协议 3、webshell连接工具3.1 蚁剑连接一句话木马 4、各个web中间件重要文件路径4.1 Nginx 5、sqlmap使用6、php特性6.1 md5加密漏洞 7、TOP 10漏洞7.1 SQL注入 1、基础知识部分 识别base64编码…

FineReport 倒计时特效

1、代码准备 将下面的代码生成对应文件 1.1、zzsc.js 这段代码是一个JavaScript计时器脚本,用于计算从当前时间到第二天午夜(即0点)之间的时间差,并将这个时间差显示在网页上的特定元素中。具体来说,它会实时更新页…

【Linux】编辑器vim 与 编译器gcc/g++

目录 一、编辑器vim: 1、对vim初步理解: 2、vim的模式: 3、进入与退出: 4、vim命令模式下的指令集: 移动光标: 删除: cv: 撤销: 其他: 5、vim底行模…

虚拟机 Ubuntu 扩容

文章目录 一、Vmware 重新分配 Ubuntu 空间二、Ubuntu 扩容分区 一、Vmware 重新分配 Ubuntu 空间 先打开 Vmware ,选择要重新分配空间的虚拟机 点击 编辑虚拟机设置 ,再点击 硬盘 ,再点击 扩展 选择预计扩展的空间,然后点击 扩展…

【搜索引擎】俄罗斯搜索引擎yandex

俄罗斯搜索引擎yandex 1997年,俄罗斯搜索引擎Yandex(俄语意为:语言目录)首次上线,已发展成为全球第四大搜索引擎和第二大非英语搜索引擎 https://yandex.com/

【深度学习】CrossEntropyLoss需要手动softmax吗?

【深度学习】CrossEntropyLoss需要手动softmax吗? 问题:CrossEntropyLoss需要手动softmax吗?答案:不需要官方文档代码解释 问题:CrossEntropyLoss需要手动softmax吗? 之前用 pytorch 实现自己的网络时&…