Latest

mini3DRender

背景 在 草稿纸上推图形学坐标变换 里推了坐标变换的全过程,为了验证和牢固掌握这些变换,这里将会实现一个基础的只使用CPU进行运算的渲染器。 主要功能 * 显示obj文件 * 点、直线、三角形绘制 * 贴图绘制 具体实现 [1] Bresenham 直线绘制算法 本文介绍著名的Bresenham 直线绘制算法 由于现在的屏幕是由一个个像素点构成的,所以在计算机中绘制的直线也就是只能是由离散的点构成,Bresenham直线绘制算法可以在屏幕上绘制任何直线。并且它只需要使用整除运算,完全不需要浮点运算,从而具有超高的性能。 接下来介绍我理解的Bresenham算法流程,并在最后贴出我实现的C++代码。(为了介绍的容易理解,这里只举斜率为0到1之间的直线) 如下图所示,离散化直线的本质是已知(xi,yi)点时确定下一个点(xi+1,yi+1)的位置:只有两种可能,一种是(xi+1,yi),另一种是(xi+1,yi+1) Bresenham算法的核心就是x相同时观察直线到拟合直线的距离(

By Feiran Yu

Math

草稿纸上推图形学坐标变换

0. 背景 图形学坐标变换是将模型三维空间坐标变换成二维平面坐标的过程。光栅化/光线追踪渲染器都依靠该变换实现。掌握坐标变换是理解图形学渲染过程的基础。 我此前也实现过几个光栅化渲染器 (甚至在FPGA上实现过简单的),但是主要都是实现代码为主,看到数学推导部分就畏惧的跳过,对于这个坐标变换一直做不到心中有数。 所以为了扎实图形学基础,我便乘这个假期,准备在草稿纸上手推一遍整个过程,并尽力做到好理解。 在这个数学推导完成后会出相应的一个光栅化渲染器,争取基本手写。 1. 概要内容 整个坐标变换流程主要由以下四部分矩阵变换构成 1. 三维齐次坐标和三维坐标的平移与旋转 2. 物体空间(object space)到世界空间(world space)变换矩阵 3. 世界空间(world space)到相机空间(camera space)变换矩阵 4. 相机空间(camera space)到投影空间(clip space)也叫做 齐次裁剪空间(homogeneous clip space)

By Feiran Yu

论文复现《Guaranteed Globally Injective 3D Deformation Processing 》

背景 第一次做论文复现,尝试先编译跑通给的程序,再尽量看懂论文。 论文复现:我会尽量在自己的电脑上运行给的程序,得到论文里的结果。 编译跑通程序:我会克隆所给的程序,解决可能遇到的编译问题,运行给的testcase,观察是否和论文中的表现一致。 看懂论文:我会首先尽量看完论文全文,然后尽量掌握论文的大意,补齐所欠缺的前置知识。 这个论文应该是计算机图形学的几何与仿真方向的。 论文主页:Guaranteed Globally Injective 3D Deformation Processing 论文代码在:ipc-sim/IDP 环境配置 该论文需要在运行在linux或macOS下。 我首先尝试的是virtual box下的 ubuntu虚拟机,但是特别卡。 决定直接在我的老ThinkPad上装实体ubuntu: 第一次尝试22.04版本,过于新,好多组件安不上准备换回20 ubuntu 20.04 镜像下载Ubuntu 20.04.4 LTS (Focal Fossa) 启动盘烧录软件下载rufus

By Feiran Yu

学习笔记

C++ 学习笔记

C++ Primer C++ Primer是一本C++经典著作,学习它对于深入了解C++有好处,而图形学大量依赖C++,故我进行学习这本书,记录在此。 15章 类继承的修饰方式:public、protected、private public:基类所有对象访问权限保持原样到派生类 protected:基类所有public对象在派生类中变为protected对象 private:基类所有对象(public、protected、private)在派生类中变为private对象 总之,派生类继承基类对象的权限变化如下表 修饰方式 基类public 基类protected 基类private public public protected private protected protected protected private private private private private 17章 标准库特殊设施 正则表达式30分钟入门教程 代码仓库 CPP_Primer_Practice

By Feiran Yu

图像处理程序

背景 考上研究生,导师给了我一个图像处理的横向项目的一部分来练手。这个横向项目是来自户外海报公司的。 问题 主要需要解决1)将巨大图片生成PDF。 2)对给定多边形和间距d,生成向外扩张间距d的新多边形。 解决方案 1. 巨大图片生成PDF 学习PDF文件格式,尝试自己编写生成PDF模块或使用现成库(libHaru/PDFWriter) PDFWriter实现裁剪功能 2. 对给定多边形和间距d,生成向外扩张间距d的新多边形 估计是计算几何的知识,由于没学过,先购买了《计算几何算法分析与设计》。 边退化情况也要考虑多边形的偏移填充算法 ClipperLib库使用说明 3.考虑到用户友好,可能需要GUI QT/Dear ImGui/wxWidgets 零碎知识 DPI(英語:Dots Per Inch,每英寸点数) 1英寸 = 2.54 厘米 100DPI = 100 Dots Per Inch

By Feiran Yu

输入

原谅[转载]

来自itrewub/jh-notes的一篇文章,存在这里以便于学习(该文章使用CC0 1.0License 可以随意转载) Tags: Clan 你会选择原谅伤害过你的人吗? 下面这些话你们听起来也许匪夷所思,也许现在也还接受不了,但建议先记住了,将来再慢慢验证。 原谅,不是一种选择,而是一种生而为人的义务。 无论人有多正当的理由、有多值得人同情的遭遇,如果不能原谅,到最后都一定会在灵魂上受到得不偿失的伤害,而且损失本来可以得到的幸福。 甚至可能以人生相殉。 这种诅咒的存在,已经等于以人性为质押,宣告了原谅是一种义务,一种不容不选择的选择。 你们一定会问,那么公平呢?正义呢?如果一律都必须原谅,那么公平和正义要怎么办? 这里就是原谅这件事的要害所在。 张三穷困,你答应他每天可以赊账吃一碗面,到了周末再结账。 即使你全额收款,你对张三也有爱——因为你既没有要利息,也没有要抵押,承受了全部的风险。 结果张三周末没有付款。 你跟张三说——不着急,慢慢来,只要你补齐面钱,我还可以继续这样赊给你; 或者你跟张三说——不着急,

By Feiran Yu