计算机角色动画基础(GAMES105)の 笔记
»>课程主页传送门«<
KNOWLEDGE BASE / 01
显示 76 篇文章
»>课程主页传送门«<
「动画系统」由多个动画工具和编辑器构成,其将基于骨架的变形与基于变形的顶点变形相结合,从而构建出复杂的动画。该系统可以用于播放和混合预先准备好的动画序列让基本玩家运动显得更加真实,创建自定义特殊动作,如伸缩台阶和墙壁(使用动画蒙太奇),通过变形目标应用伤害效果或面部表情,使用骨架控制直接控制骨骼变 …
「委托」是一种泛型但类型安全的方式,可在 C++ 对象上调用成员函数。可使用委托动态绑定到任意对象的成员函数,之后在该对象上调用函数,即使调用程序不知对象类型也可进行操作。——虚幻官方文档 委托本质上是基于「观察者模式」的,也就是有「订阅」的行为,在委托中称为「绑定」。
比 bash 好看太多 这里使用的是 Ubuntu 安装 zsh 1sudo apt-get update && sudo apt-get upgrade -y 2sudo apt-get install zsh git curl -y 3sudo chsh -s ${which zsh} …
UObject 部分参考 InsideUE4 - UObject UObject 是 UE 中所有 C++ 对象的根基类,它是 UE 对象系统的重要组成部分。通过 UObject,UE 支持以下功能: 垃圾回收 引用更新 映象 序列化 默认属性变化自动更新 自动属性初始化 自动编辑器整合 运行时类 …
在 UE 中主要有三种字符串实现,分别是 FName,FText,FString。参考官方文档,对这三种实现进行深入剖析。 TCHAR C++ 支持两种字符集,ANSI 和 Unicode,实际对应的字符类型分别是 char 和 wchar_t。为了在不同平台环境下,使用不同的字符类型,UE …
之前在 GAMES101 中粗略提了一点,本文将对这个概念进行详细介绍。 渲染管线通过给定虚拟相机、3D 场景物体以及光源等场景要素来渲染出 2D 的图像。它的功能主要有两个:一是将物体世界坐标转变为屏幕空间坐标,二是为屏幕每个像素点进行着色。
在游戏中,涉及到碰撞检测的场景十分广泛——子弹打中角色、玩家移动时会被场景阻挡、……「如何高效地判断两个物体是否接触」,是游戏开发中必须思考的一个问题。虽然我们可以用 **AABB 包围盒(Axis-Aligned Bounding Boxes)**进行粗略的判断,但对于检测精度要求高的场 …
线段树是一种能够在 $O(\log n)$ 的时间复杂度下,动态维护区间信息的数据结构。
花了一晚上浅学了一下 Lua 脚本语言。作为 C++ Coder,对我而言,学一门新语言的最容易接受的方式就是将它和 C++ 进行对比,看看能不能实现 C++ 相关特性,或者额外的 C++ 做不到的事,观摩了网上的资料以及骚扰 GPT 后,彻底顿悟,写下心得。
翻阅网络资料两天后顿悟,遂写下心得。 参考资料 OI Wiki 知乎。并贴心地给出了构建过程的中间形态
»> Github 传送门«<
»>课程主页传送门«<
聊聊传输控制协议(TCP, Transmission Control Protocol)。
对于一个程序员而言,不仅仅要知道代码是怎么写的,还得知道你的源代码文件是怎么经过一系列操作变成可执行文件的。 参考神书《CSAPP》
标准模板库(Standard Template Library, STL)是一个 C++ 软件库,大量影响了 C++ 标准程序库但并非是其的一部分。其中包含 5 个组件,分别为迭代器、容器、容器适配器、算法、函数。
设计模式是软件设计中常见问题的典型解决方案。每个模式就像一张蓝图,可以通过对其进行定制来解决代码中的特定设计问题。
最后一个,也是最有挑战性的一项 coding 任务,是所有前置 lab 的知识综合。
现在开始进入文件系统的阶段。
这个 lab 就是对原先的并发控制进行优化。
这里要我们在软件层面实现数据包的收发操作。
现在进入操作系统的另一大特性:并发。
课上谈了个 COW 优化策略,这里就要具体实现了。
现在是,陷入内核时间。
番外篇,探究通过 shell 运行命令时,系统调用到底是个什么流程。
在本 lab 中,我们将进行页表机制的探索。
本 lab 要求我们进行系统调用代码的编写。
热身运动,实现一些 shell 命令。
个人的 面试经验整理。
为了保护操作系统中进程互不干扰,需要使用进程隔离技术,以防不同进程能够修改其他进程数据。但进程之间又不能完全隔离,需要一定的通信手段,于是开发出了**进程间通信(IPC, InterProcess Communication)**技术。
该问题是进程与线程的区别中的一个核心问题。
经典网络问题,贯穿整个计算机网络学习始终,每个阶段拿出来回味都有不同的感受与收获。
记录常用命令及对应的常用 option,方便查。
最长递增子序列(Longest Increasing Subsequence, LIS) 是非常经典的一个算法问题。
树状数组,也称作二叉索引树(Binary Indexed Tree)或 Fenwick 树。 它可以在 $O(\log n)$ 的时间复杂度下实现单点修改与区间查询两个操作。
本 Project 需要我们实现基于 MVCC 的事务模块。
本 Project 需要我们实现多个存储节点之间的管理。
本 Project 需要我们实现基础 Raft 算法。
本 Project 需要我们基于 badger 实现一个独立存储引擎。
CS144 lab 记录过程。
mutable 意为可变的,可以在非引用非常量非静态数据成员的声明中出现,允许被常量类对象修改。
久仰本书大名,花了若干时间入门 C++ 后,终于可以拜读一下这部经典作品。 当 C++ 律师!
异常,在操作系统中指的是指令内部出现的"内中断",如除数为零,地址越界等。这些情况在程序中也时有发生,C++ 为了应对偶发的程序异常事件,引入了异常处理机制。其基于三个关键字:try,throw 与 catch。
泛型编程是程序设计语言的一种风格或范式,允许程序员在编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型。在 C++ 里,这是与 OOP 并列的一大分支,通过模板来实现。
当表达式期望为 T 类型,而我们只能产生 S 类型的表达式时,就需要利用类型转换功能来满足需求。
众所周知,C++ 是一门与内存紧密相关的语言,本文就来聊聊 C++ 眼中的内存分配。
面向对象程序设计(Object-oriented programming, OOP)是种具有对象概念的程序编程典范,同时也是一种程序开发的抽象方针。
inline 只能用于修饰函数,能够解决一些频繁调用的小函数大量消耗栈内存的问题,是一种提高程序运行效率的手段。
static 是 C++ 中很常用的修饰符,它被用来控制变量的存储方式和可见性。
const 与 volatile 一起并称 CV 限定符,用于指定被声明对象或被命名类型的常量性或易变性。
有些 C++11 特性比较琐碎,单纯用一篇文章描述浪费,还有灌水嫌疑(bushi),于是整合到同一篇来讲。
正则表达式,又称规则表达式(Regular Expression,常简写为 regex、regexp 或 RE),是一种文本模式/规则,包括普通字符和特殊字符(元字符)。通常使用单个字符串来表示正则表达式 pattern,并匹配一系列符合模式 pattern 的字符串。
C++11 中新增了 default 与 delete 这俩关键字。请不要误会,这里的 delete 并不是与 new 搭配使用释放内存的那个,而是跟 default 相对的用于类成员函数声明的关键字。
委托构造函数与继承构造函数并非独立的新构造函数,而是 C++11 新增的用于提高编码效率的特性。
C++ 不像 Java 那样有虚拟机动态的管理内存,如果使用裸指针,在程序运行过程中可能就会出现内存泄漏等问题,然而这种问题其实都可以通过 C++11 引入的智能指针来解决。
C++11 新增了官方并发支持库,使得我们能够更好地在系统间移植程序,之前的 Boost 库等也就随之成为历史了。
在 C++11 中,可以直接在变量名后面用 {初始化列表} 来进行对象的初始化。
早年的 C++ 中已经出现了左值与右值这两个基本概念,但并不重要,平时也不怎么会用到。直到 C++11 引入了右值引用等新特性,这俩概念终于翻身做起了主人——它们是理解移动与转发语义的重要基础。
C++11 新增了若干使函数调用更加方便的特性。
虽然使用 auto 可以大大简化代码,但对于一些使用 dynamic_cast 的结果不能用 auto 作为占位符。将冗长的变量类型简化仍然是很头疼的一个问题,幸好 C++11 提供了用关键字 using 给类型起别名的特性,既能有效简化代码,又不影响可读性。
C++11引入了 auto 和 decltype 这两个关键字,从而可以在编译期就推导出变量或者表达式的类型,方便开发者编码也简化了代码。
C++ 程序常用 cin , cout 进行标准 I/O(从键盘读取数据,或输出数据到屏幕),当然也可以进行文件 I/O (基于文件的数据读写)。这些行为本质上都是进行数据传输——数据向水流一样从一个地方流到另一个地方。C++11 中,将这些操作统一为"流( stream )"。
接下来,需要完善对事务并发的支持。 »> LAB 主页传送门 «<
到目前为止,咱们已经完成了存储与索引部分的功能实现,接下来就进入执行层面的内容了。 »> LAB 主页传送门 «<
接下来开始存储与索引部分的实现。手撕 B+ 树! »> LAB 主页传送门 «<
从这个 lab 起,就正式开始构建本课程 bustub DBMS 数据库系统了。 »> LAB 主页传送门 «<
本项目与课程教学内容无关,仅作 C++ 水平检验用,但我在 code 过程中发现还是涉及到部分比较重要的知识点,故作记录。 »> LAB 主页传送门 «<
磨蹭 3 个月,神课分布式系统 MIT 6.824 终于完结了。学习这门课的起因是被同年 6 月份 pingCAP 训练营橄榄了,虽然同为 raft 算法,但工业级的实现显然要比教学级难更多。我对分布式的理解还是太浅,于是决心从基础打起,好好体会一下这门神课的洗礼。
对于单个副本组而言,所有机器存储共享同一存储空间,机器数量的增加并不会扩大存储能力。而当 kv 对数量不断增长时,副本组的存储能力成为瓶颈。 参考 Aurora 的做法,不妨将数据划分为多个片段,每个副本组负责分片(Shard)的一个子集。组内机器使用 Raft 来复制分片。此外还有一个分片控制 …
一份面向所有初学/入门 C 语言学生的指南。本文旨在帮助读者快速降低编(zuo)程(ti)难度,而不会涉及过多 C 语言语法知识。 上课可不会讲
本实验要求在每一个 Raft 节点上实现一个 K/V 服务器(server),向上接受客户端(client)的请求并返回请求结果,向下生成日志应用到 Raft 节点中。 整个模式大概长这样。 主要流程是这样的: client 寻找对应 Raft 节点是 Leader 的 server,并发起一个请 …
本实验要求我们实现 Raft 算法,包括其领导人选举、日志复制、快照等关键要素。
书接上回。
如果本科线代能有这样的教育方式和路线,我何苦现在还要来听这门公开课( 记录一下听的过程中觉得有用的信息好了。
本实验要求我们构建一个分布式的 MapReduce 系统,并实现 paper 中提到的文章字数统计算法。
没有匹配的文章。换个关键词或分类试试。