摘要:
在投影变换视口变换后,需要对投影到屏幕上的平面三角形顶点属性进行线性插值,例如颜色,纹理,深度等。但对于投影前在3D空间的三角形来说,这个插值并不是线性的。下面来推导一下这个插值。 假设屏幕空间的三角形的三个顶点分别为$v_0,v_1,v_2$,$v_p$是位于三角形一边上的点$v_0 + t(v_ 阅读全文
摘要:
其实问题就是给定y方向的视域角$\alpha$,和视域的宽高比$r$,求投影矩阵。 我们首先假设投影平面距离摄像机的距离为$d$,视域的宽为$w$,高为$h$,近剪裁面距离摄像机的距离为$n$,远剪裁面距离摄像机的距离为$f$,那么首先有: $$ r= \frac{w}{h} $$ $$ tan\f 阅读全文
摘要:
顾名思义,观察矩阵的作用就是将一个点从 世界坐标系 转换到 观察坐标系 ,这个点的实际位置并不发生变化。参考 "上一篇文章" ,问题就转化成了,假设任意点$\vec p$,它在世界坐标系$W$下的坐标为$(x, y, z)$,求在观察坐标系$V$下的坐标$(x', y', z')$。套用公式,可得: 阅读全文
摘要:
总体来说可以概括为以下几个步骤: 1. 创建Device和Context 2. 创建SwapChain 3. 为BackBuffer创建View 4. 创建Depth/Stencil Buffer,并为之创建View 5. 将View绑定到Context中 6. 设置Viewport 创建Devic 阅读全文
摘要:
什么是仿射变换? 仿射变换定义为一个线性变换加上平移变换。即: $$ g(\vec v) = f(\vec v) + \vec b $$ 仿射变换的矩阵表示 $$ g(\vec v) = [x, y, z] \cdot \begin{bmatrix} f(\vec i) \\ f(\vec j) \ 阅读全文
摘要:
什么是线性变换? 假设有一数学函数$f$,使得三维向量$\vec v=(x,y,z)$,有$f(\vec v) = f(x, y, z) = (x',y',z')$。那么,如果$f$满足: 1. $f(\vec u + \vec v) = f(\vec u) + f(\vec v)$ 2. $f(k 阅读全文