自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

原创 C++ gtest单元测试

早期发现问题:在软件开发的早期阶段发现潜在的问题和错误,避免后续开发过程中的不必要的麻烦。提高代码质量:有助于提高代码质量,减少bug,增强代码可维护性。提高开发效率:支持重构和修改,提高开发效率。

2025-05-25 20:43:45 1098

原创 C++ 正则表达式简介

当你需要在字符串中包含)"// 结果: World "with" ) special chars\在这个例子中,hello是我们选择的分隔符,确保它可以正确地包围我们的字符串内容而不引起解析错误。

2025-05-24 20:35:40 1311

原创 C++ 忘掉std::cout吧,fmt和spdlog的结合

我们在学习C++时,经常使用std::cout这种方式在学习或演示时非常方便,但实际开发中,我们通常会使用一些日志库,如:spdlog等。补充说明。

2025-05-23 20:50:05 730

原创 C++ 好用的命令行解析库cmdline和CLI11

在 C++ 程序中,我们可以通过main函数的参数来接收命令行参数。

2025-05-22 21:13:29 583

原创 C++ vscode配置c++开发环境

在windows下开发C++,可以使用或进行开发。以下是两者的简要区别本文介绍在下配置 C++ 开发环境的方法。请自行安装vcpkgcmake等相关软件。

2025-05-21 22:01:50 1275

原创 轻量级高性能推理引擎MNN 学习笔记 04.线性回归

MNN 官方给的iOS Demo中,输入是图片,输出是分类结果,相对来讲,略微有些复杂,我们现在用一个最简单的线性回归模型,来说明MNN的用法。该线性回归是y=ax+b。

2025-05-20 21:42:41 464

原创 计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 13.几何着色器(二)爆炸效果&修改图元类型

我们只需取三个顶点的法向量,然后将其相加并求平均,即可得到环面的法向量。这样就能形成爆炸效果。我们希望将每个三角形沿其表面法向量向外移动,则实际上是将组成环面的三角形向外“爆炸”。这是几何着色器中的一个常见应用,我们使用几何着色器来模拟爆炸效果。上图是将三角形图元修改为线段图元,我们只需要修改几何着色器即可,核心思路是形成新的两个点。

2025-05-19 21:31:12 511

原创 计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 13.几何着色器(一)修改顶点

但该代码有一个问题,就是如果gl_Position已经是在投影空间后,是不能直接去进行修改顶点的,我们需要在摄像机空间中来修改顶点,然后再使用投影矩阵。几何着色器是OpenGL管线中的一个可选阶段,位于顶点着色器和片段着色器之间。最后,我们需要在几何着色器中修改gl_Position,将顶点位置乘以投影矩阵,这样外面的顶点向外膨胀,里面的顶点向内收缩。上述代码中,几何着色器将每个顶点沿法线方向移动0.5个单位,从而实现膨胀效果。是几何着色器中的一个内置变量数组,用于访问来自顶点着色器的内置变量值。

2025-05-18 21:15:17 1012

原创 计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 12.曲面细分

曲面细分着色器(Tessellation Shader)是OpenGL 4.0及以上版本引入的一种可编程着色器阶段,用于在GPU上对几何体进行细分,将粗糙的多边形网格自动细分为更平滑、更精细的曲面。它主要用于实现高质量的曲面渲染,如贝塞尔曲面、NURBS曲面等。

2025-05-17 17:58:34 1267

原创 计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 10.增强表面细节(二)法线贴图

因此,在着色器中计算切线向量时,需要使用一些技巧来保证切线向量与顶点法线垂直。TBN空间(Tangent Space)是法线贴图中的一个关键概念,它由三个相互垂直的向量构成:切线(Tangent)、副切线(Bitangent)和法线(Normal)。实际中,切线向量通常由模型数据提供,例如顶点法线、顶点切线等。可以在顶点着色器中计算TBN矩阵,并在片段着色器中应用它,也可以在片段着色器中计算TBN矩阵。高度贴图是一种使用灰度图来存储表面高度信息的技术,用于在渲染时动态改变表面几何形状。

2025-05-16 19:47:52 1134

原创 轻量级高性能推理引擎MNN 学习笔记 03.在iOS运行MNN的示例

详细请参考,完整代码请在下载。

2025-05-15 22:31:00 898

