- 博客(526)
- 资源 (8)
- 收藏
- 关注
原创 STM32单片机学习5--STM32中断
单片机无系统执行逻辑:main函数–>while死循环:外部中断,通过GPIO检测输入脉冲,引起中断事件,打断原来的代码执行流程,进入到中断服务函数中进行处理,处理完后再返回到中断之前的代码中执行。
2024-01-23 18:00:43 938
原创 STM32单片机学习4--STM32控制八段码
八段码一般会引出9个引脚,其中7个引脚显示数字(或某些字母),1个显示小数点,1个作为片选端。数码管:实际上是多个LED按照一定顺序排列,并加上遮罩所构成的元件。共阳在这端输出低电平时点亮,高电平时会熄灭,共阴则相反。根据连接方式的不同,数码管分为。共阴和共阳互为对方的按位取反。
2024-01-23 15:05:03 496
原创 QGraphicsItem器件移动及旋转相关问题
官方注释:在父坐标系中根据坐标pos设置图元的位置。如果图元没有父图元,pos就是场景坐标系。当然,也可以从构造函数中传递参数设置父子层级。
2023-12-29 16:31:51 436
原创 跟着LearnOpenGL学习12--光照贴图
在跟着LearnOpenGL学习11–材质中,我们讨论了让每个物体都拥有自己独特的材质从而对光照做出不同的反应的方法。这样子能够很容易在一个光照的场景中给每个物体一个独特的外观,但是这仍不能对一个物体的视觉输出提供足够多的灵活性。我们将整个物体的材质定义为一个整体,但现实世界中的物体通常并不只包含有一种材质,而是由多种材质所组成。想想一辆汽车:它的外壳非常有光泽,车窗会部分反射周围的环境,轮胎不会那么有光泽,所以它没有镜面高光,轮毂非常闪亮(如果你洗车了的话)。
2023-12-26 16:28:18 1231
原创 跟着LearnOpenGL学习11--材质
在现实世界里,每个物体会对光产生不同的反应。比如,钢制物体看起来通常会比陶土花瓶更闪闪发光,一个木头箱子也不会与一个钢制箱子反射同样程度的光。有些物体反射光的时候不会有太多的散射(Scatter),因而产生较小的高光点,而有些物体则会散射很多,产生一个有着更大半径的高光点。如果我们想要在OpenGL中模拟多种类型的物体,我们必须针对每种表面定义不同的材质(Material)属性。在跟着LearnOpenGL学习10–基础光照这一篇中,我们定义了一个物体和光的颜色,并结合环境光与镜面强度分量,来决定物体的视觉
2023-12-26 13:00:37 1153
原创 跟着LearnOpenGL学习10--基础光照
现实世界的光照是极其复杂的,而且会受到诸多因素的影响,这是我们有限的计算能力所无法模拟的。因此OpenGL的光照使用的是简化的模型,对现实的情况进行近似,这样处理起来会更容易一些,而且看起来也差不多一样。这些光照模型都是基于我们对光的物理特性的理解。其中一个模型被称为冯氏光照模型环境(Ambient)、漫反射(Diffuse)和镜面(Specular)光照。环境光照(Ambient):即使在黑暗的情况下,世界上通常也仍然有一些光亮(月亮、远处的光),所以物体几乎永远不会是完全黑暗的。
2023-12-25 10:45:22 869
原创 C/C++ 静态代码检查工具cppCheck
Cppcheck是一个用于C/C++代码的静态分析工具,它可以帮助开发者检测代码中的错误;Cppcheck可以检测出许多类型的错误,包括语法错误、未使用的函数、内存泄漏、未初始化的变量等;Cppcheck还支持用户自定义规则,这使得开发者可以根据自己的需求定制Cppcheck的行为;使用--suppress如果你想要忽略某些警告,可以在命令行中使用 --suppress 选项。
2023-12-13 16:16:15 365 1
原创 批处理下载视频
如果我们需要下载同一个系列的多个视频时,一个一个操作太过繁琐,可以使用Windows的批处理来进行操作。例如,打开B站,随便点开一个视频,把网址复制一下,然后打开。之后,我们就可以使用命令行下载视频文件了;视频网址直接【Ctrl + V】粘贴就行。,然后回车,视频就会下载到。annie 视频网址。
2023-07-25 11:26:53 311
原创 跟着LearnOpenGL学习8--摄像机
前面的教程中我们讨论了观察矩阵以及如何使用观察矩阵移动场景(我们向后移动了一点)。OpenGL本身没有摄像机(Camera)的概念,但我们可以通过把场景中的所有物体往相反方向移动的方式来模拟出摄像机,产生一种我们在移动的感觉,而不是场景在移动。本节我们将会讨论如何在OpenGL中配置一个摄像机,并且将会讨论FPS风格的摄像机,让你能够在3D场景中自由移动。我们也会讨论键盘和鼠标输入,最终完成一个自定义的摄像机类。当我们讨论摄像机/观察空间(Camera/View Space)的时候,是在讨论以摄像机的视角作
2023-06-13 15:59:26 804
原创 跟着LearnOpenGL学习7--坐标系统
OpenGL希望在每次顶点着色器运行后,我们可见的所有顶点都为标准化设备坐标(Normalized Device Coordinate, NDC)。也就是说,每个顶点的x,y,z坐标都应该在-1.0到1.0之间,超出这个坐标范围的顶点都将不可见。我们通常会自己设定一个坐标的范围,之后再在顶点着色器中将这些坐标变换为标准化设备坐标。然后将这些标准化设备坐标传入光栅器(Rasterizer),将它们变换为屏幕上的二维坐标或像素。
2023-06-07 11:33:36 611
原创 跟着LearnOpenGL学习6--变换
尽管我们现在已经知道了如何创建一个物体、着色、加入纹理,给它们一些细节的表现,但因为它们都还是静态的物体,仍是不够有趣。我们可以尝试着在每一帧改变物体的顶点并且重配置缓冲区从而使它们移动,但这太繁琐了,而且会消耗很多的处理时间。我们现在有一个更好的解决方案,使用(多个)矩阵(Matrix)对象可以更好的变换(Transform)一个物体。矩阵是一种非常有用的数学工具,尽管听起来可能有些吓人,不过一旦你理解了它们后,它们会变得非常有用。为了深入了解变换,我们首先要在讨论矩阵之前进一步了解一下向量。
2023-06-05 17:48:18 828
原创 跟着LearnOpenGL学习5--纹理
通过前面着色器博文的学习,我们已经了解到,我们可以为每个顶点添加颜色来增加图形的细节,从而创建出有趣的图像。但是,如果想让图形看起来更真实,我们就必须有足够多的顶点,从而指定足够多的颜色。这将会产生很多额外开销,因为每个模型都会需求更多的顶点,每个顶点又需求一个颜色属性。为了解决这一问题,我们可以使用纹理,纹理是一个2D图片(甚至也有1D和3D的纹理),纹理可以理解为贴图,将图片贴到我们创建的几何图形上。你可以想象纹理是一张绘有砖块的纸,无缝折叠贴合到你的3D的房子上,这样你的房子看起来就像有砖墙外表了。
2023-06-01 15:56:29 739
原创 跟着LearnOpenGL学习4--着色器
在之前绘制三角形的博文中,我们已经接触到了着色器,但是肯定有许多疑问,本文来详细了解一下着色器!着色器(Shader)是运行在GPU上的小程序,这些小程序为图形渲染管线的某个特定部分而运行;从基本意义上来说,着色器只是一种把输入转化为输出的程序。着色器也是一种非常独立的程序,因为它们之间不能相互通信;它们之间唯一的沟通只有通过输入和输出。
2023-05-12 16:45:13 913 1
原创 跟着LearnOpenGL学习3--四边形绘制
通过一文,我们已经知道了怎么配置渲染管线,来绘制三角形;OpenGL主要处理三角形,当我们需要绘制别的图形时,例如:四边形,应当用三角形去拼接,组成我们想要的四边形;
2023-05-11 13:59:54 793
原创 跟着LearnOpenGL学习2--三角形绘制
在OpenGL中,任何事物都在3D空间中,而屏幕和窗口却是2D像素数组,这导致OpenGL的大部分工作都是关于把3D坐标转变为适应你屏幕的2D像素。3D坐标转为2D坐标的处理过程是由OpenGL的图形渲染管线管理的。第一部分把你的3D坐标转换为2D坐标;第二部分是把2D坐标转变为实际的有颜色的像素;
2023-05-11 12:19:22 593
原创 跟着LearnOpenGL学习1--环境搭建
LearnOpenGL网站上采用的是GLFW这个库来进行OpenGL开发,所以我们需要配置GLFW和Glad;由于本人更习惯使用Qt Creator进行开发,所以后面的都是在Qt平台上进行写代码!
2023-05-10 16:00:11 442
原创 Qt配置glfw库(Windows)
将下载的glfw库文件夹中的include、lib-mingw-w64复制到新建的。切换到工程文件(*.pro),鼠标右键–>【添加库】在工程路径下新建一个文件夹。
2023-05-10 12:22:44 1493
原创 OPenGL学习--库介绍
OpenGL被定义为 “图形硬件的一种软件接口”;从本质上讲,它是一个3D图形和模型库,具有高度的可移植性,并且具有非常快的速度;使用OpenGL,可以创建爱你优雅而漂亮的3D图像,并且具有非常出色的视觉质量;使用OpenGL的最大有点是它的速度远远快于光线追踪器或软件渲染引擎;
2023-05-08 16:38:38 3545
原创 OPenGL笔记--创建一个3D场景
通过前面的学习,基本掌握了怎么绘制图形,使用纹理,接下来就来创建一个3D场景。基本原理一个复杂的场景肯定是由一些简单的图形,通过某种组合方式构建起来的,在OPenGL中也不例外;例如:在绘制立方体的时候,立方体也是由6个正方形围起来的;基本图形由于显卡在渲染三角形时效率较高,所以我们采用三角形来构建复杂的3D场景;数据结构当您想要使用一系列的数字来完美的表达3D环境时,随着环境复杂度的上升,这个工作的难度也会随之上升;
2023-05-06 13:32:18 1526
原创 QML控件--MenuBar
还提供 API 来动态添加、插入、删除和获取菜单。:是菜单栏,通常,菜单静态声明为菜单栏的子项,但。访问菜单栏中的菜单;
2023-04-21 14:48:12 758
原创 Qt显示数学公式
目前项目中需要显示数学公式,本来打算采用markdown,但是试了多种方式都不行,然后想过Latex,后面发现MathML,效果还不错,XML格式,然后XML解析的公式可以显示在QtMmlWidget控件中,也可以导出图片,显示在QLabel上。
2023-04-14 18:19:57 1082
原创 Linux主机用WordPress搭建网站
接下来,我们将需要配置 phpMyAdmin 以连接到我们的 MYSQL 服务器。我们还需要设置一些详细信息,以便我们可以登录到 phpMyAdmin 软件。然后设置 phpMyAdmin 的密码,此密码是 phpMyAdmin 用于连接到 MySQL 服务器的密码。填好WordPress密码,电子邮箱地址,安装WordPress。打开浏览器,输入 http://主机IP。输入数据库密码,其它不变,提交。
2023-04-13 11:00:34 725
原创 QML控件--Menu
与仅关闭菜单及其子菜单的 close() 不同,dismiss() 关闭菜单的整个层次结构,包括父菜单;当菜单是子菜单时,菜单的标题通常显示在菜单项的文本中,而当它在菜单栏中时,则显示在工具按钮的文本中;删除并返回 index 处的菜单,该索引位于菜单中的所有项目中,菜单的所有权转移给调用者。删除并返回索引处的动作,该索引位于菜单中的所有项目中,动作的所有权转移给调用者;返回索引处的子菜单,如果索引无效或指定索引处没有子菜单,则返回 null;删除并返回索引处的项目,项目的所有权转移给调用者;
2023-04-12 15:13:57 819
原创 QML控件--Drawer
与屏幕边缘的距离,在该距离内拖动操作将打开 Drawer,默认值为 Qt.styleHints.startDragDistance。Drawer 相对于其最终目的地的位置。完全关闭时位置为 0.0,完全打开时位置为 1.0。:提供一个可以使用滑动手势打开和关闭的侧面板;Drawer 可以从上下左右四个方向打开;Drawer 是否是交互式的。非交互式不会对滑动做出反应。注意:设置为 小于等于 0 可禁用通过拖动打开Drawer;
2023-04-12 14:47:20 940
原创 QML控件--Dialog
注意:当使用 close() 关闭对话框或将 visible 设置为 false 时,不会发出此信号;注意:当使用 close() 关闭对话框或将 visible 设置为 false 时,不会发出此信号。当以交互方式或通过调用 accept() 接受对话框时,会发出此信号;页脚项目位于底部,并调整为对话框的宽度。当对话以交互方式或通过调用 reject() 被拒绝时,会发出此信号。对话框使用的标准按钮的组合。标题项位于顶部,并调整为对话框的宽度。单击 Dialog.Discard 标准按钮时会发出此信号。
2023-04-12 14:12:05 1125
原创 QML控件--DialogButtonBox
对话框和消息框通常以符合该平台的界面指南的顺序显示按钮,不同的平台总是有不同顺序的对话按钮,DialogButtonBox 允许开发人员向其中添加按钮,并且会。当在按钮框中单击按钮时,会为实际按下的按钮发出 clicked() 信号。按钮框使用的标准按钮的组合。这些按钮将按照用户平台的适当顺序放置。: enumeration 在排列按钮框中包含的按钮时要使用的。管理此按钮的按钮框,如果该按钮不在按钮框中,则为 null。: enumeration 按钮框的位置。持有按钮框中每个按钮的角色。
2023-04-12 11:52:53 687
原创 QML控件--Dial
对齐模式与 stepSize 一起使用,对齐是相对stepSize而言的。水平和垂直输入模式使用相对输入系统,其中光标位置的变化相当于在图中的直线上。
2023-04-12 11:11:50 653
原创 QML控件--DelayButton
按钮长按可以激发,然后再次点击即可复位,但是这个过程没有提供任何信号用来监听;是一个延时按钮,需要长按才能触发,这种延迟可以防止意外按压;
2023-04-11 15:58:55 765
原创 QML控件--SwipeView
Import Statement:import QtQuick.Controls 2.14Since:Qt 5.7Inherits:ContainerSwipeView是一个带滑动功能的QStackedWidget三、附加TabBar + SwipeView 使用
2023-04-11 15:08:12 229
原创 QML控件--Container
*Container(容器):**是类容器用户界面控件的基本类型,允许动态插入和删除项;(TabBar是Container的子类之一)
2023-04-11 14:38:18 577
原创 QML控件--Window和ApplicationWindow
ApplicationWindow是Window的扩充版,是一个丰富的窗口,包含菜单栏(MenuBar)、工具栏(ToolBar)、内容区域(Content Area)、状态栏(Status Bar)Window就是一个普通的窗口,其中什么组件也没有,可以理解为和QWidget差不多;可以理解为和QMainWindow差不多;
2023-04-11 11:40:24 386
原创 图
图(Graph)是由顶点的有穷非空集合V ( G )和顶点之间边的集合E ( G )组成,通常表示为:;G 表示个图;V 是图G中顶点的集合;E是图G中边的集合;,则用∣ V ∣表示图G中顶点的个数,也称图G 的阶;,用∣ E ∣表示图G中边的条数。注意: 线性表可以是空表,树可以是空树,但图不可以是空图。就是说,图中不能一个顶点也没有,图的顶点集V一定非空,但边集E可以为空,此时图中只有顶点而没有边。
2023-04-10 12:49:26 314
原创 树和二叉树
树是n(n>=0)个结点的有限集。当n=0时,称为空树;有且仅有一个特定的称为根的结点;当n>1时,其余节点可分为m(m>0)个互不相交的有限集T1,T2,…,Tm,其中每个集合本身又是一棵树,并且称为根的子树。显然,树的定义是递归的,即在树的定义中又用到了自身,树是一种递归的数据结构。树的根结点没有前驱,除根结点外的所有结点有且只有一个前驱。树中所有结点可以有零个或多个后继。
2023-04-10 12:49:25 534
原创 代理模式
也称为,作用就是找一个对象来替我们访问某个对象;意图:为其它对象提供一种代理以控制对这个对象的访问;代理模式就像我们生活中有些不方便自己直接出面处理的事情,然后找一个中间人替我们去处理;例如:我们来到一个新的城市,需要租房,但是你又不知道哪里有好的房源,所以你找到了中介,去帮你找好的房源;那么你就是下图中的RealSubject,中介就是Proxy,Request()就是租房。
2023-03-23 11:42:11 168
原创 Qt调用Chrome浏览器
最近有个小项目需要跳转网页,之前有了解过,但是没有在项目中使用过Qt网页嵌入;结合自己之前的博客,有如下两种技术可以实现我的需求:1、2、然后就想到了调用Chrome浏览器的方案!
2023-03-21 11:59:41 3564 1
基于QT开发的无触摸屏系统按键解决方案
2020-02-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人