《计算机图形学编程(使用OpenGL和C++) 第二版》
文章平均质量分 96
《计算机图形学编程(使用OpenGL和C++) 第二版》书籍重点记录
itzyjr
Stay hungry,Stay foolish!
展开
-
✺ch7——光照
它没有光源位置,无论场景中的对象在何处,用于显示对象的每个像素都有着相同的光照。由于聚光灯同时具有定向光和位置光的特性,因此这里就值得使用 C++的多继承能力,让 Spotlight 类同时继承于实现位置光和定向光的类。其实从最终的计算效果来看,因为颜色取值在[0,1]区间,所以乘法的值是向0这个方向靠近的,乘法产生的值一般都是偏小的,会相互抵消原先的一些颜色。因此我们只需要对模型中每个多边形的一个顶点进行光照计算, 然后以每个多边形或每个三角形为基础,将计算结果的光照值复制到相邻的像素中。原创 2023-12-20 08:59:29 · 947 阅读 · 0 评论 -
✺ch8——阴影
片元在光空间的 -1 到 1 的范围,假设光空间中的某顶点为 projCoords,因为来自深度贴图的深度在 0 到 1 的范围,我们也打算使用 projCoords 从深度贴图中去采样,所以我们将 NDC 坐标变换为 0 到 1 的范围:为了和深度贴图的深度相比较,z 分量需要变换到[0,1];在示例中使用的是初始窗口的宽高。将该检索的值(到最靠近光的物体的距离)与 z 进行比较,将产生“二元”结果,告诉我们我们正在渲染的像素是否比最接近光的物体离光更远(即像素是否处于阴影中)。原创 2023-12-25 03:52:00 · 898 阅读 · 0 评论 -
✺ch6——3D模型
我们使用传统的数组绘制(array drawing)方式绘制一个立方体时,可能每个面使用6个顶点(绘制两个三角形),其中2个顶点是共享的,重复了,那么一共需要制定36个顶点;由于每个索引值只是一个整型引用, 我们首先将索引数组复制到整型的 C++ vector中,然后使用 glBufferData() 将vector加载到新增的 VBO 中,指定 VBO 的类型为GL_ELEMENT_ARRAY_BUFFER,这就是告诉 OpenGL 这个 VBO 包含的是索引。原创 2023-12-18 14:24:55 · 970 阅读 · 0 评论 -
✺ch5——纹理贴图
因此,我们将设置两个缓冲区,一个用于顶点坐标(每个条目中有 3 个分量,即 x、 y 和 z),另一个用于相应的纹理坐标(每个条目中有两个分量,即 s 和 t)。多级渐远纹理贴图通过一种巧妙的机制来工作, 它在纹理图像中存储相同图像的连续的一系列较低分辨率的副本,所用的纹理图像比原始图像大 1/3,其中图像的 RGB 值分别存储在纹理图像空间的 3 个 1/4 区域中来实现的。因此,我们希望顶部的方块变小,底部的方块变大。在步骤(3)中,我们将步骤(1)中的图像文件数据关联到步骤(2)中创建的纹理对象。原创 2023-12-18 13:20:20 · 964 阅读 · 0 评论 -
✺ch4——管理3D图形数据
用于构建透视矩阵的近、远剪裁平面之间的距离越远,具有相似(但不相等)的实际深度的两个对象的点在深度缓冲区中的数值表示越可能相同。也就是说,地球的 MV 矩阵是通过将地球的变换结合到太阳的变换中而建立的。同样,月球的 MV 矩阵位于地球的 MV 矩阵之上, 并通过将月球的模型矩阵变换应用于紧邻其下方的地球的 MV 矩阵来构建。这种不自然的伪影称为。通常情况下,通过选择最接近相机的相应片段的颜色作为像素的颜色,这种方法可决定哪些物体的曲面可见并呈现到屏幕,而位于其他物体后面的曲面不应该被渲染。原创 2023-12-18 11:23:05 · 975 阅读 · 0 评论 -
✺ch3——数学基础
目录3D坐标系和点矩阵单位矩阵转置矩阵逆矩阵逆转置矩阵矩阵的运算矩阵加法(+)矩阵乘法(×)常用的变换矩阵平移矩阵缩放矩阵旋转矩阵透视矩阵正射投影矩阵LookAt矩阵向量加法和减法点积叉积局部空间和世界空间——模型矩阵M视觉空间和合成相机——模型-视图矩阵MV用GLSL函数构建变换矩阵3D坐标系和点3D 空间通常用 3 个坐标轴即 x、 y 和 z 来表示。OpenGL 中的坐标系大都是右手坐标系。3D 空间中的点可以通过使用形如(2, 8, −3)的符号列出 x、y、z 的值来表示。不过,如果用齐原创 2023-12-18 05:24:52 · 961 阅读 · 0 评论 -
✺ch2——OpenGL图像管线
符号常量 GL_POINTS 、 GL_LINE_STRIP 、 GL_LINE_LOOP 、 GL_LINES 、 GL_LINE_STRIP_ADJACENCY 、 GL_LINES_ADJACENCY 、接受 GL_TRIANGLE_STRIP 、 GL_TRIANGLE_FAN 、 GL_TRIANGLES 、 GL_TRIANGLE_STRIP_ADJACENCY 、 GL_TRIANGLES_ADJACENCY 和 GL_PATCHES。这包括窗口的大小,尤其是全屏窗口的大小。原创 2023-12-14 09:39:18 · 1059 阅读 · 0 评论