光栅化理论基础
Triangle
视锥——field-of-view(fovY)
如上图width上下中点所连线的的夹角,红色虚线部分的夹角
根据上述理论,对于点的视锥是可只晓得,故只要了解到观测点距离屏幕的远近就可以设计出屏幕的高度height,如下图所示
屏幕——screen
二维数组每个元素代表一个像素,坐标化(左下角(0,0))
每个像素的表示为$(x,y),x \in N,y\in N$,但是对于一个像素的中心点要了解是在$(x + 0.5,y+0.5)$处
将转换的2D影像位置映射到屏幕上
转换在坐标系中从$[-1,1]^3 \to [0,width]\times[0,height]$,即这也称为视口变换,如下图
Raster Displays
示波器(物理实验)主要的内容GAME101中
手机屏幕
电脑屏幕(LCD、VA)
电子墨屏幕
本部分我也不太清楚,读者可以自行百度
Triangle Meshes
三角形是可以利用网络链接来表示任何形状
判断像素中心点与三角形点的关系
采样函数(Sampling a Function) ...
图形学基础
线性代数基础向量
用$\vec{a} 或者 \pmb{a}$表示向量,$\hat{a} = \frac{\vec{a}}{|\vec{a}|} $,表示单位向量
向量的坐标形式,列向量$\vec{a} = \begin{pmatrix} x \ y \ z \end{pmatrix}$
$\pmb{a}^T = \begin{pmatrix} x & y & z \end{pmatrix} , 转置运算$
向量的运算:
$\vec{a} \cdot \vec{b} = |\vec{a}||\vec{b}|cos\theta,其中\theta为向量\vec{a},\vec{b}的夹角$
$\vec{a} \times \vec{b} = - \vec{b} \times \vec{a},|\vec{a} \times \vec{b}| = |\vec{a}||\vec{b}|sin\theta$
对于 $\vec{a} \times \vec{b} $ 必然可以转换成矩阵和向量的乘积,相当对于向量的旋转即 $\pmb{a} \times \pmb{b} ...
OpenGL(2)
在学习此节之前,建议将这三个单词先记下来:
顶点数组对象:Vertex Array Object,VAO
顶点缓冲对象:Vertex Buffer Object,VBO
元素缓冲对象:Element Buffer Object,EBO 或 索引缓冲对象 Index Buffer Object,IBO
绘制三角形在OpenGL中,任何事物都在3D空间中,而屏幕和窗口却是2D像素数组,这导致OpenGL的大部分工作都是关于把3D坐标转变为适应你屏幕的2D像素。3D坐标转为2D坐标的处理过程是由OpenGL的图形渲染管线(Graphics Pipeline,大多译为管线,实际上指的是一堆原始图形数据途经一个输送管道,期间经过各种变化处理最终出现在屏幕的过程)管理的。
滤波操作和过滤
这篇文章主要讲解了openCV对图像的平滑去噪的处理基础
滤波操作卷积操作,通过像素卷积核对其核内的数值进行相关的数值变换操作
这里是通过一定的规则,对于一组卷积核内的数值进行变换进行滤波
原始数据:
这张图片好像不是带杂音的图像,读者可以自己去找一找一张带杂讯的图片
均值滤波openCV中可以使用blur函数对数据进行均值滤波
1blur = cv2.blur(img, (3, 3))
cv2.blur(image,kernel_size)的两个参数image代表要处理的文件,kernel_size代表在滤波过程中使用的卷积核大小(最好使用奇数大小)
均值滤波实际上是对于卷积核内的数值相加再取算数均值填入卷积核最中间的格子中
方框滤波和均值率波的计算过程是一样的,不过可以添加正则化处理和大小越界
1box = cv2.boxFilter(img, -1, (3, 3), normalize=True) # 第二个参数 为颜色通道统一,填入-1即可
如果不加normalize=True或者设置normalize=False那么对于方框滤波就不会取均值而是取和,很容故意发生越界 ...
Latex入门
latex的vscode配置
下载latex镜像文件,下载地址点击这里可以进入
这里我下载的是下面的这一个
对于这种.iso文件直接利用win10自带的虚拟光驱打开即可,不需要再额外下载其他虚拟光驱软件
配置vscode setting文件
打开vscode 左下角设置\rightarrow右上角打开设置(json)\rightarrow将下列代码粘贴至json文件中123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129"latex-workshop.lat ...
openGLVscode配置
参考步骤
windows 需安装 MinGW, install gcc、g++、gdb 和 mingw32-make 并 进入到 MinGW\bin 文件夹下 把 mingw32-make.exe 修改成 make.exe
MinGW 不要下载 MinGW-w64因为后面可能会出现问题 MinGW,即 Minimalist GNU For Windows。它是一些头文件和端口库的集合,该集合允许人们在没有第三方动态链接库的情况下使用 GCC 产生 Win32 程序。
vscode 插件 C/C++、C/C++ Project Generator
glfw 下载 Windows pre-compiled binaries
选择Windows pre-compiled binaries,因为我们使用的 MinGW 所以选择 32-bit Windows binaries
glad 在线服务 生成静态库
12> gcc ./src/glad.c -c -I ./include/ // 生成 .o文件> ar -rc libglad.a glad.o ...
图像读入以及读入模式
环境配置12pip install opencv-python==xx.xxpip insatll opencv-contrib-python==xx.xx
注意两个包的版本号要相同
读取图片
opencv读入的图片默认是RBG格式的,若要用matplotlib画图需要转成RGB格式
123img = cv.imread(r'./img/2.jpg') # 读入图片type(img)# <class 'numpy.ndarray'>
一般来说,图片的存储形式为三维矩阵(宽 高 颜色通道数)
1234# 展示图片cv2.imshow('image', img) # 窗口名字、图像矩阵cv2.waitKey(0) # 等待自动关闭时间(ms级别),使用0代表手动关闭,按任意一个键关闭cv2.destoryAllWindows() # 关闭窗口
封装一下展示图片的代码
1234def show_image(windows_name, image): cv2.imshow(windows_name, ima ...
java_String_API
字符串反转代码
123public static String reverseTestOne(String s) { return new StringBuffer(s).reverse().toString();}
leetcode(T4)
给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。算法的时间复杂度应该为 O(log (m+n)) 。
12345678910111213141516171819202122232425262728293031class Solution { public double findMedianSortedArrays(int[] nums1, int[] nums2) { int n = nums1.length + nums2.length; if (n % 2 == 0) { int left = find(nums1, 0, nums2, 0, n / 2); int right = find(nums1, 0, nums2, 0, n / 2 + 1); return (double) (left + right) / 2; } else { ...
OpenGL(一)
本文中使用的代码链接 GitHub
导入头文件
当导入头文件的时候出现路径问题是,无法找到头文件路径,我们可以查看配置篇的注意部分
对于头文件的引入会有要求,按照一下引入顺序进行引入操作:12#include <glad/glad.h>#include <GLFW/glfw3.h>
请确认是在包含GLFW的头文件之前包含了GLAD的头文件。GLAD的头文件包含了正确的OpenGL头文件(例如GL/gl.h),所以需要在其它依赖于OpenGL的头文件之前包含GLAD。
初始化GLFW123456glfwInit();// 设置主要版本和次要版本glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR,3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR,3);glfwWindowHint(GLFW_OPENGL_PROFILE,GLFW_OPENGL_CORE_PROFILE);// glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); MA ...