王思淼的博客

C语言 函数栈的工作原理原理

在工作过程中, 由于遇到了在C++与C语言混用的场景中, 使用longjmp进行跳转时, 出现栈溢出的问题. 因此, 对函数栈的工作原理和longjmp的原理和实现进行了学习. 本文只记录函数栈的工作原理, longjmp的原理和实现将在后续文章中记录. 函数栈的工作原理 函数栈是一个后进先出(LIFO)的数据结构, 用于存储函数调用过程中的局部变量和函数返回地址. 当一个函数被调用时,...

游戏开发框架 单例模式

本笔记源自学习唐老师 Unity程序基础框架(重置版)时的总结. 单例模式 单例模式是一种设计模式, 确保一个类在应用程序中只有一个实例, 并提供全局访问点. 特点: 唯一实例: 确保某些全局管理类只有一个实例存在, 避免资源冲突. 方便访问: 提供全局访问点, 其他地方可以方便地访问它. 节省资源: 避免重复创建和销毁同一类实例. 单例模式基类 通过定义一个单例基...

GAMES101 第9讲 着色(环境光照, 法线贴图)

纹理不但可以用来表示物体的颜色, 还可以用来记录很多信息. 环境光照 将任何一个方向来源的光照都记录下来, 保存在一个贴图中, 这个贴图就是环境光照贴图. 环境光也可以记录在一个球面上, 这个球面就是环境光照球(Spherical Environment Map) 环境光球展开后可以得到如下的图象: 展开后, 我们可以看到, 在上下边缘部分, 会有较大的扭曲, 为了解决...

GAMES101 第9讲 着色(重心坐标插值, 纹理放大, 纹理缩小)

重心坐标插值 在之前的课程中, 提到了逐顶点着色和逐像素着色, 其中逐顶点着色是在顶点上计算颜色, 然后在三角形内部的像素上对颜色进行插值, 逐像素着色是在每个像素上计算颜色, 但是每个像素的法线也是通过插值得到的. 插值的原因, 内容和方法 重心坐标的计算是为了在三角形内部的像素上进行插值 插值的原因: 根据三角形顶点的属性, 可以通过插值得到三角形内部所有点的属性 插值...

GAMES101 第8讲 着色(着色频率, 实时渲染管线, 纹理映射)

着色频率 把颜色应用在一个面上, 应用在一个顶点上, 或者应用在一个像素上, 这些都是着色的频率. 通常来说, 着色的频率越高, 渲染的效果就越好, 但是性能也就越差. 其中: 如果在顶点上着色(例如图中在矩形的四个顶点上着色), 那么在矩形内部的像素就会使用顶点的颜色进行插值. 逐三角形着色 又叫 平面着色 Flat Shading 一个三角面内的颜色完全相同, 根据三角形的...

GAMES101 第6讲 光栅化(深度缓冲)

深度缓冲 画家算法 画家算法(Painter’s Algorithm): 从后往前绘制, 后绘制的像素会覆盖先绘制的像素 例如下图中, 从后往前绘制, 会先绘制远处的山脉, 再绘制草地, 草地会覆盖部分山脉的像素, 然后绘制树木, 树木会覆盖部分草地的像素, 也会覆盖部分山脉的像素: 但是画家算法有一个问题, 如果两个物体互相遮挡, 那么就会出现问题, 如下图所示: 深度缓...