自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 进程间通讯方式

进程以先进先出的方式从缓冲区存取数据:管道一端的进程顺序地将进程数据写入缓冲区,另一端的进程则顺序地读取数据,该缓冲区可以看做一个循环队列,读和写的位置都是自动增加的,一个数据只能被读一次,读出以后在缓冲区都不复存在了。共享内存允许两个或多个进程共享一个给定的存储区,这一段存储区可以被两个或两个以上的进程映射至自身的地址空间中,一个进程写入共享内存的信息,可以被其他使用这个共享内存的进程,通过一个简单的内存读取错做读出,从而实现了进程间的通信。:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。

2025-01-02 17:57:45 32

原创 可变参数模版

一个可变参数模版就是一个接受模板函数模板类,可变数目的参数被称为。我们用一个来指出一个模板参数或函数参数表示一个包,在函数参数列表中,如果一个参数的类型是一个模板参数包,则此参数也是一个函数参数包。

2024-11-22 17:24:29 179

原创 tuple元组

当我们希望一些数据组合成单一对象时,可以使用tuple,一个tuple可以有任意数量的成员,成员的类型可以各不相同,每个确定的tuple类型的成员数目是固定的。

2024-11-22 16:08:18 170

原创 滑动窗口的使用

滑动窗口是一种流量控制技术,也用于管理和处理数据流。它通过定义一个固定大小或可根据特定条件动态调整的窗口,在数据流或数据序列上滑动,以便高效地处理其中的数据。这种技术能够限制同时处理的数据量,从而控制资源消耗并提高处理效率。

2024-11-14 15:20:51 985

原创 平衡二叉树(AVL树)

平衡二叉树是一种,其中每一个节点的,它是一种高度平衡的二叉排序树,我们将二叉树上节点的左子树深度减去右子树深度的值称为,那么平衡二叉树上所有结点的平衡因子只可能是。只要二叉树上有一个节点的平衡因子的绝对值大于1,则该二叉树就是不平衡的。平衡二叉树的查找,是比较理想的一种动态查找表算法。距离,且平衡因子的绝对值大于1的结点为根的子树,称为。

2024-11-13 19:00:53 451

原创 二叉排序树

在说二叉排序树之前先考虑这样一个例子,假设我们的数据集开始只有一个数{62},然后现在需要将88插入数据集,于是数据集成了{62,88},还保持着从小到大有序,再查找有没有58,没有则插入,可此时要想在线性表的顺序存储中有序,就得移动62和88的位置,如图所示,可不可以不移动呢?当然是可以,那就是二叉树结构,当我们用二叉树的方式时,首先将第一个数62定为根结点,88因为比62大,因...

2024-11-13 16:53:28 786 1

原创 运算符重载