原创 计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 10.增强表面细节(一)过程式凹凸贴图

过程式凹凸贴图是一种在3D图形渲染中用于增强表面细节的技术,通过数学函数或算法动态计算表面法线的扰动,从而在不增加几何复杂度的情况下创造出表面凹凸的视觉效果。其主要特点包括动态计算、资源效率和灵活性。过程式凹凸贴图的工作原理是在着色器中通过数学函数计算法线偏移,修改原始法线方向,并使用修改后的法线进行光照计算,产生凹凸的视觉效果。常见应用包括水面波纹效果、规则的网格纹理、程序化生成的地形细节和动态的表面扰动。与传统的凹凸贴图相比,过程式凹凸贴图更适合表现动态变化的表面效果,并且不受贴图分辨率的限制。

2025-05-14 12:19:02 824

原创 轻量级高性能推理引擎MNN 学习笔记 02.MNN主要API

注意:本学习笔记只介绍了我在学习过程中常用的API ,更多请参考官方文档。

2025-05-13 20:04:35 871

原创 计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 09.天空和背景

天空盒是一种在3D场景中模拟远处背景的技术,通过将场景包裹在一个立方体或球体中,并在其内表面贴上纹理来实现。天空盒通常用于表示天空、云、山脉等远景背景,能够增强场景的真实感和沉浸感。

2025-05-12 21:05:47 1406

原创 轻量级高性能推理引擎MNN 学习笔记 01.初识MNN

MNN是一个轻量级高性能推理引擎,由阿里巴巴团队开发,支持Android、iOS、Windows、Linux、MacOS、WebGL等

2025-05-11 21:41:16 1152

原创 计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 08.阴影

没有阴影的渲染效果如下,看起来不真实:有阴影的渲染效果如下,看起来真实:显示阴影有两种方式,一种是原书中的方式,另一种是采用光线追踪技术,该技术可以参考。

2025-05-10 20:24:44 1433

原创 计算机图形学编程(使用OpenGL和C++)(第2版) 学习笔记 07.光照

在实际应用中,特别是在使用4x4矩阵处理变换(如模型视图矩阵或模型视图投影矩阵)的情况下,有时会将3x3的法线矩阵扩展为4x4矩阵以适应现有的数学库或者为了与位置变换统一起来处理。Phong光照模型是一种经典的光照模型,用于模拟真实世界中的光照效果,它将光照分为环境光(Ambient)、漫反射光(Diffuse)和镜面反射光(Specular)三个部分。由于法线向量表示的是表面的方向,它的变换规则和普通的位置向量有所不同。环境光模拟了场景中全局的、均匀的光照,它不依赖于光源的位置和物体的朝向。

2025-05-09 07:41:10 1076

原创 计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 05.纹理贴图

在定义顶点坐标时,同时定义纹理坐标,即每个顶点除了有(x,y,z)坐标外,还有(u,v)纹理坐标。这种方式参见第4章 定义顶点坐标同时定义顶点颜色的示例顶点坐标和纹理坐标分开定义,此种方式容易理解,在配置时也比较灵活,本节代码使用此种方式// 生成 VAO// 绑定 VAO// 生成 VBO// 绑定 VBO// 将顶点数据传递到 VBO// 绑定 VBO// 设置顶点属性指针:坐标// 启用顶点属性// 绑定 VBO// 将纹理坐标数据传递到 VBO。

2025-05-08 07:57:15 1364

原创 计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 04.管理3D图形数据

是 OpenGL 中用于设置顶点属性指针的函数,它将顶点缓冲区中的数据与顶点着色器中的顶点属性绑定。是 OpenGL 中用于启用顶点属性数组的函数。它指定了某个顶点属性(如位置、颜色、纹理坐标等)是否被激活,从而允许 OpenGL 在渲染时使用该顶点属性。

2025-05-07 06:57:49 1093

原创 计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 03.数学基础

实际使用中,我们通常使用齐次坐标,即vec4来表示一个点,其中第四个分量通常为1.0f,表示该点位于三维空间中。GLM 库中提供了glm::transpose()函数,GLSL中提供了transpose()函数,用于计算矩阵的转置矩阵。在OpenGL中,有一个固定在原点,面向z轴负方向的相机,即相机位置为(0,0,0),观察方向为(0,0,-1)的两种表示方式 ,我们通常将向量的起点放在原点,即起点为(0,0,0),向量的终点为(x,y,z)。在GLM中,旋转矩阵使用glm::rotate()函数来创建。

