自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 OpenGL:图元

OpenGL的图元的一些表现方法

2024-04-18 22:02:58 297

原创 QT的安装

Qt的安装方法

2024-04-06 15:07:38 301

原创 cpp:std::string::append的用法

cpp::string::append用法。

2024-04-01 09:44:15 231 1

原创 QMediaMetaData获取媒体文件信息

qt使用QMediaMetaData获取媒体文件的信息

2023-02-22 15:28:01 597

原创 OpenGL超级宝典 纹理(一)

1. 创建纹理对象2. 分配纹理缓存空间3. 绑定纹理对象到OpenGL上下文,告诉OpenGL纹理的类型4. 更新纹理数据5. 控制纹理数据的读取方式 5.1 创建采样器对象 5.2 设置纹理过滤方式

2022-03-24 00:10:15 1316

原创 OpenGL超级宝典 统一变量(uniform variable)

统一变量就是可以一种从程序把数据传到着色器里面的数据类型。

2022-03-08 23:45:15 785

原创 OpenGL超级宝典 完整渲染管线画圆

圆的画法直接上代码吧。Shader类是上一篇文章的shadervertex shader#version 450 corelayout(location = 0) in vec3 aPos;void main(){ gl_Position = vec4(aPos, 1.0);}tec shader#version 450 corelayout(vertices = 3) out;void main(){ if(gl_InvocationID == 0) { /

2022-03-05 11:54:56 607

原创 OpenGL超级宝典 使用缓冲为顶点着色器提供数据

1. 创建vao并且绑定过到OpenGL上下文2. 创建vbo3. 为vbo分配内存空间4. 将vbo绑定到OpenGL上5. 将vbo绑定到vao上6. 设置数据的布局和格式7. 指示vao的顶点属性应该从哪个绑定点获取数据8. 启用顶点数据

2022-03-05 11:44:48 1063

原创 OpenGL超级宝典 插值以及bezier曲线

插值概念bezier曲线vertex shadertesc shadertese shaderfragment shaderShader类在前面的文章中有,这里不在提源代码效果图概念插值(Interpolation)表示寻找一系列已知点之间的值的过程。穿过A点和B点的直线的公式如下:P = A + tD其中,D=(B-A)因此该公式可写成P = A + t(B - A)或 P = (1-t)A + tBGLSL中有mix()函数可以进行插值计算bezier曲线vertex shad

2022-03-02 00:01:05 644

原创 OpenGL超级宝典 渲染管线(四)

渲染管线渲染管线总图顶点着色器细分曲面控制着色器细分曲面引擎细分曲面评估着色器几何着色器基元装配裁剪剔除光栅化片段着色器帧缓存还有很多不懂的,所以写的很粗糙。欢迎大家提出改正。渲染管线总图顶点着色器顶点着色器作为管线的第一个阶段,它的作用其实很简单,就是接收外界输入的数据。这些数据是渲染图形必不可少的,所以说顶点着色器是管线中必需的一个阶段。并且数据可以传递到下一个着色器中。细分曲面控制着色器1.细分曲面控制着色器的数据从顶点着色器中获取,顶点着色器将数据作为输出,细分曲面控制着色器作为输

2022-02-28 23:13:37 255

原创 OpenGL超级宝典 渲染管线(三)

片段着色器是负责确定各片段的颜色,然后将片段发送到帧缓冲,以便合成到窗口。就是在这个阶段确定模型的颜色

2022-02-26 23:03:23 241

原创 OpenGL超级宝典 渲染管线(二)

细分曲面分成了三部分,首先是细分曲面控制着色器,这个着色器主要是设置细分因子,也就是细分的程度。然后是固定的细分曲面引擎,将接收到的贴片(patch)细分成点、线或者三角形最后是细分曲面评估着色器,这里进行细分算法的编写,并且输出

2022-02-26 10:31:54 370

原创 OpenGL超级宝典 渲染管线(一)

自己封装的Shader类(后面继续改进)shader.h#pragma once#include "sb7.h"#include <string>class Shader{public: Shader(); Shader(const std::string vertexPath, const std::string fragmentPath); //program对象使用 void use();private: GLuint program; //源代码 std

2022-02-24 23:07:24 236

原创 OpenGL超级宝典 绘制第一个三角形

顶点着色器#version 450void main(){ //三角形的顶点 const vec4 vertices[3] = vec4[3](vec4(0.25, -0.25, 0.5, 1.0), vec4(-0.25, -0.25, 0.5, 1.0), vec4(0.25, 0.25, 0.5, 1.0)); //gl_Vert.