重载运算符函数的参数与该运算符作用的运算对象数量一样多,一元运算符有一个参数,二元运算符有俩个,对于二元运算符来说,左侧运算对象传递给第一个参数,而右侧运算对象传递给第二个参数,除了重载函数调用运算符operator()之外,其他重载运算符不能含有默认实参。 如果一个运算符函数是成员函数,则它的第一个(左侧)运算符对象绑定到隐式的this指针上,因此,成员运算符函数的(...

2024-11-13 14:52:50 180

原创 效果框架(效果ID3DXEffect)

将一个着色器与某一个特定路径建立关联。

2024-11-06 19:03:36 666

原创 像素着色器

像素着色器(pixel shader)是在对每个像素进行光栅化处理期间运行在图形卡GPU上的一段程序(不同与顶点着色器,Direct3D不会以软件方式来模拟像素着色器),它实质上是取代了固定功能流水线中的,而且赋予了我们直接操纵单个像素以及访问每个像素的纹理坐标的能力。使得可以获得多重纹理、景深、云彩模拟、火焰模拟等效果。可以通过检查D3DCAPS9结构的成员PixelShaderVersion,并与宏D3DPS_VERSION进行比较,来测试图形卡是否支持某个像素着色器版本。

2024-08-08 18:42:59 868

原创 顶点着色器

顶点着色器(vertex shader)是-一段运行在图形卡GPU中的程序,它可取代固定功能流水线中的(当然,这也不是绝对的,因为在硬件不支持顶点着色器的情况下,Direct3D运行时就会用软件运算方式来模拟顶点着色器)可以看出,顶点是以局部坐标(局部坐标系中的坐标)输入顶点着色器的,而且顶点着色器必须将照亮的(上色的)顶点输出到齐次裁剪空间中。由于顶点着色器其实就是我们用HLSL语言编写的一段定制程序,这样我们在可实现的图形效果上就获得了很大的。

2023-11-15 18:39:31 608

原创 高级着色语言(HLSL)

HLSL中的函数具有以下性质函数使用与C++类似的语法参数总是按值传递的不支持递归函数总是内联的。

2023-11-14 16:43:18 1664

原创 Direct3D拾取

假设在屏幕上单击,击中的位置为点s=(x,y)。由图可以看出,用户选中了茶壶。但是仅给出点s,应用程序还无法立即判断出茶壶是否被选中。所以针对这类问题,我们需要采用一项称为“拾取(Picking)”的技术。茶壶和屏幕点s之间的一种联系是茶壶被投影到了一个包含了的区域中。更准确地说,茶壶被投影到了投影窗口中一个包含点(点P位于投影窗口中)的区域中,其中点。我们看到,如果自坐标原点发出一条拾取射线(picking ray)该射线将与那些其投影包围了点p的物体(即茶壶)。

2023-11-13 10:35:43 522

原创 Direct3D粒子系统

例如加了粒子尺寸字段,但是没有给该字段赋值。

2023-11-09 19:34:34 1243

原创 Direct3D地形绘制基础

思路是:地形中海拔较低的部分上色为沙滩色,中等海拔的部分上色为绿色的丘陵颜色,高海拔的部分上色为雪山的颜色。RAW文件本质上是一个连续的字节存储块,其中将字节型向量复制到一个整型向量中,我们就可对高度值进行比例变换从而突破0~255的限制,该方法的唯一限制是。我们对该类的构造函数还传入了与地形相关的设备指针、一个标识了存储高度图数据的文件的字符串,以及一个用于对高度图中各元素实施比例变换的。,所以,如果您要从一个256×256的RAW文件中读取数据,相应地您只能创建一个至多有256×256个顶点的地形。

2023-11-06 15:12:57 570

原创 设计一个灵活的Camera类设计

D3DXMatrixLookAtLH函数可计算出观察矩阵(取景变换矩阵),当在某一固定点固定摄像机方位时,该函数十分有用,但其用户接口对于一个能够根据用户输入做出响应移动的摄像机来说,就会力不从心。我们可以实现一个Camera类以使我们能够较D3DXMatrixLookAtLH函数对摄像机更好的控制,该类特别适合于飞行模拟器、第一人称视角游戏。:右向量、上向量、观察向量、位置向量通过这些向量来定义摄像机相对于世界坐标系的位置和朝向,前3个向量统称为方向向量,方向向量必须是。

2023-10-12 18:36:10 163

原创 Direct3D网格(二)

与纹理中多级渐进纹理类似,如果对一个小而远的图元应用高分辨率的纹理实在是一种浪费,因为观察者不可能注意到这些细节,一个小而远的网格也完全不用像大而近的网格一样使用大量面片,所以在满足要求的条件下,总是用尽量少的面片来表达一个网格,以节省宝贵的绘制时间。如果希望提高精度,可借助外接体快速排除那些显然不能被击中的物体,然后再对那些极有可能被击中的物体使用更精确的方法来检测。,重叠的顶点就会被剔除,如果没有提供邻接信息,则重叠顶点的法向量由该顶点所依附的各面在该点的局部法向量取平均而得到,重要的第一点是传入的。

2023-10-11 18:15:22 519

原创 Direct3D网格(一)

函数创建一个"空"网格对象 ,空网格对象是指我们指定了网格的面片总数和顶点总数,然后由该函数为顶点缓存、索引缓存和属性缓存分配大小合适的内存,之后即可手工填入网格数据。函数来创建空网格,在该函数中并未指定FVF,而是用一个D3DVERTEXELEMENT9类型的结构数组来描述顶点数据的布局方式。:网格将具有的面片总数,该值必须大于0。:网格将具有的顶点总数,该值必须大于0。:存储在该网格中的顶点的灵活顶点格式。:创建网格时所使用的创建标记,枚举。:所创建的网格对象的指针。,一些常用的标记如下。

2023-10-08 18:08:34 408

原创 Direct3D字体

D3DX库提供接口用于在Direct3D应用程序中绘制文本,该接口内部使用GDI(图形设备接口)来绘制文本,因此该接口在性能上略有损失,由于使用GDI所以才能够处理一些复杂的字体和格式。可以用函数来创建一个ID3DXFont的接口对象。一旦获取了ID3DXFont接口的指针,只需要调用方法即可轻而易举地完成文本的绘制。:指定字符串所属的ID3DXSprite对象接口,可设为默认值0或NULL,表示在当前窗口中绘制字符串:指向将要绘制的字符串的指针。

2023-09-27 16:11:40 355

原创 Direct3D模板缓存

模板缓存是一个用于获得某种特效的离屏缓存,模板缓存的分辨率与后台缓存和深度缓存的分辨率完全相同,所以像素也是一一对应的,模板缓存允许我们动态的,有针对性的决定是否将某个像素写入后台缓存中。例如实现镜面效果时,我们只需在在镜子所在平面中绘制某个特定物体的映像,但是如果想只在镜面所对应的子区域中显示物体的映像,这是就可用模板缓存来阻止物体映像在非镜面区域中的绘制,a中镜面和墙壁映像都会被绘制,b中阻止了非镜面区域的绘制。

2023-09-22 18:34:26 559

原创 Direct3D融合技术

该技术能使我们将当前要进行光栅化的像素的颜色与先前已已光栅化并处于同一位置的像素的颜色进行合成,即将正在处理的图元颜色值与存储在后台缓存中的像素颜色值进行合成(混合),利用该技术我们可得到各种各样的效果,尤其是透明效果。在融合运算时需要遵循:首先绘制那些不需要进行融合的物体,然后将需要进行融合的物体按照相对于摄像机的深度值进行排序,如果物体已处于观察坐标系中,该运算的效率会相当高,因为此时只需要对Z分量进行排序,最后按照自后往前的顺序逐个绘制将要进行融合运算的物体。

2023-09-21 18:30:06 387

原创 Direct3D纹理映射

借助纹理映射技术,我们可将图像数据映射到三角形单元中,这种功能可以显著地增加所绘制场景的细节和真实感,例如创建一个立方体然后为其每个面映射一个板条纹理,从而将该立方体变为一个板条箱,在Direct3D中纹理用接口来表示,纹理是类似于表面的一个像素矩阵,与表面不同的是它可被映射到三角形单元中。

2023-09-12 11:33:51 727

原创 Direct3D光照

材质用结构D3DMATERIAL9来表示。

2023-09-06 19:03:31 659

原创 Direct3D颜色

在Direct3D中颜色用RGB三元组来表示,RGB数据可用俩种不同的结构来保存,第一种是,它实际上与类型完全相同,共有32位,D3DCOLOR类型种的各位被分成四个8位项,每项存储了一种颜色分量的亮度值。由于每种颜色分量占一个字节,所以每个分量的亮度值范围在[0,255]区间内,接近0的值表示低亮度,接近255的值表示高亮度。可以使用和来为D3DCOLOR赋值,二者的区别是前者不接收Alpha参数,其实前者试讲Alpha分量设为0xff(255)。在Direct3D中存储颜色的另一种结构是。

2023-09-06 17:27:12 674

原创 Direct3D绘制旋转立方体例程

【代码】Direct3D绘制旋转立方体例程。

2023-09-05 21:02:42 1682

原创 Direct3D中的绘制

参数BaseVertexIndex值得一提,局部索引缓存的内容应与局部顶点缓存中的顶点一致,假定我们想将球、盒以及圆柱体的顶点合并到同一个全局缓存中,对于每个物体我们必须重新计算索引,确保这些索引能正确的指向全局顶点缓存中对应的顶点,新索引的计算方法是为每个索引增加一个指定了物体顶点在全局缓存中存储的起始位置的偏移量,偏移量用顶点个数来度量。另外,对显存和AGP存储区进行。,该标记十分有用,因为这允许在我们访问新分配的内存时,硬件能够继续使用被丢弃的缓存中的数据进行绘制,这样硬件的绘制就不会中止。

2022-10-28 18:21:45 486

原创 绘制流水线

绘制流水线

2022-10-12 14:52:40 486

原创 Direct3D的初始化

dx初始化

2022-09-16 13:57:37 638

原创 基本图形学概念

D3D相关基本概念

2022-09-15 17:12:53 413

原创 基础数学知识

d3d数学基础知识

2022-09-15 15:46:14 780

原创 3d测试环境搭建

dx环境

2022-09-07 19:53:49 324

原创 vs项目属性页相关含义与使用

修改命令启动调试如果断点设置在了某个程序的入口,不方便在程序完全启动后附加调试,则可以修改属性页中调试页签下的命令选项,将其修改成某个exe,则可以先打断点然后将该项目设置为启动项目,随后执行调试启动即可项目属性页当前所在目录像属性中常规页签下的输出目录、中间目录等路径,是以该项目的工程文件所在的路径作为当前目录后的相对路径,所谓工程文件也就是以该项目命名.vcxproj文件。vcxproj文件:项目工程文件,描述了工程的各项属性,修改该文件后再重新build时vs会重新b.

2022-04-19 11:50:19 1940

转载 拷贝构造函数的参数为什么是&类型(避免造成循环调用)

转载自:https://www.cnblogs.com/this-543273659/archive/2011/09/18/2180575.html1.人为的规定2.避免造成循环调用(循环调用拷贝构造函数)

2021-04-19 11:07:23 391

原创 严格弱排序

严格弱排序:如果x<y为true,那么!(y<x)为true,可以理解为俩个数据正序逆序传入比较函数中,得到的结果需要一致。如果需要给map自定义key,那么key要支持operator<,并且operator<是严格弱排序的,如果不是严格弱排序,结果是未定义的(可能死循环,可能值被覆盖,windows和linux各种编译器版本之间也不一致)struct SKey{ SKey(int a, int b, int c) :m_a(a), m_b(b), m_c(c)

2021-04-17 18:14:22 799

原创 字符串string中“\0“与‘\0‘的打印、拼接问题

1."\0"为字符串长度为0的字符串指针,它与""等价2.打印"\0"与'\0'相同,cout输出时都会显示为空'\0'在string的初始化和拼接中size大小的不同 string s1 = "aaa\0bbb"; cout << s1.size() << endl; //3 cout << s1 << endl; //aaa cout << s1[3] << endl; //结尾为\0打印空

2021-04-15 19:38:21 3912 1

原创 函数到指针的隐式转换,非静态成员函数的特殊

转载自:https://www.cnblogs.com/Esfog/archive/2012/04/23/2467249.html函数在内存中的分配 首先说一下C/C++在创建一个变量的时候比如int a,相应的在内存就会分配一个4个字节(根据不同机器可能不同)空间来存放这个int变量,而假设这4个字节的起始地址是0XFF0A,那么实际上就存在一种变量名和内存地址的映射,即a可以看做是一个标示符,他只是代表着0XFF0A这个地址,在程序中你对a进行的操作实际上也就是对内存中以0XFF0A...

2021-02-08 11:51:33 717

原创 常量引用、非常量引用、临时对象

转载自:https://www.cnblogs.com/littleant/archive/2012/08/01/2618846.htmlhttps://www.cnblogs.com/BensonLaur/p/5234555.html产生临时对象的情况1.按值进行函数参数传递时2.函数返回对象时3.发生类型转化时,例如为了使函数成功调用而进行隐式类型转换C++中产生的临时对象是不可修改的,及默认为const的,非const引用只能绑定到与该引用同类型的对象,而const引用则可以绑定到不同

2021-02-02 18:25:02 1980 1

转载 C/C++定义全局变量/常量的几种方法的区别

转载自:https://www.cnblogs.com/catkins/p/5270388.html摘要:1.全局变量不要定义在头文件,只能声明在头文件,定义一定要在源文件中2.如果想使用其他文件中的全局变量,最稳妥的方法,就是在common.h中声明,在common.cpp中定义,其他文件include "common.h"来使用全局变量3.static、const修饰的全局变量的作用域只能是本身的编译单元,所以只想在本文件中全局变量,就在源文件中使用const或static来修饰4.全局域

2021-02-01 14:22:35 1036 1

原创 float、double怎么判断是否为0

float,double分别遵循R32-24,R64-53的标准。所以float的精度误差在1e-6;double精度误差在1e-15判断float:则是 if(abs(f) <= 1e-6);判断double:则是if(abs(f) <= 1e-15);小于,为0,大于,不为0 。...

2020-12-11 18:55:33 6019

转载 Lua调用原理(Lua虚拟栈)

转载自:https://blog.youkuaiyun.com/zhuzhuyule/article/details/41086745一、Lua虚拟机的栈1.1先简单介绍下Lua虚拟机的栈,如图:规则:①若Lua虚拟机堆栈里有N个元素,则可以用 1 ~ N 从栈底向上索引,也可以用 -1 ~ -N 从栈顶向下索引,一般后者更加常用②堆栈的每个元素可以为任意复杂的Lua数据类型,堆栈中没有元素的空位,隐含为包含一个“空”类型数据特性:若有4个元素分别入栈,则:①. 正数索引,栈底是1,然

2020-12-09 11:58:57 2188

原创 移动C++11

转载自:《C++primer》重新分配内存时,使用移动而不是拷贝元素编写reallocate成员函数之前,先思考下此函数需要做什么,该函数可以理解为vector<string>类型成员在当前容量使用光之后进行扩展存储的过程。为一个新的、更大的string数组分配内存 在内存空间的前一部分构造对象,保存现有元素 销毁原内存空间中的元素,并释放这块内存可以看出为一个StrVec重新分配内存空间会引起从旧内存空间到新内存空间逐个拷贝string,当拷贝一个string时,新strin

2020-12-01 22:20:30 799 1

空空如也

空空如也

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

TA关注的人

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