2025-05-06 06:45:41 1150

原创 计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 02.OpenGL图像管线

OpenGL更加灵活,适合跨平台开发,支持多种语言,适合需要兼容多平台的项目。Direct3D更适合 Windows 和 Xbox 平台开发,工具链与 Visual Studio 集成,适合微软生态系统的开发者。OpenGL 与普通的软件不同,其是运行在GPU上的。

2025-05-05 07:53:32 1230

原创 计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 01.环境搭建

将下载的OpenGLtemplate.zip 解压到 C:\OpenGLtemplate,也可放在其它目录下。创建一个自定义的项目模板,以便在 Visual Studio 中快速创建预配置的项目。通过这种方式,开发者可以避免重复配置项目环境,例如添加依赖库、设置编译选项等。// 附加依赖项 输入以下内容 glfw3 . lib采用 C++ 17标准在实际项目运行时,需要将glew32.dll放在可执行文件所在目录下。

2025-05-04 11:46:49 650

原创 ShaderToy学习笔记 08.阴影

阴影是3D渲染中一个重要的视觉效果,它能够增强场景的深度感和真实感。

2025-05-03 12:19:04 1474

原创 ShaderToy学习笔记 07.Phong光照模型

Phong光照模型是一种经典的光照模型,用于模拟真实世界中的光照效果,它将光照分为环境光(Ambient)、漫反射光(Diffuse)和镜面反射光(Specular)三个部分。最终的光照颜色是这三部分光照颜色的总和。Phong Reflection Model 来自上的数据下面详细介绍各部分的数学公式及整体公式。

2025-05-02 11:21:49 1222

原创 ShaderToy学习笔记 06.摄像机

摄像机在shader中主要用于定义观察空间,它决定了我们如何看到3D场景。

2025-05-01 11:05:38 873

原创 ShaderToy学习笔记 05.3D旋转

由于矩阵乘法不满足交换律,所以变换的顺序十分关键。

2025-04-29 22:10:05 943

原创 ShaderToy学习笔记 04.绘制多个3D对象

float d;vec3 color;

2025-04-28 07:49:51 426

原创 ShaderToy学习笔记 03.多个形状和旋转

SDF在shader中指的是"Signed Distance Function"(有符号距离函数)。这是一个非常重要的概念,让我详细解释一下:SDF 是一个返回点到形状表面距离的函数返回值的符号表示点是在形状内部(负值)还是外部(正值)表面上的点返回值为0可以精确描述几何形状计算效率高便于实现形状的混合和变形可以轻松实现平滑过渡和边缘效果。

2025-04-26 16:54:19 897

原创 ShaderToy学习笔记 02.圆

圆的方程是:(x^2 + y^2 = r^2),其中(r)是圆的半径。我们可以使用来验证一下。输入 x^2 + y^2 -1=0,即可得到圆。类似下图。

2025-04-26 16:44:57 937

原创 ShaderToy学习笔记 01.基础知识

ShaderToy学习笔记先欣赏一下用ShaderToy画出来的效果上图代码在 https://www.shadertoy.com/view/Ms2SD1本系列是ShaderToy的入门学习笔记,主要记录学习心得及一些学习过程中遇到的问题和解决方案。

2025-04-26 16:32:59 681

原创 OpenGL shader开发实战学习笔记:第十二章 深入光照

我们在前面的章节中,已经介绍了平行光的基本原理和实现步骤平行光的基本原理是,所有的光都从同一个方向照射到物体上,这个方向就是平行光的方向。

2025-04-21 21:28:25 1124

原创 OpenGL shader开发实战学习笔记:第十一章 立方体贴图和天空盒

立方体贴图(Cube Map)是一种纹理,它由六个纹理图像组成,每个纹理图像对应一个方向。这些方向通常是立方体的六个面,分别是“前面”,“后面”,“右面”,“左面”,“上面”,“下面”。

2025-04-17 23:11:01 717

原创 OpenGL shader开发实战学习笔记:第十章 法线贴图