2022-02-22 23:32:31 154

原创 OpenGL超级宝典 绘制第一个点

#include "sb7.h"#include <math.h>GLint complie_shaders(){ GLuint vertex_shader, fragment_shader, program; //顶点着色器源代码 static const char* vertex_shader_source[] = { "#version 450 \n" " \n" "void main() \n"

2022-02-22 23:11:00 150

原创 OpenGL超级宝典(第7版)环境配置和相关问题

资源获取资源可以去异步社区或者官网下载,自行去网上找。环境配置资源处理将资源压缩到合适的位置,注意目录中不能含有中文使用CMAKE,生成VS项目来编译glfw打开项目,分别生成Debug和Release的项目解决方案将glfw编译生成的Debug文件中的glfw3.lib文件复制到资源第一级目录下的lib文件夹中去将Debug文件夹复制过来的glfw3.lib改名为glfw_d.lib同理,将glfw编译生成的Release中的glfw3.lib复制到lib文件夹中,此时不需要

2022-02-22 11:39:24 1466 9

原创 SQL创建存储过程

创建SQL存储过程需要使用到的语法- 创建存储过程CREATE 存储过程的名称(参数)BEGIN...需要执行的SQL语句END- 调用CALL 存储过程的名称(参数)个人看法,这就是一个函数...无参数CREATE PROCEDURE p_student_select()BEGIN SELECT * FROM student;ENDCALL p_student_select()带参# out其实就是cpp里的引用变量,in就是值传递CREATE PROCEDUR

2021-11-18 10:44:09 22207

原创 C++线程启动、结束,创建线程方法

线程启动、结束,创建线程方法、join,detach* 程序运行起来,生成一个进程,该进程的主线程自动开始运行* 主线程从main函数开始执行,那么自己创建的线程,也需要从一个函数开始运行(初始函数)。一旦这个函数运行完毕,代表该线程结束。* 整个进程是否执行完成完毕的标志是 主线程是否执行完毕,如果主线程执行完毕了,代表整个进程执行完毕。 此时,一般情况下,如果其他子线程没有执行完毕,那么这些子线程就会被操作系统强行终止。 所以,一般情况下,如果想要保持子线程的运行状态,那么要让主线程一直保持,

2021-11-02 09:14:30 2649 2

原创 OpenGL(可编程管线):Shader + Bezier曲面 +QT

Bezier曲面前面的博客已经介绍,本次绘制Bezier曲面使用了细分着色器直接上代码#pragma once#include <vector>#include <qopenglfunctions_4_4_core.h>#include <iostream>#include <qmatrix4x4.h>#include "Shader.h"#include <string>using namespace std;class B

2021-08-25 21:19:52 297

原创 OpenGL(可编程管线):Bezier曲面

Bezier曲面Bezier线de Casteljau算法Bezier曲面bezier曲面编程思想实例代码运行结果Bezier线贝塞尔曲线由一组参数方程定义,方程组中使用控制点指定特定的曲线的形状,每个控制点都是2D空间中的一个点。de Casteljau算法其中B(t)为Bernstein多项式,另外了解,这里不做解释(主要是没有深入研究…)。此图来自《计算机图形学编程(使用OpenGL和C++)》Bezier曲面Bezier曲面定义了3D空间中的曲面,从Bezier曲线拓展,需要将b

2021-07-23 16:23:27 3184 2

原创 OpenGL(可编程管线):椭球的绘制和贴图

通过构建圆形顶点,再将这些顶点组合成三角形,即可得出最后的图形。纹理坐标就是通过投影计算得出。代码构建类运行结果构建类#pragma once#include <vector>#include <glm/glm.hpp>using namespace std;class Ellipsoid{private: //顶点个数 int numVertices; //索引个数 int numIndices; //顶点 vector<glm::ve...

2021-07-21 22:05:49 319 1

原创 OpenGL(可编程管线):椭圆的绘制和贴图

