Games101-Rasterization(Antialiasing and Z-Buffer)笔记
Games101-Rasterization(Antialiasing and Z-Buffer)课堂收获的知识过多,无法全部记录在笔记中…只简单的记录一下大概
走样和反走样what上节课通过判断每个 pixel 是否在三角形内得到的图形会出现很严重的锯齿状边缘,这就是一种走样(Aliasing)
走样(Aliasing)只有锯齿状一种吗?
空间方面:摩尔纹,锯齿
时间方面:车轮效应
简单来说,产生走样的原因是:信号变化太快(数据量太大),采样跟不上(采集的数据少)
黑话:Artifact,指采样产生的各种误差和错误
why涉及信号处理和图像处理
首先提出一种可行方案:先将原图模糊再采样。效果确实比原先好,相当于在外围做了一圈渐变
两个步骤能调换次序吗?
基础知识引入
傅里叶级数展开:任何周期函数,都可以表示成一系列 正弦+余弦+常数 的形式
傅里叶变换:时域$\rightarrow$频域,用于采样
逆傅里叶变换:频域$\rightarrow$时域,用于还原
滤波:将特定频率过滤掉
分析一张黑白照片
(频率信息分布图?忘了)中心白色(低频信号),周围黑色(高频信号),有白色十 ...
glad、glfw配置
glad、glfw配置,VS 2019原文参考 >> https://learnopengl.com/Getting-started/Creating-a-window
中文版参考 >> https://learnopengl-cn.github.io/01%20Getting%20started/02%20Creating%20a%20window/
GLFW下载glfw
下载地址
一般解压至项目文件夹
链接
解决方案资源管理器 右键 >> 属性 >> VC++目录
包含目录 添加 include 文件夹路径
库目录 添加 lib 文件夹路径
链接器
附加依赖项:手动输入glfw3.lib;opengl32.lib
这时就可以在cpp文件中加入#include <GLFW/glfw3.h>
GLADglad提供在线服务 https://glad.dav1d.de/
Language:C/C++
API gl 选择版本大于等于之前 glfw 版本的选项
Profile 选择 Core
勾选 Generate a lo ...
核心 C#
笔记都是基于 C# 7.0 和 .NET Core 2.0,会有一部分新特性
只记录相对于重要的地方,具体请翻书
核心 C#[TOC]
1. 从 Hello World 开始
C# 区分大小写
using static,打开类的静态成员
System 名称空间,包含了最常用的.NET类
2. 变量
安全性的一种体现,C# 编译器将未初始化看作一种错误,类和结构的变量会有默认值,方法的局部变量必须显式初始化
类型推断:var关键字
Type ageType = age.GetType();
常量const int a = 10;
声明时初始化,指定值后不能改写,声明之外赋值编译器报错
不能用变量中的值初始化,除非是只读字段
隐式静态(默认静态),但不允许显式声明 static
3. 预定义数据类型值类型(堆栈)
变量赋给变量本质是值复制,堆栈中有两个变量
自己定义的类型通常是引用类型,但结构是值类型
sbyte, short, int, long, byte, ushort, uint, ulong(前 4 个有符号整数,后 4 个无符号整数,8bit,16bit,32bit, ...
基于离散对数的公钥加密
基于离散对数的公钥加密1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980import random from Crypto.Util import number def GenPara(bitlen): q = number.getPrime(bitlen-1) while(not number.isPrime(2 * q + 1)): q = number.getPrime(bitlen-1) p = 2 * q + 1 # generate safe prime p = 2 \* q + 1 g = random.randint(0, p-1) while(fastPowMod(g, 2, p) == 1 or fastPowMod(g, q, ...
shyo密码管理器开发日志0x03
shyo密码管理器开发日志0x03
之前实现的只是,参数传递和数据库存取数据,现在想把这个弄成一个api接口方便前端使用
servlet-api.jar
api_test.java
编译时报错:package javax.servlet does not exist和package javax.servlet.http does not exist
javac -cp /usr/local/apache-tomcat-10.0.0-M10/lib/servlet-api.jar api_test.java
-cp是-classpath的缩写(javac --help查看细节)
api_test.class
爆了爆了,服务器的问题怎么也解决不了,我还没存快照。。。,系统回滚了,重配
发现可以通过HTML+Ajax实现服务端和前端只通过json格式传输数据,那就这么做吧
shyo密码管理器开发日志0x02
shyo密码管理器开发日志0x02
使用vsc的ssh扩展连接服务器体验再次起飞
服务器获取用户名和密码
从数据库中查询数据
测试页面需要的功能index.jsp
123456<!--登陆表单--> <form action="success.jsp" method="post"> <input type="text" name='userName' placeholder="Please input userName"><br /> <input type="password" name='userPassword' placeholder="Please input userPassword"><br /> <button type="submit">submit</button> </form>
success.jsp
123456789101112131415<html lang="en"><head> <meta chars ...
shyo密码管理器开发 0x01
shyo密码管理器开发日志 0x01前言前言:9月开学到现在12月,想了各种密码管理器的实现方法,有思考纯前端实现密码存单独文件或存在本地数据库中,也有关联服务器的,期间也写了不少代码,但都没有一个很大的进展,在和老师的谈论中逐步理清大体框架,主要是实现一个密码存在服务端用以多端同步,用protobuf传输数据,并在前端加以处理的框架(一直觉得密码一旦在网络中传输就会有各种安全问题,这些都是需要解决的问题,由于我们的目标是基于OTP的密码管理器,所以这说不定是一个解决方案)。
开发准备
由于是多人开发,我就整了一个服务器(阿里云学生认证)(终于有自己的服务器辣,后面准备把博客迁移到服务器上),到时候开放一个端口供前端开发使用
准备使用之前有尝试过的TomCat和MySQL搭建JAVA后端
数据传输使用的是protobuf
服务器当场在阿里云买了(虽然腾讯云好像更便宜,但在杭州没有站点)轻量应用服务器(和ECS有点区别但影响不大),用的是系统镜像ubuntu18.04,然后ssh就能连了,起飞,爽到
安装JDK+TomCatsudo apt install openjdk-11- ...
rsa加解密(python实现)
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879import random # import random to use randint from Crypto.Util import number # import Crypto.Util.number to use getPrimedef Exgcd(r0, r1): # 扩展欧几里得算法 s0, s1 = 1, 0 t0, t1 = 0, 1 q, r = r0 // r1, r0 % r1 while (r): s, t = s0 - q * s1, t0 - q * t1 s0, s1, t0, t1 = s ...
C# GDI+
C# GDI+
Windows Form编程
Windows Form编程 Ⅰ代码执行机制两个关键词:事件驱动,被动
不同于控制台应用的开始运行直到结束,或是等待用户输入,WinForm是由事件驱动的。用户使用时会产生诸如键盘输入,鼠标点击,鼠标移动等等一系列的事件,通过捕获其中一部分有用的事件进行响应
被动执行
需要考虑各种可能的用户输入(各种事件),对其中特殊情况做出针对性的处理
消息循环机制:等待消息 - 获取消息 - 处理消息 - 等待消息
代码框架vs新建Windows 窗体应用(.NET Framework)
选中自动生成的Form1,右键属性或F7可以查看控件代码
(控件可以包含其他控件,现在这个控件可以理解成将在内部添加的控件的父控件)
可以看到Form1继承自Form,并有一个partial修饰,表示当前的代码只是Form1的一部分
Form1的另一部分代码位于Form1.Designer.cs,可以在sln视图下找到
这部分代码会根据设计视图下的操作自动改变,不需要自行编辑(自行编辑就 危)
此时程序已经可以运行了,生成一个空白窗口
子控件的添加和对需要响应事件的添加从工具箱中选取控件拖拽至父 ...