雅可比矩阵及应用

  雅可比矩阵   假设某函数 \mathbb{R}^n 需要映射到另一个空间 \mathbb{R}^m 中,雅克比矩阵就是从 \mathbb{R}^n 到 \mathbb{R}^m 的线性映射,其重要意义在于它表现出了多维对多维空间的一个最佳线性估计。因此,雅可比矩阵类似于单变量函数中的导数。事实上,在单变量函数中,导数就是 1\times 1 阶的雅可比矩阵。   注意,以下的推导的矩阵都是行 […]

抗锯齿技术之FXAA

  如果要平滑地显示一条直线,理论上需要无限大的分辨率。当前显示器的效果还远远没有达到匹配眼睛分辨率的效果。如果想要在网格屏幕上捕捉一条直线,在直线跨像素时,必然会产生一个极小的阶梯型效果。如果多个阶梯出现在同一个区域,眼睛马上就能发现错误。为了尽可能减少这种跳变的影响,出现了抗锯齿技术(anti-aliasing)。   当前已经开发出了多种抗锯齿技术。最 […]

浮点数误差分析及补偿

    在各种渲染引擎中使用浮点数几乎可以肯定一定会产生浮点数误差,而渲染引擎的大量计算量也不允许使用其他特别高精度的浮点数,因而需要一定程度的精度补偿。事实上,浮点数并不适合用于精确计算,而适合进行科学计算。 float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字; double […]

指针和REF

      指针继承自 C 语言,也是操作数据最灵活最强大的武器;REF,中文名为引用,则可以认为是指针的一个“语法糖”。REF 使用起来更方便、更安全、也更可靠,它和指针一样也具有多态性。   指针   指针可以看成一个复合类型,它由 A 和 T 组成,A 表示指针指向的物理地址, T 表示地址包含的类型。通常来说,A 在运行 […]

折射光线方向公式推导

    先给出结论:折射方向公式: t={η_1\over η_2}i+({η_1\over η_2}cos\theta_i-\sqrt{1-sin^2\theta_t})n   要注意的是,这个向量不是单位向量,使用前请自行单位化。   下面开始证明,根据 Snell 法则: {sin\theta_1 \over sin\ […]

可编辑网格的存储方式

  渲染时使用的数据结构往往是数组,因为它节约存储空间而且方便索引进行随机访问。但是在模型编辑软件如 Blender、MAYA 中就不能使用数组,取而代之的是类似于链表的数据结构。   为了方便修改,网格信息时一般不只存储顶点信息,往往还会保存连接信息(mesh connectivity)。 邻接三角形结构     这次要讨论的 […]

OpenGL 中的 mipmap

  mipmap   使用 mipmap 时,OpenGL 根据被映射对象的大小(单位是像素),自动决定使用纹理图的哪个分辨率级别。mipmap 表示着纹理的层次细节(LOD),随着对象图像变小,使用纹理图的大小将减少。mipmap 需要一些额外的计算和纹理存储空间(大概三分之一),但这些消耗是值得的,如果不使用 mipmap ,那么映射到更小图像上的纹理将随着物体移动而闪烁。   Op […]

计算机图形学中的数学知识

  计算机图形学需要的数学基础,取决于希望进入这个领域的深度。如果单纯使用现成的图形引擎或者编辑程序,几乎不需要太多专门的数学知识;如果想要系统学习计算机图形学,那么需要学习代数、三角函数和线性代数;如果需要成为图形学的研究者,那么就应该持续不懈地学习数学。计算机图形学一些领域并不太关心数学思想。但是,如果愿意学习新的数学思想,那么将会有更多选择的自由。  &emsp […]

C++中的RTTI架构

      在 C++ 中,默认提供的运行时类型信息(Run-Time Type Information, RTTI)主要有三个目的: 支持 typeid 操作符 匹配以及捕获抛出的异常(异常分配器) 实现 dynamic_cast 操作符     dynamic_cast 只关注于继承多态的相关转换操作,而 typeid 以及 […]

蒙特卡罗综述

    许多事情在生活中太难以评估,特别是当它涉及非常大的数字。例如,计算一个国家的成年人口的平均高度,将需要测量每个人的身高,身高值相加除以总人数。这明显是不可能的,这种任务需要很长的时间,非常难以求解。在这种情况下,可以做的是取一个样本的人口并计算其平均高度,以此来估算整个国家人口的平均高度。这是统计学中最简单的概念。   需要特别提醒的是,在这个例子中,随机选取的人的身高是随机数, […]