自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 6.OpenGL纹理与帧缓存(笔记)

纹理绑定到OpenGL环境中需要通过纹理单元(texture unit)来完成,它是一个不小于0,不大于设备所支持的最大单元数量的绑定点整数值。如果环境支持多个纹理单元,多个纹理可以同时绑定到同一个环境当中。一旦纹理绑定到环境中,可以在着色器中通过采样器变量的方式去访问它,该变量需要提前声明,并确保声明的纹理维度和实际情况一致的。纹理目标和对应的采样器类型目标(GL_TEXTURE_*)采样器类型维度1Dsampler1D一维1D_ARRAY一维数组2Dsampler2D二维。

2025-01-22 10:32:27 1113

原创 02.pri文件详解(笔记)

i是包含(include)的首字母。类似于C、C++中的头文件,我们可以把*.pro文件内的一部分内容单独放到一个*.pri文件内,然后包含进来。widget.cpp如果一个大点的项目,含有多个*.pro文件,这些pro需要有些共同的设置或需要的文件,这时就很有必要了。在Qt中,Pri文件是一种项目文件,用于将C++文件、JavaScript文件、资源文件等链接在一起,并生成可执行文件。

2024-12-08 14:54:05 1298

原创 01.pro文件详解(笔记)

新建proDemo8工程(注意:模板选择,项目:其他项目;Qt4设计师自定义控件)。步骤如下:Qt Creator —> New Project —> 其他项目 —> Qt4设计师自定义控件 —> 名称为:proDemo8—> 控件类:customControl —> 其他项全部默认 —> 完成。对应的pro文件如下:此pro文件中当Qt版本大于4.0时QT变量添加值designer。

2024-12-08 14:27:41 889

原创 16.C++11线程—在线程间共享数据(笔记)

在并发编程中,操作由两个或多个线程负责,它们争先让线程执行各自的操作,而结果取决于它们执行的相对次序,所有这种情况都是条件竞争。有时候,这直观、易懂,因为诸多互斥的用途各异,也会出现棘手的状况,例如,运用多个互斥分别保护多个独立的实例,这些实例属于同一个类。可是,如果选用了固定的次序(两个对象通过参数传入,我们总是先给第一个实例的互斥加锁,再轮到第二个实例的互斥),前面的建议就适得其反:针对两个相同的实例,若两个线程都通过该函数在它们之间互换数据,只是两次调用的参数顺序相反,会导致它们陷入死锁!

2024-12-01 19:54:48 799

原创 15.C++11线程—线程管控(笔记)

然而分离的线程确实仍在后台运行,其归属权和控制权都转移给C++运行时库(runtime library,又名运行库),由此保证,一旦线程退出,与之关联的资源都会被正确回收。假如代码必须确保新线程先行结束,之后当前线程的函数才退出,那么关键在于,全部可能得退出路径都必须保证这种先后次序,无论是正常退出,还是抛出异常。全序关系,简称全序,又名线性序、简单序或非严格排序,是在集合上的反对称的、传递的和完全的任何二元关系。作为参数,它被复制到属于新线程的存储空间中,并在那里被调用,由新线程执行。

2024-12-01 19:51:53 951

原创 14.Boost-内存管理(笔记)

计算机系统中资源又很多种,内存是我们最常用到的,此外还有文件描述符、socket、操作系统handler、数据库连接等等,程序中申请这些资源后必须及时归还系统,否则就会产生难以预料的后果。public:public:的接口和功能几乎是与scoped_ptr构造函数接受的指针p必须是 new[] 的结果,而不能是new表达式的结果;没有*、->操作符重载,因为特有的不是一个普通指针;

2024-12-01 19:43:36 979

原创 13.Win下socket编程(笔记)

所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进行进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口。简单来说,套接字是人们抽象出来的一个概念,它其实就是应用程序通过网络协议来进行通讯的接口。UDP。

2024-12-01 19:28:28 898

原创 12.2 Boost-Asio(笔记)

asio库基于前摄器模式(Proactor) 封装了操作系统的selectpoll/epollkqueue等机制,实现了异步IO模型。它的核心类是io_service,相当于前摄器模式中的Proactor角色,asio的任何操作都需要有io_service的参与。在同步模式下,程序发起一个IO操作,向io_service提交请求,io_service把操作转交操作系统,同步地等待。当IO操作完成时,操作系统通知io_service,然后io_service再把结果发回给程序,完成整个同步流程。

2024-12-01 19:16:26 813

原创 11.Win多线程(笔记)

文章目录1.主要函数列表2.线程函数的定义3.线程同步3.1 原子锁3.1.1 相关问题3.1.2 Window 官方说明及相关API3.1.3 原子锁的实现3.1.4 原子锁优缺点3.2 互斥锁3.2.1 概述3.2.2 相关API3.2.3 其他说明3.2.4 示例3.3 事件3.3.1 概述3.3.2 API函数3.3.3 示例3.4 信号量(Semaphores)3.4.1 概述3.4.2 API函数4. 线程池4.1 概念4.1.1 线程的执行流程4.1.2 线程池4.2 线程池API4.2.1

