Ubuntu配网
注意,该页面使用了较多mermaid渲染图,图片加载可能较慢,不影响文字。 SOVOS今天在折腾他的旧电脑。他家里有一台十年前的电脑啊非常地古老但是里面有一个非常珍贵的1TB机械硬盘啊可以拿来玩。反正就是不用白不用,不如拿来丢到桌子底下当个服务器玩。之前呢装的是debian,但是SOVOS最近需要用的一个工具需要ubuntu于是SOVOS就把笔记本电脑的系统给弄成ubuntu了。 1. 上网流程 1.1. 从两台机器开始 首先我得说一下上网流程。由于我学习的顺序非常混乱,所以我的博客写的顺序也非常混乱,我尽量按“网络为什么会一步步变复杂”的逻辑来厘清。 最简单的网络是什么样的?其实就是两台机器拿一根网线连起来。A 想给 B 发数据,B 想给 A 回数据,只要两边能听懂彼此的数据格式,这件事就结束了。 但是问题马上就来了:如果不是两台机器,而是三台、十台、一百台机器呢?总不能每两台机器之间都拉一根线吧。nnn 台机器两两相连需要大约 n(n−1)2\frac{n(n-1)}{2}2n(n−1) 根线,机器一多,线就会变成灾难。 所以人们很自然地想到:能不能把大家都接到一个“中间人...
旋转小方块
有了ppm格式的支持,SOVOS终于可以开始cpp渲染之路了。这次SOVOS打算用cpp渲染一个最简单的情况,渲染一个旋转的小方块。 1. 旋转线框方块 我们先做简单的情况,只渲染出正方形的线框。为了做到这一点,我们需要知道虚拟三维空间中的点其对应的二维坐标是多少,以及需要知道怎么在离散二维画面上画线。 1.1. 三维到二维映射 要让计算机渲染出图片,我们实际上需要的是一个空间3维坐标到2维坐标的映射,也就是我们已知摄像头和物体的相关信息。对于虚拟空间中的某一个点,我们知道它的三维坐标,我想要通过这个三维坐标得到这个点最终出现在画面的什么位置。 之前我以为需要弄一个透镜什么的然后通过模拟啊之类的方法让物体在某一个平面上成像,然后把这个像截取出来blabla的。但对于这么简单的情况我想得似乎过于复杂了,实际上我们只需要如下一个极其简单的方法: 直接说结论。物AAA与原点连线,与像平面交点A′A'A′就是他的像,取A′A'A′的xxx、yyy坐标就是最终的二维坐标。 直觉上讲我感觉还挺合理的。实际上可以借助小孔成像理解?只不过我们把像平面移动到小孔前面了,效果还...
ppm图片
SOVOS苦图片久矣。总是想要玩一下图像但是奈何jpg和png存储有压缩,c/c++读起来不是那么方便。我这个多少有些精神洁癖的家伙又不想用python,又懒得用c/c++库(欸其实有道理啊,回头看看怎么用c/c++操作jpg和png),一直没有机会倒腾图片。但是现在情况有所改观,因为SOVOS非常幸运地发现竟然有一种图像格式叫做ppm。 1. ppm格式 ppm第一行固定为p6 第二行固定为宽度 高度,非二进制 第三行为255,含义是这个颜色分量的最大值 接下来的内容就全都是像素数据了,每个像素三个字节数据,分别代表rgb三个分量,图片换行时候不需要换行符隔开。 2. 示例 以下给出一个输出纯红色图片的代码示例: 12345678910111213141516171819202122232425262728293031323334#include <stdio.h>#include <stdlib.h>int main(void) { const char *filename = "red.ppm"; const...
Hello World
1. 欢迎 欢迎来到SOVOS的博客。我会在这个博客上发一些有意思的东西,大概都是些杂七杂八的东西,教程啊什么的。记录一下我都做了哪些我真正想做的而不是别人让我做的事情吧。
