errorman

不积跬步,无以至千里

导航

2023年8月30日

摘要: 一、准备工作 基础知识详见:摄像机和learnopengl(9)摄像机。 当我们讨论摄像机/观察空间(Camera/View Space)的时候,是在讨论以摄像机的视角作为场景原点时场景中所有的顶点坐标:观察矩阵把所有的世界坐标变换为相对于摄像机位置与方向的观察坐标。要定义一个摄像机,我们需要它在世 阅读全文

posted @ 2023-08-30 17:43 Clemens 阅读(186) 评论(0) 推荐(0) 编辑

2023年8月25日

摘要: 当我们对一个图形进行一个较为复杂的变换时,我们并不直接去计算这个变换,而是将其分解为多个基本变换,再依次作用于图形。对于复合变换: $$ P^{,} = M_{n} \cdots M_{3} \bullet M_{2} \bullet M_{1} \bullet P$$ 先作用的变换放在连乘式右边, 阅读全文

posted @ 2023-08-25 12:11 Clemens 阅读(63) 评论(0) 推荐(0) 编辑

2023年8月24日

摘要: 一、准备工作 详情见learnopengl(8)坐标变换。 该部分主要涉及5个空间的变换,它们分别为局部空间(Local Space,或者称为物体空间(Object Space))、世界空间(World Space)、观察空间(View Space,或者称为视觉空间(Eye Space),或者摄像机 阅读全文

posted @ 2023-08-24 15:50 Clemens 阅读(166) 评论(0) 推荐(0) 编辑

2023年8月23日

摘要: 一、基础知识 主要是一些向量和矩阵的计算方式。大学本科期间的线性代数里面的内容。 缩放矩阵 $$\begin{bmatrix}S_{1} & 0 & 0 & 0 \\0 & S_{2} & 0 & 0 \\ 0 & 0 & S_{3} & 0 \\0 & 0 & 0 & 1 \\\end{bmatr 阅读全文

posted @ 2023-08-23 10:51 Clemens 阅读(83) 评论(0) 推荐(0) 编辑

2023年8月22日

摘要: 在上一节我们绘制了矩形,这一节,我们将在上一节的基础上绘制纹理。有关纹理的基础知识在此不再赘述,详情参考LearnOpenGL(6) 纹理 一、准备工作 首先我们将顶点着色器程序和片段着色器程序单独放到两个文件里面,分别是shader.vs和shader.fs。 我们将两个着色器程序以资源的方式添加 阅读全文

posted @ 2023-08-22 17:31 Clemens 阅读(735) 评论(0) 推荐(0) 编辑

2023年8月21日

摘要: 在上一节坐标系统中提到过:观察空间(view space)经常被人们称之为Opengl的摄像机,所以有时候也称为摄像机空间(Camear Space)或者视觉空间(Eye Space)。观察空间就是从摄像机的视角所观察到的空间。 一、摄像机/观察空间 当我们讨论观察/摄像机空间的时候,是讨论以摄像机 阅读全文

posted @ 2023-08-21 17:23 Clemens 阅读(145) 评论(0) 推荐(0) 编辑

2023年8月17日

摘要: Opengl希望我们在顶点着色器处理之后,我们可见的所有的顶点都为标准化设备坐标,也就是说,每个顶点的xyz坐标都在[-1.0, 1.0]范围内,超出这个坐标范围的都不可见。 我们通常会自己设定一个坐标范围,然后再在顶点着色器中将这些坐标变为标准化坐标,之后进入光栅化阶段,将他们变为屏幕上的二维坐标 阅读全文

posted @ 2023-08-17 16:31 Clemens 阅读(60) 评论(0) 推荐(0) 编辑

2023年8月16日

摘要: 一、基础知识 主要是一些向量和矩阵的计算方式。大学本科期间的线性代数里面的内容。坦白来讲,当时学线性代数,虽然考了个还不错的分数,但是实际这些向量、矩阵后面的意义是什么并不知道。只学会了一些基础的计算方法。 二、实践 使用GLM库。 我们在上一节的基础上,先将每个轴都缩放到0.5倍,再沿z轴旋转90 阅读全文

posted @ 2023-08-16 18:58 Clemens 阅读(26) 评论(0) 推荐(0) 编辑

摘要: 一、纹理是什么? 我的第一反应是一张图片。在计算机图形学中,纹理被更多的认为是一块数据,它也不再局限于2D空间。具体请参考这篇文章:纹理那些事 。 二、基础知识 纹理坐标 纹理坐标是纹理与图形的映射关系,图形中每个顶点都会关联一个纹理坐标,表示顶点需要从该位置读取纹理图像的数据。 纹理坐标的范围是0 阅读全文

posted @ 2023-08-16 15:48 Clemens 阅读(103) 评论(0) 推荐(0) 编辑

2023年3月29日

摘要: 1.使用基于range的for循环 这是 C++11 中非常酷的特性,如果你想从头到尾迭代,这是最好的方法。 using namespace std; int main() { vector<int> vec = {0, 1, 2, 3, 4}; for (const auto &value : v 阅读全文

posted @ 2023-03-29 20:14 Clemens 阅读(44) 评论(0) 推荐(0) 编辑