我们如果想要在盾牌上实现凹凸感,应该如何做?一种方法是添加更多的顶点来建模更多的细节,但是网格的顶点越多,渲染网格所需的顶点着色器计算就越多,网格占用的内存就越多。大多数游戏不能仅仅因为凹凸和刮痕而为每个物体添加数千个顶点。因此,我们用法线贴图来解决这个问题。法线贴图是使用一张纹理来存储法线信息,然后通过纹理采样来得到法线信息,最后将法线信息应用到物体上。法线贴图是在每一个像素中存储归一化的向量而不是颜色的纹理。由于不存在负颜色,因此纹理无法表示小于0的值。为了解决这个问题,我们需要将法线从−11。

2025-04-16 22:25:28 1091

原创 OpenGL shader开发实战学习笔记:第九章 第一个光照模型

镜面光照(Specular Lighting)是计算机图形学中用于模拟物体表面反射高光的一种光照模型。当光线照射到光滑表面时,会以特定角度反射出去。如果观察者恰好处于反射光的路径上,就会看到明亮的高光区域,这就是镜面光照所模拟的效果。镜面光照的计算通常依赖于多个因素,包括光源的方向、观察者的方向、物体表面的法线方向以及物体表面的光泽度。光泽度越高,高光区域就越小且越亮;反之,光泽度越低,高光区域就越大且越暗淡。在实际应用中,镜面光照常与环境光、漫反射光照结合使用,以创建更真实的光照效果。

2025-04-14 21:49:12 930

原创 OpenGL shader开发实战学习笔记:第八章 漫反射光照

法线是垂直于表面并向外的向量,它决定了表面如何反射光线。圆环网格的法线—蓝色线段显示了每个顶点的法线方向。目前我们已经知道网格中存储了网格中每个顶点的位置、颜色和纹理坐标信息。在openFrameworks中,是在location=2中存储法线向量。:不同的引擎和框架可能会以不同的方式存储法线。

2025-04-12 16:17:39 1136

原创 OpenGL shader开发实战学习笔记:第七章 第一个3D项目

ofMesh类是一个三维网格类,用于存储顶点和面信息。ofMesh类提供了load方法来加载ply文件。load方法的参数是ply文件的路径。透视投影是一种常见的投影方式,它可以将3D场景映射到2D屏幕上。透视投影可以将远处的物体缩小,而近处的物体放大,从而产生近大远小的效果。实际项目中,我们通常会使用3D建模软件(如Blender)来创建3D模型,然后导出成3D模型文件。ply格式是一种文本格式,用于存储几何数据。ply文件由三部分组成:文件头、顶点数据和面数据。本书以ply格式的网格文件为例进行讲解。

2025-04-07 21:42:32 614

原创 OpenGL shader开发实战学习笔记:第六章 摄像机和坐标系

视图矩阵(View Matrix)是一个用于将世界坐标系中的物体转换到摄像机视角的矩阵。它定义了摄像机的位置、方向和朝向,从而决定了场景中物体在摄像机视角下的显示方式。

2025-04-06 22:46:27 757

原创 OpenGL shader开发实战学习笔记:第五章 使物体动起来

由于矩阵乘法不满足交换律,所以变换的顺序十分关键。

2025-04-06 21:32:50 732

原创 OpenGL shader开发实战学习笔记:第四章 半透明与深度(二)绘制云朵、太阳及小人动起来

要从精灵表中选择单个帧,首先要将四边形的UV坐标乘以二维向量,以便将它们缩放到精灵表纹理中单个动画帧的大小。src 和 dst 是需要进行混合的两个片元的颜色值的名称。dst 是混合发生时后置缓冲的当前值,src 是需要混合的片元的颜色值。1、对于不透明的物体,我们需要开启深度测试,确保正确的深度排序。2、对于半透明的物体,我们需要开启Alpha混合,以支持半透明效果。片元写入后置缓冲的顺序很重要,需要把不透明的片元先写入后置缓冲,再把透明的片元写入后置缓冲。2、半透明的物体,如云。

2025-03-29 22:42:31 478

原创 OpenGL shader开发实战学习笔记:第四章 半透明与深度(一)绘制森林和小绿人

颜色通常由红(Red)、绿(Green)、蓝(Blue)三个通道组成,也就是 RGB 颜色模型。而 Alpha 通道则是在此基础上添加的第四个通道,形成了 RGBA 颜色模型。

2025-03-29 11:44:38 528

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除