纹理三问 纹理是什么 宏观角度:一张图片(不准确) 微观角度:一种可供着色器读写的结构化存储形式 简而言之,纹理是个容器。 以二维纹理为例,二维纹理以宽高以及想要存储的信息(RGBA 等)构造的一个三维数组 [i,j,k],其中 $i$ 和 $j$ 类比数组或者矩阵,代表像素点,$k$ 代表我们想要存储的 RGBA 或者其他信息。 由二维纹理可推得…
前言 电脑的工作原理:电脑是由各种不同的硬件组成,由驱动软件驱使硬件进行工作。所有的软件工程师都会直接或者间接的使用到驱动 定义:是一个图形库,用于渲染 2D,3D 矢量图形的跨语言,跨平台的应用程序编程接口(API)。针对 GPU。 基础概念 应用端 即我们自己的程序端,相对用 OpenGL ES,我们属于应用端 什么是应用端?应用端就是我们程序…
3D 变换 平移 $$ T(t_x,t_y,t_z)=\begin{pmatrix} 1 & 0&0 &t_x \\ 0 & 1 & 0 & t_y\\ 0 &0 &1 &t_z \\ 0 &0 &0 &a…
2D 变换 线性变换 比例变换 $$ x^\prime =sx\\ y^\prime =sy $$ 比例矩阵 $$ \begin{bmatrix} x^\prime \\y^\prime \end{bmatrix}=\begin{bmatrix} s&0 \\0&s\end{bmatr…
MVP 矩阵 什么是MVP矩阵? MVP矩阵分别是模型(Model),观察(View),投影(Projection)三个矩阵。我们的顶点坐标起始于局部空间(Local Space),在这里它称为局部坐标(Local Coordinate),它在之后会变为世界坐标(World Coordinate),观察坐标(View Coordinate),裁剪坐…
环境配置 需要安装GLFW 和 GLEW。 解压后将两个文件移动至同一个目录,这里移动到了 D:\OpenGL 打开 VS,新建一个 C++ 空白项目,这里我将其命名为OpenGLTest。项目创建完成后在解决方案下一行处右键 添加-> 新建项,选择 C++ 文件,命名为 main.cpp 右键 OpenGLTest-> 属性,将属性页的配置改为“…
数学基础 —— 矩阵计算 线性方程 什么是线性方程? 线性方程,顾名思义,呈线性的方程,一条线下来,比如我们中学时期学过的一次方程就是一个线性方程,线性方程具有可加性,比例性,即常数倍 $k$,用数学函数表达方式就是 可加性: $$f(x_1+x_2)=f(x_1)+f(x_2)\newline 2x+3y=1$$ 比例性: $$f(kx)=kf(…
美术理论基础 光影 黑白灰 在美术中黑白灰指亮面、灰面、暗面,属于素描的三大面,主要体现一个物体的整体受光的过程。普遍存在于各种艺术和设计领域。黑白灰作品的出现,源于上世纪80年代的伤痕美术。 光线照射,受光面为“亮”,形成“白”。 背光部为“暗”,形成“黑”。 其余为过渡的“灰”色。 明暗五调子 如果将上图的黑白灰从表现上细分可得: 高光,受光面…
啥是向量 向量的定义 向量是有大小和方向的有向线段。 向量没有位置,只有大小和方向。 向量的箭头是向量的结束,尾是向量的开始(从箭尾画到箭头,最终箭头指示方向为向量方向)。 向量描述的位移能被认为是与轴平行的位移序列(向量的数组不是向量的位置,最终箭头指示方向为向量方向)。 向量表示:三维($a_x,b_y,c_z$) 二维($a_x,b_y$) …
整体流程 应用阶段:粗细度剔除,进行渲染设置,准备基本数据,输出到几何阶段。(CPU阶段) 几何阶段:顶点着色器,曲面细分,几何着色器,顶点裁剪,屏幕映射。(GPU阶段) 光栅化阶段:三角形(点/线)设置,三角形(点/线)遍历,片段着色器。(GPU阶段) 逐片元操作:裁剪测试,透明度测试,深度测试,模板测试,混合。(GPU阶段) 后处理。 每个阶段…