- 博客(124)
- 收藏
- 关注
原创 将光源视角的深度贴图应用于摄像机视角的渲染
将光源视角的深度贴图应用于摄像机视角的渲染是阴影映射(Shadow Mapping)技术的核心步骤之一。这个过程涉及到将摄像机视角下的片段坐标转换到光源视角下,并使用深度贴图来判断这些片段是否处于阴影中。为了将摄像机视角下的片段转换到光源视角下,我们需要计算光源的视图矩阵和投影矩阵。将片段从世界空间转换到光源视角下的裁剪空间:使用光源的视图矩阵和投影矩阵将世界空间中的坐标转换到光源视角下的裁剪空间。将片段从屏幕空间转换到世界空间:使用摄像机的逆投影矩阵和逆视图矩阵将片段从屏幕空间转换到世界空间。
2025-01-07 15:12:47
622
原创 如何将光源视角的深度贴图应用于摄像机视角的渲染
虽然光源的视角和摄像机的视角不同,但我们通过将摄像机视角下的片段投影到光源视角中,确保了我们在光源的视角下正确地比较了深度值。1.4将片段从光源视角下的裁剪空间转换到光源视角下的纹理空间:通过除以 w 分量(透视除法),将裁剪空间中的坐标转换为归一化的设备坐标(NDC),然后再将其映射到深度贴图的纹理坐标系中。我们需要将摄像机视角下的每个像素投影到光源的视角中,然后检查该像素在光源视角下的深度值是否大于深度贴图中的深度值。一旦我们得到了光源视角下的纹理坐标,就可以从深度贴图中采样出对应的深度值。
2025-01-07 15:09:37
341
原创 切片渲染原理
立方体-切片相交:一个盒子和一个平面之间的相交会产生一个有3到6个顶点的多边形(假设这个平面实际上与盒子相交)。不同的情况如图2所示。我们的方法是在顶点处理器中直接计算这样的交点多边形。但是,一个顶点程序只能修改现有的顶点。它既不能在流中插入新的顶点,也不能从流中删除顶点。因此,我们设计了一个顶点程序,它总是接收6个顶点并输出6个顶点。如果交点多边形包含小于6个顶点,则顶点程序将生成一个或多个重复的顶点(即两个相同的顶点,中间的边长度为
2024-12-05 13:43:43
624
原创 基于OpenGL的光照烘培生成光照贴图的流程和代码
光照烘焙的主要目的是将复杂的光照计算预先存储到纹理中,这样可以减少实时渲染时的计算量,尤其在静态场景中。这种技术可以显著提高游戏或者应用的性能。在OpenGL中,利用帧缓冲对象(FBO)来存储光照烘焙的结果并通过纹理映射在最终渲染时使用,是实现光照烘焙的标准方式。
2024-12-02 11:17:22
544
原创 光照贴图原理
光照贴图就是一种将复杂的光照计算预先烘焙到纹理图像中的技术,这样在渲染时就不需要实时计算光照,而是直接将计算好的结果从纹理中提取出来。它是一种非常高效的性能优化手段,尤其在静态场景中表现出色。
2024-12-02 11:15:25
651
原创 纹理映射的坐标对应关系
在 3D 模型的每个顶点中,我们定义了顶点的位置和与之对应的纹理坐标。假设我们正在绘制一个简单的正方体,每个顶点会有一个纹理坐标,用来指示该顶点在纹理图像上的位置。
2024-11-29 11:22:10
736
原创 用三维模型的顶点法向量计算法线贴图
不过,法线贴图通常是在纹理空间(2D 图像的每个像素)内进行操作,并不直接操作三维顶点的法线,而是利用法线贴图中的每个像素值表示一个表面的法向量。假设已经加载了法线贴图,并且传递给片段着色器,在着色器中,我们将法线贴图的 RGB 值重新映射为三维法线向量,进行光照计算。由于法线是通过法线贴图获取的,表面看起来会有更丰富的细节,即使原始网格本身非常简单。在渲染时,法线贴图中的 RGB 值会被用来替代顶点的法线,计算最终的光照效果。会从法线贴图中获取,经过映射后重新生成一个单位法线,代表表面的局部法向量。
2024-11-29 10:10:34
718
原创 assimp读取的TexCoords和u、v坐标
的主要用途是将 2D 纹理图像映射到 3D 模型的表面。Assimp 负责从模型文件中解析顶点的纹理坐标,并将其存储在。通过 OpenGL 的顶点、片段着色器,将这些坐标用于纹理采样,从而为模型渲染出逼真的纹理效果。在 Assimp 中,每个网格的顶点可能包含一个或多个纹理坐标集合,存储在。表示模型顶点的纹理坐标,通常用于将 2D 纹理图像映射到 3D 模型表面。从绑定的纹理图像中采样颜色,并将颜色应用到模型的表面。作为顶点属性传递到片段着色器,用于采样纹理。在 OpenGL 中,之间,对应纹理图像的。
2024-11-29 09:40:48
277
原创 二维四边形显示三维纹理的方式
当纹理坐标超出[0, 1]范围时,纹理的边界会被“拉伸”至边缘颜色,这样超出范围的部分会显示纹理的边缘颜色,常用来处理透明度边界。这样,四边形的显示将不会继续“拉伸”纹理的中间部分,而是使用纹理的边缘像素填充纹理坐标超出范围的区域。:当纹理坐标超出[0, 1]范围时,纹理会重复,超出部分的纹理会根据某种周期性规则重复。:当纹理坐标超出[0, 1]范围时,纹理会沿着纹理坐标反向重复,形成镜像效果。如果你的纹理边界是不规则的(比如透明区域),并且你使用。,超出部分的纹理将会显示其边缘像素,而不是继续延伸。
2024-11-28 11:45:50
286
原创 OpenGL如何裁剪三维纹理为二维纹理
将一个 3D 纹理裁剪为二维纹理的过程实际上是选择一个特定的切片来显示。: 3D 纹理可以通过不同的方向进行“切片”。一般来说,3D 纹理的坐标有xyz三个轴。裁剪方向的选择通常是基于这些坐标轴来决定的。z:选择在z轴上进行切片,意味着将 3D 纹理从z轴方向上按层切开,显示每一层(即选择某个深度层的二维纹理)。这种方式常见于体积数据、医学影像数据的可视化。xy:也可以选择x轴或者y轴来切片,显示不同深度层在x或y方向上的投影。
2024-11-28 11:34:13
185
原创 OpenGL显示三维纹理的二维切片
在三维纹理中,纹理坐标是三维的 (s, t, r),其中 s 和 t 分别对应二维纹理的水平和垂直坐标,r 对应深度坐标。四边形的顶点坐标通常定义为屏幕上的位置,例如 (-1.0, -1.0, 0.0) 到 (1.0, 1.0, 0.0)。纹理坐标则定义为 (0.0, 0.0, r) 到 (1.0, 1.0, r),其中 r 是当前切片的深度坐标。++i):遍历所有切片。当我们渲染一个四边形时,可以通过设置 r 坐标的值来选择三维纹理中的某个切片。FragColor:最终的片段颜色,从三维纹理中采样得到。
2024-11-28 11:30:09
423
原创 屏幕空间环境光遮蔽(SSAO,Screen Space Ambient Occlusion)
是一种基于屏幕空间的环境光遮蔽技术。它通过使用深度缓冲、法线缓冲和随机采样核生成遮蔽效果。以下详细描述 SSAO 的。,常用于光照阶段乘以环境光分量。
2024-11-27 16:00:14
1265
原创 【OpenGL】延迟着色和G缓冲
延迟着色(Deferred Shading)是一种渲染技术,通过将几何信息(如位置、法线和颜色)存储在缓冲区中,分两步完成光照计算,从而提升复杂场景的性能。2. 几何阶段 (Geometry Pass) 在几何阶段,渲染场景,将几何信息存储到 G 缓冲区。3. 光照阶段 (Lighting Pass) 使用屏幕空间四边形渲染光照。根据需要添加后期处理,直接在 FragColor 上进行额外处理即可。创建帧缓冲对象 (Framebuffer Object, FBO)2.3. 创建颜色 + 镜面强度缓冲区。
2024-11-27 14:09:05
1254
原创 加载模型的效果
Shader ourShader("loading.vs", "oading.fs");Model ourModel("outputmesh.obj");
2024-09-13 14:06:50
138
原创 #include <pcl/point_types.h>#include <pcl/PolygonMesh.h> int main() { pcl::PointCloud<pcl::Po
/ 第一个顶点的索引。// 第二个顶点的索引。// 第三个顶点的索引。// 现在mesh包含了一个三角形,它的顶点是cloud中的点。// 如果需要,可以保存网格到文件。// 假设我们有一个简单的三角形。// 创建一个三角网格对象。// 填充点云数据...// 设置三角形索引。
2024-09-06 17:55:00
338
原创 #include <iostream>#include <vector>#include <ctime>#include <pcl/point_cloud.h>#include <pcl/oc
boost::shared_ptr<pcl::visualization::PCLVisualizer>viewer(new pcl::visualization::PCLVisualizer("显示点云"));//设置背景颜色为黑色。// 对点云着色可视化 (red).// 等待直到可视化窗口关闭。// 初始化点云可视化对象。
2024-09-05 12:28:38
383
原创 opengl箱子的显示
单个旋转箱子:注意要使用文件夹里自带的awsomeface.png。单个箱子:注意要使用文件夹里自带的awsomeface.png。
2024-07-01 15:26:07
1075
原创 opengl+vs2013环境配置
4、打开vs2013,新建一个win32控制台程序,打开 视图-》属性管理器-》Debug|x64,右键打开属性,在VC++目录-》库目录下新增目录D:\opengl,提前在D盘目录下新建一个文件夹opengl,将glut64.lib拷到opengl目录下(记得将glut64.lib改成glut32.lib)====================完成上述4个步骤即可以跑通vs2013 Debug x64环境=================如:C:\Windows\SysWOW64 (64位系统)
2024-05-06 10:20:06
283
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人