Games101-Lecture 04 Transformation Cont

重点归纳:

  1. 3D 变换 (以旋转为重点):
    • 绕 x, y, z 轴旋转矩阵的差别,循环对称性 (列向量顺序问题)
    • 旋转的分解以及欧拉角,Rodrigues' Rotation Formula(绕过原点的轴的旋转)
    • 四元数,主要为了旋转间的差值 (课程无), 因为旋转矩阵不太适合作差值,三角函数不是线性的,(15 + 25)/2 != 20
  2. Viewing 变换:
    • View(视图)/Camera 变换
    • 3D 到 2D 的投影变换 (Orthographic/Perspective, 正交/透视)
  3. View 变换
    • 标准相机位置的定义
    • 相机和模型的一起变换
  4. 投影变换
    • 正交投影,无近大远小
    • 简单的正交投影方法和常用的正交投影方法
    • 透视投影,平行线会相交,可以分解成"挤压"变换和正交投影变换
    • "挤压"变换的推导
Games101-Lecture 03 Transformation

重点归纳:

  1. 2D 变换:
    • 线性变换 (Linear):缩放 (scale)、切变 (shear)、旋转 (rotatrion)、镜像 (Reflection)
    • 非线性变换:平移 (translation)
    • 仿射变换 (Affine): 线性变换 + 平移
  2. 齐次坐标
    • 用线性矩阵来描述上述所有的变换
    • 点与向量的表示
  3. 变换的组合与分解
    • 变换的先后顺序
    • 绕任意点的旋转
Parallel201-1.现代 CMake 进阶指南

Parallel201 笔记 + 课后作业,课程传送门:

Parallel101-1.学 C++从 CMake 学起

Parallel101 笔记 + 课后作业,课程传送门:

scanf 是如何工作的

今天有个初学编程的朋友问了我一个关于 scanf() 的问题,大概就是对书上一段有关"%d%c"的解释不太明白,但作为 Cpp 学习者的我,老实说有一万年没有用过这个 C 函数了,虽说 printf()/scanf() 在开销上是比 C++ 的 cout/cin 要小的,但我其实连 cin 都不怎么用,刚好借着这个机会来回顾回顾 scanf() 的用法,这篇文章不仅是给朋友写的,也算是我个人的一个复习,希望不要误人子弟 (ゝ ∀・)

使用 tlp 来为 linux 省电

Linux 作为我的主力机已经有快半年时间了,从 ManjaroArchlinux ,从 dwmkde-kwin-tiling,从 Neovim + CoCVSCode-Neovim 插件,充分说明了什么叫生命不息,折腾不止,渐渐地我已经完全适应了 Linux 下的生活,也构建起来一套自己的工作流,除了玩游戏,很少再打开磁盘上的 window。

尽管 Linux 的高自定义度非常对我胃口,但对于我这种较新的机器(Lenovo Legion R9000P)来说,硬件驱动始终是个硬伤,就比如最近在 Linux-lts、nvidia-lts 更新到 5.15.24 之后,我的电脑才能正常地调节亮度,此前我一直用的是自己写的蹩脚 xrandr 脚本,依靠改变 Color Channel 来对亮度进行伪调节。

大概也是因为驱动的问题,在我的机器上,Linux 的耗电速度比 windows 要快,还好有 tlp 能救一把,配合 kde plasma 自带的电源管理,我现在 Linux 的耗电速度已经基本和 windows 持平了,这里就记录一下我的 tlp 做了哪些配置。

Conda init 设置拖慢 shell 启动速度的解决方法

最近发现 zsh 的启动速度变慢了,经常打了几个字母,终端才缓过神来,导致我输入命令被打断,按理说不应该,毕竟我用的 Alaritty + zsh + zshfw 的组合,Alacritty使用 GPU 加速渲染,zimfw号称第三快的 zsh 配置框架,性能方面肯定是没问题的,那就只能是我.zshrc 的问题了。

而恰巧我的.zshrc 又比较精简,除了一点点必备的插件其他啥也没有,所以很快啊,我的目光聚焦在了 conda init 往我的配置文件里写的那几行上: