计算机图形学初体验——CS291

前前后后花了大概五天的时间,一天看2~3个小时不等,终于把这个 Interactive 3D Graphics - CS291的课看完了。因为线上练习不太方便,所以基本上没有做 coding 练习,只是做了简单的 quiz。

课程笔记

CS291

不太全面的随堂笔记,基本上如果是我觉得已经完全理解的、不重要的就不会记录。

课程评价

优点:

  • 课程内容很丰富,从原理到实践都有涵盖,大概内容详见我的笔记
  • 附带课程讲稿,方便回顾(结合翻译插件看起来很方便)
  • 单节课时长很短,1~5分钟左右,看起来不那么累
  • 丰富的 Quiz 和 Question set,学练结合
  • 老师很幽默,没有口音问题,听起来很清晰
  • 有 Udacity GPT,遇到问题的时候很方便
  • 有字幕

缺点:

基本上是和年代久远相关的问题:

  • 年代久远,部分内容过时
  • 附带资料链接很多都失效了
  • 线上 coding preview 全部失效
  • shader 没有深入讲
  • 讲解的 three.js 有点过时了

后续学习

Three.js

Shaders

WebGL

openGL

线性代数

其他

WebGPU

Chrome 113 中将支持 WebGPU ,即可以通过 Web 端直接调用底层GPU相关API。

打开 WebGPU 支持:chrome://flags/#enable-unsafe-webgpu

以及发现一个有意思的项目:Orillusion - 次时代 WebGPU 引擎

一篇 WebGPU 介绍文章:I want to talk about WebGPU

不重要的细节

起承转折

这个课的入口比较隐蔽,在 Udacity 官网中不太好找,我一开始是从博客 Northern Wind 中的 这个页面 看到的,放到收藏夹中有些日子了,一时兴起就翻起来看了。

前面看得很精神,到数学部分开始犯难,于是花了大概1个小时左右到B站复习了线性代数,看的是这个课程:线性代数的本质,看到点积就没有继续看下去了,还看了一些其他的线代资料,有的说可以理解成: Linear algebra gives you mini-spreadsheets for your math equations.1, 但还是觉得《线性代数的本质》这个课的几何描述更容易理解。我所理解的Matrix描述的是一种变换,二维或者三维,任何变换都可以看成是基向量的倍数级变化,点积的结果是一个角度,而叉积的结果是一个向量。

说起来大学的时候因为转专业学过两次线性代数,一次线性代数A、一次线性代数B,两者学分和难度不同。具体的分数记不清了,只记得考过了,是个不算太差的成绩,之前没有花太多时间去学,因为当时课程冲突,上线代的同时有另一个要上的课,只能选其一,所以课只听了一半,大概就用了几天的时间复习,所以现在也忘光了。

说回 CS291,课上很多内容之前学建模的时候都接触过,看到后面就开始本能犯困了,于是开始定番茄钟来定量摄入,结果就是终于看完了!很好的课,下次不看了。

做笔记

虽然我用 Obsidian 记录,但却借由 Logseq 发布,并不是故意写成大纲格式以方便 Logseq ,而是懒得写###定title,缩进也能更直观地看到层级关系,不用 Logseq 只是因为觉得不顺手。

顺带一提,最近 Obsidian 插件 Outliner 支持拖拽 Outliner 节点了

写码进度

为了学习 Next.js 而做的练习项目已经做完了:Airbnb-Clone,感觉 React 生态好成熟,好多组件都不用自己写,拿来用就完了,Prisma 也很好用,可以直接从数据中获取类型定义,不过下次我想试试结合 PostgreSQL。

Next.js 的 Server Component 有些难懂,我的初步理解是它是为一种只在服务器(server)运行的代码,而在需要操作 dom 和需要使用 hook 的代码则需要设置为Client Component。感觉 Next.js 模糊了前后端的界限,是好是坏呢?我不知道,但是感觉用起来挺顺手的。

相关阅读:Grok React Server Component by Quizzes

其他进度:

  • 更新了 Raycast-Akkoma/Miniflux 中 Raycast API 的版本,并修剪了部分代码
  • 修改一个了 Mangane 的 Bug,但他们好像在开发一个新的客户端,或许之后会废弃 Mangane,所以我决定暂时不做其他修改
  • 在做 shiraha 中的 dialog 插件,现在有了原生的 <dialog> element之后做 Modal 会比较方便
%sveltekit.body%