- 博客(42)
- 问答 (1)
- 收藏
- 关注
原创 [C++] 模板编程-03 typename关键字
在模板参数列表中,typename和class可以互换使用在模板参数内部,如果需要引用模板参数的一些嵌套的数据类型,则需要使用typename
2024-07-26 11:15:00
99
原创 [C++] 模板编程-02 类模板
声明public:定义:在定义时不但要加载类名的限定符,还要声明模板参数,以及传递模板参数a : b;如果我们将模板类定义在cpp中,那么我们就会遇到未定义的错误行为对于模板类的函数声明和实现必须放在同一个.h里面2.1 原因延迟实例化: 首先当编译器遇到类模板的声明时,并不会为这个类模板创建任何的代码,因为类模板的实例化是在调用它时才会产生对应的代码。如果成员函数定义位于类模板定义之外,比如在另一个.cpp文件中,那么就需要显式地实例化这些成员函数。
2024-07-25 16:33:22
315
原创 [qt] qt程序打包以及docker镜像打包
如果系统是只能离线安装,那么需要先配置镜像仓库,并且为yum源指定本地镜像仓库的位置。其实很简单只需要在/etc/yum.repos.d目录下配置一个一.repo为后缀的文件,然后将我们需要的离线rpm软件包放到一个指定目录下即可。这个工具的主要作用是为了找到qt运行所需要的库文件,我们只需要在GitHub下载可执行文件即可。#qt库文件路径这个很重要,Linuxdeployqt需要设置这个才能找到程序所需要的动态库。#qt安装路径的可执行文件目录 比如qmake等。#qt安装路径的目录。
2024-06-10 13:24:58
1138
原创 [GDB] GDB调试
UNIX及UNIX-like下的调试工具。虽然它是命令行模式的调试工具,但是它的功能强大到你无法想象,能够让用户在程序运行时观察程序的内部结构和内存的使用情况。
2024-05-27 14:23:04
857
原创 [OpenGL] opengl切线空间
对于法线贴图来说,我们知道它就是一个2D的颜色纹理,根据rgb来映射法线对应的xyz,从而达到在同一个平面上有多个不同方向法线的效果,这样就能根据光照的计算结果不同,从而得到凹凸不平(或者说更加细节)的平面。
2024-05-25 15:42:44
649
原创 [OpenGL] 法线贴图
如下图所示: 左边第一个是传入了上百万的顶点坐标实现的效果,而最中间的是传入了500个顶点实现的效果,最后一个是在中间的基础上运用的法线贴图实现的效果,他们的效果几乎是一样的。我们知道不是所有的物体表面都是光滑平整的平面,比如我么要绘制一个人脸,但人脸会由,头发,五官,甚至是微表情等组成这些都是具有凹凸感的,那我们该如何体现出这种凹凸感呢?
2024-05-23 15:31:57
1054
1
原创 c++编码规范
对于编码规范这个东西,没有一个定式,主要是由于大型产品的开发通常由很多的人协同作战,如果不统一编程规范,最终合到一起的程序,其可读性将较差,这不仅给代码的理解带来障碍,增加维护阶段的工作量,同时不规范的代码隐含错误的可能性也比较大。
2024-05-17 17:03:39
807
原创 [OpenGL] 点光源阴影(万向阴影贴图)
由于点光源是一个点向四周发散的光线,所以这将导致点光源会以不同的角度到达场景中的不同表面,造成近大远小的效果,所以要采用透视投影矩阵来处理点光源的阴影,透视投影能够正确反映这种随着距离增加而大小和亮度逐渐变化的现象。
2024-05-15 17:11:25
929
原创 [OpenGL] PCF 柔和阴影
PCF通过在每个像素周围进行多次样本采样,并对这些样本进行平均来实现阴影边界的模糊效果,从而平滑阴影的边缘,避免了由于阴影贴图分辨率限制导致的硬阴影边缘。所有的周围像素的结果结合在一起,进行平均化,我们就得到了柔和阴影。
2024-05-13 16:19:24
482
原创 [QT] 断点调试
显示当前的函数调用堆栈,帮助你了解程序执行的路径,以及它是如何到达当前执行点的。你可以点击堆栈中的任何一行来跳转到相应的源代码位置。
2024-05-13 11:17:15
990
原创 分辨率与像素
总之,分辨率确定了屏幕上能够显示的像素数量,而像素是组成数字图像的基本单位。像素密度则描述了每英寸的像素数量,反映了图像在显示设备上的清晰度和细节水平。
2024-04-30 15:51:48
904
原创 [openGL] 高级光照-Gamma矫正与衰减
对于经过Gamma校验后中间色调(尤其是暗部)实际显示出来的亮度低于它们应有的线性亮度。图像的整体亮度相比于未校正时会显得更亮,尤其是在中间色调和暗部区域。可能你会敏锐的发现,为什么上面的图片未校验的反而更亮呢?试想一下我们未校验使用的纹理是不是没有经过处理,也就是说他的纹理颜色是位于sRGB空间中的,而我们并没有对他进行压缩(或者说逆Gamma处理),所以它输出的肯定会更亮,如果尝试在渲染时对(校正和不校正)使用同一个纹理,那么Gamma校验后的效果肯定定更亮。
2024-04-19 17:38:05
715
原创 [openGL] 高级光照-Gamma矫正
在了解Gamma之前我们应该先知道一种物理特性: 输出亮度 = 输入电压 的 2.2次方幂监视器这个经过2.2次方幂处理过后就相当于是一种压缩处理(可以理解为将图片变暗了至于为什么要这样处理将图片变暗,这将在后面进行说明,当然理解为压缩处理是不对的,但后面会修正。)\,每种显示设备的这个值都不一样,但是大多数都是2.2,这个2.2就叫做监视器的Gamma。输出亮度 = 输入电压 ^ 2.2。
2024-04-17 16:52:25
975
原创 【git】git使用手册
2021AY/testfirst.git 远程仓库的地址 如果配置了SSH可以使用SSH地址。#origin 表示创建一个别名基于远程仓库 以后用这个别名就可以。git commit -m "初始化提交"#提交暂存区所有改动到本地仓库。# 将本地分支推送到远程仓库。#将修改的文件添加到暂存区。
2024-03-27 17:37:07
1167
原创 [密码学] 密码学基础
这是因为自行设计的密码算法可能存在未知的漏洞或弱点,而公认的标准算法经过了大量的安全分析和测试。密码算法是一种特殊的算法,它通过数学和计算机科学的技术手段,实现对信息的加密和解密,确保信息在传输过程中不被未经授权的人员读取、篡改或伪造。在互联网的通信中,数据是通过很多计算机或者通信设备相互转发,才能够到达目的地,所以在这个转发的过程中,如果通信包被其他人捕获到,那么数据就不再安全了。密钥就相当于是钥匙,如果要是丢了那么数据必然是不安全的,任何形式的密码,如果密钥丢了,数据的安全性就无法保证了。
2024-03-25 17:12:49
863
原创 [openGL] qt5版本+mingw编译Assimp库+调用
Assimp官网上已经停止更新截至在3.3.1版本,但是这个版本编译是最稳定的,较新的版本需要在github上下载编译我使用的CMAKE版本是: CMAKE 3.20.0 -->软件包名-->cmake-3.20.0-rc1-windows-x86_64.msiAssimp版本是 3.3.1--->
2024-03-25 13:25:54
1136
4
原创 [CMake] cmake入门
CMake 跨平台的开源构建工具。cmake可以根据CmakeLists.txt文件指定生成器而生成相应的构建系统文件,比如Makefile,Ninja,Visual Studio项目文件等。因此开发者只需编写一个 CMakeLists.txt 文件,就可以在不同的操作系统和编译器上构建项目。简单来说CMake和make的区别就行,Cmake主要用于生成构建系统的文件,而Make则是实际执行构建的过程。并且Cmake也更加灵活,编写起来也更加容易。
2024-03-25 11:27:23
706
原创 [openGL] 高级openGL实现 -深度测试
线性深度缓冲这个公式需要一个Z值来计算他的深度值,比如当我们设置near为1,far为50时对应的关系就应该如下图所示:2.1非线性深度缓冲重要的是要记住这种方式的深度缓冲中的值在屏幕空间中不是线性的编辑深度值很大一部分是由很小的z值所决定的,这给了近处的物体很大的深度精度。这个(从观察者的视角)变换z值的方程是嵌入在投影矩阵中的,所以当我们想将一个顶点坐标从观察空间至裁剪空间的时候这个非线性方程就被应用了三
2024-03-23 14:13:07
1186
1
原创 [QSS] QSS 入门
同时,groupBox内所有控件的文字颜色都会变为红色,除非它们自己另外设置了颜色。在这种情况下,groupBox内的所有QPushButton默认会继承groupBox的样式(背景色为蓝色),但名为。当父控件设置了对子控件通用的样式规则,并且子控件自身没有设置(或重写)对应的样式属性时,子控件会继承父控件的样式。若子控件自身设置了某个属性的样式,则该属性会优先使用子控件自身的样式,而不是继承父控件的样式。一些复杂的部件,可能需要访问子部件,比如Qt下拉框中的箭头样式、、在选择器之后用冒号隔离。
2024-03-06 19:41:36
242
原创 [OpenGL] 着色器语言GLSL
GLSL(Graphics Library Shader Language))是一种类C语言,它是一种为OpenGL设计的编程语言,用于编写图形着色器程序。着色器是运行在图形处理器(GPU)上的小型程序,它们允许开发者对图形管线的各个阶段进行编程控制,以实现复杂的视觉效果和实时渲染功能。这里主要借鉴的openGL中文手册,唯一不同的是,测试示例和代码改成了Qt+OpenGL,而并非采用原生的C++版本的测试调用参考此处GLSL原生C++版本GLSL使用请点击此处。
2024-03-05 18:00:09
1034
1
原创 [创建型模式] 单例模式
单例模式是一种特别常见,也特别简单好用的模式,首先它确保这个类又且仅有一个实例,并且可以全局访问,并且创建之后便与程序同生共死(生命周期存在于整个应用程序)
2024-03-05 12:35:24
236
1
原创 [创建型模式] 工厂模式
继上篇:如果有新的汽车品牌可以供消费者来选择时,这时候要想复用原来的代码就需要打破简单工厂模式中的工厂类,这虽然也可以解决实际的业务需求,但很明显不符合设计模式的思想(封闭原则)封闭原则 : 类应该是对扩展开放,对修改封闭.这时候我们就需要去抽象工厂类,让每个工厂类去继承这个抽象工厂类,这样在以后有新的品牌加入的时候就可以直接继承这个抽象工厂类来生成产品二 UML 类图。
2024-02-29 16:56:16
221
原创 Linux快捷工具
[系统启动模式] 这个命令如果是经常使用shell终端的用户,只需要了解这两个即可,也不要轻易的去尝试改变系统的启动模式.xxd: 可以为给定的标准输入或者文件做一次十六进制的输出,它也可以将十六进制输出转换为原来的二进制格式。命令格式:scp [选项] [文件] [用户名]@[地址]:[目标路径]命令格式 scp [用户名]@[地址]:[文件路径] [下载路径]在window的doc和linux的shell中命令格式是一样的。|: 管道 将前一个命令的输出作为后面的输入。
2024-02-29 11:25:40
335
原创 QT常见问题和BUG解决
1> 如果电脑上安装了两个不同版本的QTCreator比如qt6.6.x的IDE版本是QTCreator12.x 而qt5.12.x的IDE版本是QTCreator4.10.x,这时候在高版本的qtCreator上同时配置两个版本的qt后,有可能会导致IDE一直打不开,这时候只需要删除C:\Users\18071\AppData\Roaming\QtProject\QtCreator.ini配置文件就可以。
2024-02-29 11:04:27
265
原创 [创建型模式] 简单工厂模式
分类: 创建型模式思想: 工厂模式顾名思义就是产生产品的地方,也可以理解成产生对象的地方,而在设计模式中最终的设计一般都是需要满足: 高层调用者越简单越好,封装一些复杂的实现过程。优点: 定义一个用于创建对象的接口,但不直接实现该接口。它根据传入的参数,动态地创建并返回相应的对象。这种模式的优点是简单易用缺点:违反了开闭原则,即当需要添加新的产品时,需要修改工厂类的代码。
2024-02-28 15:30:20
593
1
原创 UML类图快速上手
聚合是一种若的拥有关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分。例如,轮胎和汽车的关系,轮胎是汽车的一部分,但它也可以独立存在,不属于汽车时,它的属性和行为都不会发生变化。是一种强的“拥有”关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。一个类需要使用另一个类的对象作为参数,或者一个类使用另一个类的对象作为它的数据成员,或者一个类向另一个类发送消息等情况,都可以被认为是依赖关系。它是一种静态的结构图,主要用来描述系统的类的集合、类的属性以及类之间的关系。
2024-02-27 16:47:18
784
原创 设计模式基础
设计模式主要目标是:可复用,对于一个好的程序员来说需要懂得如何,向上抽象思维(面向对象,组件封装,设计模式,架构模式),向下理解底层思维(语言构造,编译转换,内存模型,运行时机制)。而设计模式主要偏向于如何对抽象思维的理解。因为底层的变化不大,而软件最复杂的根本原因其实就是变化。:三大面向对象机制封装: 隐藏内部实现继承:复用现有代码多态:改写对象行为**向上:**深刻把握面向对象机制所带来的抽象意义,理解如和通过这些机制来表达现实世界,掌握什么是“好的面向对象设计”。
2023-09-26 10:00:30
55
原创 vim插件
https://github.com/chxuan/vimplus vimplus开源地址我这里只是介绍了cpp插件的详细安装,其余请参考vimplus开源地址 readme文件,适用centos、ubuntu64位。
2023-08-14 17:00:12
89
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人