和绘制圆一样的思路,八分法绘制椭圆,借助上面的参数方程,以原点为(0,0)为例,上代码:椭圆的绘制构建椭圆类代码解释运行结果情况一:长轴在x轴情况二:长轴在y轴![在这里插入图片描述](https://img-blog.csdnimg.cn/20210719221241134.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2h0X3ZJQw==,.

2021-07-19 22:29:24 1049 2

原创 OpenGL(可编程管线):使用八分法绘制圆

简单概括就是把圆分成很多份上代码:为圆创建一个类#pragma once#include <vector>#include <glm\glm.hpp>using namespace std;class Circle{private: //顶点个数 int numVertices; //索引个数 int numIndices; //存储顶点 vector<glm::vec3> vertices; //索引 vector<int&g.

2021-07-17 09:36:36 459

原创 学习笔记:非阻塞式NIO

Java NIO非阻塞模式当线程从某通道读写数据时,若没有数据可用时,该线程可以进行其他任务。即线程空闲时可以进行其他任务,单独的线程可以管理多个输入输出通道,大大提高了CPU使用率。选择器(Selector)选择器可以让一个线程控制多个通道。Selector是非阻塞IO的核心。选择器的使用创建选择器 //获取选择器 Selector selector = Selector.open();向选择器注册通道 //将通

2021-02-06 14:36:56 138

原创 学习笔记:ObjectOutputStream和ObjectInputStream

对象流的作用对象流用于存储和读取基本数据类型或对象的处理流。可以把Java中的对象写入数据源中,也能从数据源中还原对象。序列化序列化机制:对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点。当其它程序获取了这种二进制流,就可以恢复成原来的Java对象。ObjectOutputStream内存中的Java对象就是通过ObjectOutputStream保存到磁盘中或者通过网络传输出去Ob

2021-02-03 17:11:12 194

原创 Java实现文件和文件夹复制

实现方法public Boolean copyFile(String srcPath, String desPath)public Boolean copyFiles(String srcPath, String desPath)public Boolean copyFile(String srcPath, String desPath)这个方法当做工具,用于复制单个文件public Boolean copyFile(String srcPath, String desPath) {

2021-02-03 16:45:28 227

原创 学习笔记:Java IO流

Java IO流Java IO原理流的分类节点流处理流流之间的关系图流的使用缓冲流Java IO原理I/O是Input/Output的缩写,I/O技术是用于处理设备之间的数据传输在Java中,数据的传输是通过“流(Stream)”的方式进行流的分类按操作数据单位不同分为:字节流(8 bit),字符流(16 bit)按数据流的流向不同分为:输入流,输出流按流的角色的不同分为:节点流,处理流节点流节点流:直接从数据源或目的地读写数据(文件操作)处理流处理流:不直接从数据源或目

2021-02-01 23:05:36 163

原创 线程练习:生产者-消费者问题

生产者-消费者问题问题描述wait()/notify()/notifyall()方法Lcok和Condition问题描述生产者(Productor)将产品交给店员(Clerk),而消费者(Consumer)从店员处取走产品,店员一次只能持有固定数量的产品(比如:20),如果生产者试图生产更多的产品,店员会叫生产者停一下,如果店中有空位放产品了再通知生产者继续生产;如果店中没有产品了,店员会告诉消费者等一下,如果店中有产品了再通知消费者来取走产品。wait()/notify()/notifyall()方

2021-01-30 16:39:34 193

原创 多线程的创建、同步

多线程的创建和同步线程的六种状态新建(NEW)可运行(RUNNABLE)终止(TERMINATED)等待(WATING)计时等待(TIMED_WATING)阻塞(BLOCKED)线程的生命周期线程的创建继承Thread类实现Runnable接口实现Callable接口使用线程池创建线程线程的同步同步代码块继承Thread类的写法实现Runnable接口的写法同步方法继承Thread方法实现Runnable接口线程的六种状态新建(NEW)至今尚未启动的线程处于这种状态。可运行(RUNNABLE)一旦

2021-01-28 19:04:47 189

原创 JDBC连接操作步骤(mysql在eclipse和idea中的操作)

小知识:JDBC是一个注册了商标的术语,而并非Java Database Connectivity 的首字母缩写。对它命名体现了对ODBC的致敬,后者是微软开创的标准数据库API,并因此并入了SQL标准中。—摘自 《Java 核心技术 卷Ⅱ》JDBC操作步骤导入驱动程序JAR文件注册驱动器连接数据库代码展示导入驱动程序JAR文件eclipse中的导入jar包步骤idea中设置在idea设置中需要设置数据库的serverTimeZone为gmt注册驱动器许多JDBC的JAR文件会自动注.

2021-01-18 00:05:16 361 3

原创 [LeetCode]1018可被5整除的二进制前缀

1018可被5整除的二进制前缀题目详情题目分析代码(Java)代码分析题目详情给定由若干 0 和 1 组成的数组 A。我们定义 N_i:从 A[0] 到 A[i] 的第 i 个子数组被解释为一个二进制数(从最高有效位到最低有效位)。返回布尔值列表 answer,只有当 N_i 可以被 5 整除时,答案 answer[i] 为 true,否则为 false。示例 1:输入:[0,1,1]输出:[true,false,false]解释:输入数字为 0, 01, 011;也就是十进制中的 0, 1

2021-01-14 22:58:19 123

原创 Java分析栈堆轨迹元素的两种方法

Java分析栈堆轨迹元素官方定义:栈堆轨迹是程序执行过程中在某个特定点上所有挂起的方法调用的一个列表。我的理解:栈堆轨迹就是程序执行过程调用方法的顺序列表和文件名和行数。有两种方法可以访问栈堆轨迹的文本描述信息文章目录Java分析栈堆轨迹元素Throwable类StackWalker类Throwable类使用Throwable类的printStackTrace()可以访问栈堆轨迹的信息。这个方法也可以打印异常的信息。下面以阶乘的计算作为示例代码。 public static int fa

2021-01-09 17:32:52 273 3

原创 IDEA进行GUI设计时的组件拖拽操作

使用IDEA版本:2020.1.3很多朋友对于GUI的设计最大的烦恼就是一边写代码,一边运行代码进行布局设计,在IDEA中其实自带一个GUI设计的功能,让我们进行GUI设计更加的方便,快速。单击这个按钮可以直接创建一个GUI类在创建的时候可以设置GUI的布局...

2021-01-02 19:58:44 3943

原创 栈的应用之逆波兰计算器练习

文章目录创建操作运算符的类计算器将中缀表达式转成后缀表达式计算器实现创建操作运算符的类public class Operation { private static int ADD = 1; private static int SUB = 1; private static int MUL = 2; private static int DIV = 2; //获取运算符优先度 public static int getValue(String oper

2020-11-03 20:32:50 210 3

原创 栈的应用计算器(中缀表达式)练习

创建与运算符有关的类public class Operation { private static int ADD = 1; private static int SUB = 1; private static int MUL = 2; private static int DIV = 2; //写一个方法,返回对应的优先级数字 public static int getValue(char operation){ int result =

2020-11-02 20:46:26 359 2

原创 栈的操作练习(链表)

栈判断栈是否为空入栈出栈遍历栈是一种先进后出(FILO)的有序列表,插入和删除元素只能在线性表的同一端进行操作,允许插入和删除的一端叫做栈顶(Top),另一端为固定的栈底(Bottom)用链表来模拟栈,节点需要一个指向前一个节点的pre域和数据域public class Node { private Node pre; private int no; public Node(int no) { this.no = no; } public

2020-10-30 23:45:57 150 1

原创 栈的操作练习(数组模拟)

栈判断栈是否为空判断栈是否满入栈出栈遍历栈是一种先进后出(FILO)的有序列表,插入和删除元素只能在线性表的同一端进行操作,允许插入和删除的一端叫做栈顶(Top),另一端为固定的栈底(Bottom)用数组来模拟栈 private int maxSize; //栈的大小 private int[] stack; //数组,数组模拟栈,数据放在该数组 private int top = -1; //表示栈顶,初始化-1 //初始化栈 public ArrayStack

2020-10-30 23:01:45 195

原创 约瑟夫问题(循环链表)练习

约瑟夫问题是个著名的问题:N个人围成一圈,第一个人从1开始报数,报M的将被杀掉,下一个人接着从1开始报。 如此反复,最后剩下一个,求最后的胜利者。 例如只有三个人,把他们叫做A、B、C,他们围成一圈,从A开始报数,假设报2的人被杀掉。约瑟夫问题其实就一个循环链表问题先创建节点类public class Node { private int no; private Node next; //指向下一个节点 public Node(int no) { this

2020-10-29 20:02:04 298 1

原创 双向链表的增删改查练习

双向链表的增删改查增加节点删除节点修改节点查找节点双向链表相较于单向链表的好处就是能够双向遍历,存在next域指向下一个节点和pre域指向前一个节点节点定义:public class Node { public int no; public Node next; //指向下一个节点 public Node pre; //指向前一个节点 private String name; public String getName() { r

2020-10-28 21:14:41 149

原创 单链表增删改查练习

增删改查增加节点删除节点修改节点查找节点#mermaid-svg-AvZcfGGLA0MxjVOZ .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-AvZcfGGLA0MxjVOZ .label text{fill:#333}#mermaid-svg-AvZcfGGLA0MxjVOZ .node rect,#m

2020-10-27 17:46:36 125

空空如也

空空如也

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

TA关注的人

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