2024-12-01 19:12:26 874

原创 10.排序(笔记)

这个信息非常关键,因为它告诉我们各个元素应该出现在结果数组的哪个位置。接下来,我们倒序遍历原数组。

2024-12-01 18:55:21 1024

原创 12.1 Boost-Thread(笔记)

public:mutex对象在创建后表示了一个互斥量,成员函数lock()用于线程阻塞等待直至获得互斥量的所有权(即锁定);try_lock()尝试锁定互斥量,如果锁定成功返回true,否则返回false,它是非阻塞的;当线程使用完共享资源后,应该及时使用unlock()解除对互斥量的锁定。成员函数只属于和,它的行为结合了lock()和try_lock(),阻塞等待一定的时间试图锁定互斥量,如果时间到还未锁定则发回false。

2024-11-28 15:31:44 594

原创 09.搜索(笔记)

它利用数据的有序性,每轮缩小一半搜索范围,直至找到目标元素或搜索区间为空为止。二分查找需要跳跃式(非连续地)访问元素,而在链表中执行跳跃式访问的效率较低,因此不适合应用在链表或基于链表实现的数据结构。例如,二分查找需要预先对数组进行排序,哈希查找和树查找都需要借助额外的数据结构,维护这些数据结构也需要额外的时间和空间开销。对于频繁插入元素的场景,为保持数组有序性,需要将元素插入到特定位置,时间复杂度为。二分查找不仅可用于搜索目标元素,还可用于解决许多变种问题,比如搜索目标元素的插入位置。

2024-11-24 20:19:26 751

原创 08.图(笔记)

无向图中一个连通图的最小连通子图称为生成树。(用最少的边把所有顶点连接起来)。n个顶点的连通图的生成树有n-1条边。路径长度:对于不带权图为路径的边个数。带权图为路径所有边权值的和最小生成树:所有生成树中,路径长度最小的生成树。所以生成树一定是连通图。这个定义是在无向图的基础上开展的。连通图:无向图中,若顶点A、B存在路径,称为A、B连通。若图中的任意两点都是连通的,则称此图为连通图。

2024-11-24 20:14:13 2103

原创 07.并查集(笔记)

并查集是一个多棵树的集合(森林)。并查集由多个集合构成,每一个集合就是一颗树。并:合并多个集合。查:判断两个值是否在一个集合中。存储结构:数组初始化:数组元素全部初始化为-1。存储数据:根节点为负数,其绝对值为集合中元素的个数,孩子结点中存放父节点的下标。eg:一共10个人开始时这10个人各为一个集合,没有父节点,这里将数组全部设置为-1。之后,将10个人分成3组,每组以树的形式存储,树的根节点可以任意取。这里假设0 4 5 一组,1 3 6 一组,2 7 8 9 一组。

2024-11-24 19:57:18 326

原创 06.堆(笔记)

如图 所示,节点“从顶至底堆化”的最大迭代次数等于该节点到叶节点的距离,而该距离正是“节点高度”。,我们将根节点的值与其两个子节点的值进行比较,将最大的子节点与根节点交换。需要指出的是,许多编程语言提供的是「优先队列 priority queue」,这是一种抽象数据结构,定义为具有优先级排序的队列。我们首先创建一个空堆,然后遍历列表,依次对每个元素执行“入堆操作”,即先将元素添加至堆的尾部,再对该元素执行“从底至顶”堆化。添加之后,由于 val 可能大于堆中其他元素,堆的成立条件可能已被破坏,

2024-11-24 19:49:39 557

原创 05.哈希表(笔记)

例如,由于加法和异或满足交换律,因此加法哈希和异或哈希无法区分内容相同但顺序不同的字符串,这可能会加剧哈希冲突,并引起一些安全问题。当发生冲突时,平方探测不是简单地跳过一个固定的步数,而是跳过“探测次数的平方”的步数,即**1,4,9…「负载因子 load factor」是哈希表的一个重要概念,其定义为哈希表的元素数量除以桶数量,用于衡量哈希冲突的严重程度,计算复杂性:哈希函数的计算通常是高效的,但是反向操作——从哈希值到原始输入的计算——在数学上被设计成是一个复杂且耗时的过程。

2024-11-24 19:38:13 911

原创 04.算法范式

算法:按步骤解决问题的过程。范式:思考问题的模式。算法范式:为问题构建高效解决方案的常规方法。算法范式可以被看做为解决一类问题的高层算法。

2024-11-24 19:33:40 2355

原创 03.explicit详解

在C++中, 如果的构造函数只有一个参数时, 那么在编译的时候就会有一个缺省的转换操作:将该构造函数对应数据类型的数据转换为该类对象。而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式)。首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显式的,但是, 也有一个例外, 就是当除了第一个参数以外的其他参数都有默认值的时候, explicit关键字依然有效,

2024-11-24 19:31:45 205

转载 02.C++类型识别

C++是静态类型语言,其数据类型是在编译期就确定的,不能在运行时更改。C++语言中,静态类型是对象自身的类型,动态类型是指针(引用)所指向对象的实际类型。RTTI(Run-Time Type Information)即运行时类型识别,C++通过RTTI实现对多态的支持。为了支持RTTI,C++提供了一个type_info类和typeid与dynamic_cast两个关键字。

2024-11-24 19:28:10 150

原创 01.c++基础

namespace 空间名{名字空间成员1;名字空间成员2;注:名字空间成员可以是全局函数,全局变量,自定义类型,名字空间.free()1) 引用即别名,就是某个变量的别名,对别名操作和对变量本身操作完全相同.2) 语法类型 & 引用名 = 变量名;注: 定义引用时必须初始化,初始化以后绑定的目标变量不能再修改.注: 引用的类型和绑定的目标变量类型一致int &b = a;//b就是a的别名万物皆对象,任何一种事物都可以看做是对象.

2024-11-24 19:25:16 2076

原创 5.视口变换、裁减、剪切与反馈(笔记)

但是必须说明的是,由于浮点数本身的工作机制,精度比较高的区域主要集中在0.0附近,而这个区域距离观察者可能是比较远的,但是我们期望的实际上是靠近观察者(近平面)的区域能够有更高的深度精度。在图元中剪切距离是线性插值的。如果需要改变一个偏移中心的物体大小,并且不希望它的位置同时发生改变,那么我们可以将物体中心移动到(0,0,0),然后再缩放大小,最后平移回到原来的位置。旋转都是沿着第一个轴的方向朝向第二个轴运动的,也就是说,按照各轴的正向顺序,从cos-sin形式的一行旋转到sin + cos的一行。

2024-11-24 19:11:31 924

原创 4.OpenGL颜色、像素和片元(笔记)

如果当前帧缓存包含了多于32个采样数,那么采样掩码的长度可能是多个32位大小的WORD字段组成,其中第一个WORD表示前32位的数据,第二个WORD表示之后32位的数据,以此类推。其中,默认帧缓存的"主"颜色缓存需要特别对待,因为它是与屏幕上窗口相关联的,所有绘制到其中的图像都会直接显示到屏幕上,而所有其他的颜色缓存都是与屏幕无关的。但是如果可读颜色缓存是浮点数类型,而任何一个写入的颜色缓存不是(反之亦然),或者可读颜色缓存是有符号(无符号)的整数类型,但是某个写入的缓存不是的话,那么都会产生。

2024-11-24 18:51:55 904

原创 3.OpenGL绘制(笔记)

此时在这个属性所对应的顶点属性数组中,数据索引值的计算将会变成instance/divisor的形式,其中instance表示当前的实力数目,而divisor就是当前属性的更新频率值。对与每个实例,内置变量gl_InstanceID都会依次递增,新的数值会被传递到顶点着色器,以区分不同的实例的顶点属性。当执行这个操作之后,会假设OpenGL对于映射缓存对象中指定区域的修改已经完成,并且开始执行一些相关的操作,例如重新激活数据的可用性,将它拷贝到图形处理器的显示内存中,或者进行刷新,数据缓存的重新更新等。

2024-11-24 18:44:10 713

原创 2.openGL着色器(笔记)

voidmain()// 在这里编写代码在程序起始位置,总是要使用#version来声明所使用的版本输入点事main()函数,没有参数,没有返回值//和/**/,为注释符号结尾必有分号。

2024-11-24 18:37:16 1002

原创 1.openGL概述(笔记)

帧缓存是屏幕所显示画面的一个直接映象,又称为位映射图(Bit Map)或光栅。帧缓存的每一存储单元对应屏幕上的一个像素,整个帧缓存对应一帧图像。在Linux系统中,帧缓存被抽象为显示设备的一个接口,允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。帧缓存是计算机图形学中的一个核心概念,它通过提供一块内存区域来存储和管理输出到显示器的像素数据,实现了图形显示的各类功能。帧缓存具有实时性、灵活性和跨平台性等特点,广泛应用于游戏开发、多媒体应用和嵌入式系统等领域。

2024-11-24 18:29:04 833

原创 0.渲染系统简介

光栅化和光线跟踪是计算机图形学中两种重要的渲染技术,它们各有优缺点并适用于不同的场景。光栅化快速高效,适用于实时渲染;而光线跟踪逼真度高,适用于高质量渲染。随着硬件和算法的不断进步,这两种技术也在不断发展和完善,以满足更广泛的应用需求。

2024-11-24 18:26:39 729

原创 求射线与三角形的交点,并附代码

ptp0​t∗u其中,p是射线的起始点,是射线的方向向量(需要单位化),t是参数,表示射线上任意一点到起点的距离。计算射线与三角形平面的交点的数学公式可以分为两部分:首先找到射线与三角形所在平面的交点,然后判断该交点是否在三角形内部。以下是详细的步骤和公式:n⋅p−p0​0其中,p 是平面上的任意一点,是平面的单位法向量,p是平面上任意一点(可以是三角形的任意一个顶点)。

2024-11-20 09:15:03 1172 1

ObjectARX2025下载

ObjectARX2025

2024-04-18

空空如也

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

TA关注的人

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