
c++
文章平均质量分 71
Gary的面包屑小道
这个作者很懒,什么都没留下…
展开
-
【toLua++】toLua++编译生成tolua++.exe史上完整版
准备材料:1、Lua源码,我用的是Lua5.12、toLua++源码白嫖党这里集合:链接:https://pan.baidu.com/s/1iCUWNCZve48JP5CCVDeIXg 提取码:eao0这里面有我编译好的Lua的源码以及lib库,以及生成的toLua++.exe,版本是:tolua++-1.0.92,命令行输入:toLua++ -v即可查看。如果你只想用toLua++.exe,现在可以撤退了。lua-5.1.5里面结构如图:toLua++里面结构如图:下面是整个.原创 2021-02-26 11:22:09 · 1108 阅读 · 0 评论 -
使用C++将文件流转换成字符串
很多时候在C++里面,读取文件的方式很多,加上操作字符串是比较方便的一种形式,因为string类里面提供的方法还是比较充足的,下面记录一种将文件读取成字符串的方法:需要的基础类型:string:字符串类型ifstream:输入流读取的一个过程://首先定义一下我们需要用到的变量std::string CodeFilestr; // 假设我们现在要读取的是一个.cpp的代码文...原创 2019-10-20 19:01:04 · 5488 阅读 · 2 评论 -
DX9的绘制流水线
一旦我们建立了3D场景的几何描述,确定好虚拟摄影机,接下来的任务就是在显示器中建立3D场景的2D表示,为了实现这一个过后才能,我们专门的流程来完成它,我们称之为绘制流水线。大致如下图:(从左至右)在绘制流水线中,有几个比较重要的部分就是,是坐标系的变换,这类坐标的变换通常是使用矩阵来实现的,Direct3D可以帮助我们实现这些变换,我们所提供的仅仅只是提供需要变换的矩阵以及变换的类型,,Dir...原创 2018-11-16 22:49:56 · 720 阅读 · 0 评论 -
绘制流水线——虚拟摄影机
摄影机指定了场景对于观察者的可见部分,也就是我们依据那一部分的3D场景来绘制我们的2D图像,在坐标系中,摄影机是有位置以及方向的,定义了可见空间体积。下图展示了一个虚拟的摄影机模型: 上述的空间体积是一个视域体,采用视域体的主要原因是因为显示屏为矩形,位于视域体之外的矩形是不可见的,在进一步处理的时候,就应该丢弃掉,我们把丢弃掉的这个过程称之为裁剪。投影窗口是一个2D区域,位于视域体中...原创 2018-11-16 20:59:51 · 288 阅读 · 0 评论 -
绘制流水线——模型表示:顶点格式、三角单元、索引
场景是物体挥着模型的集合,任何的物体我们都可以使用三角网格来逼近的表示,三角网格是构成物体的模型的基本单元。我们通常使用下面的术语来描述网格中的三角形:多边形、图元、网格几何元。一个多边形中相邻两边的交汇点称之为顶点,描述三角形单元的时候,我们需要指定三角单元的顶点,描述物体的时候,我们应该指定三角单元的列表。顶点格式刚才对于顶点的描述是几何学的,但是在Direct3D中,刚才的描述可...原创 2018-11-16 20:42:15 · 588 阅读 · 0 评论 -
Direct3D初始化例程
看过Direct3D初始化之后,我们来总体的串一下,搞出个示例,方便学习。我们现在要做的就是实现Direct3D的初始化,并将背景设置为红色。在下面的例子中,我们使用了d3dUtility.h/cpp,这两个文件中就是实现每一个Direct3D应用程序都要干的事情,例如创建窗口、初初始化Direct3D、进入应用程序消息循环等,现在我们将这些共性的任务封装在一起。开始例子之前,我们先来...原创 2018-11-16 16:43:37 · 499 阅读 · 0 评论 -
在屏幕绘制一个旋转的线框立方体(使用顶点缓存和索引缓存)
首先里面还是有两个基本的文件:d3dUtility.h以及d3dUtility.cpp里面的主要内容就是实现Direct3D的初始化,以及模板函数的的实现,和消息循环函数的声明,回调函数的声明。具体的解释在博客:在屏幕绘制一个三角形以及Direct3D初始化例程中有详细的解释,这里就不在过多的重复。我们主要来看主函数文件Cube.cpp里面是怎么实现,我们在代码中详细的讲解,下面是cu...原创 2018-11-20 14:57:33 · 614 阅读 · 0 评论 -
Direct3D基础——预备知识:表面
表面我们可以将其看作是Direct3D主要用于储存2D图像数据的一个像素矩阵。虽然我们将表面看作矩阵,但是其实际的存储是在一个线性数组里面。表面的宽度(Width)和高度(Height)都是用像素来表示,跨度(Pitch)则用字节来度量,更具体的说:跨度(Pitch)可能比宽度(Width)更宽,这要依赖于底层的硬件实现,所以不能简单的假设pitch = Width×Height。在代...原创 2018-11-14 23:39:21 · 427 阅读 · 0 评论 -
Direct3D基础——Direct3D概述
概述Direct3D是一套底层图形API,借助该API我们可以利用硬件加速功能来实现3D场景的绘制,Direct3D可以视为应用程序和底层设备的交互。下图展示了Direct3D和硬件之间的交互关系:图中Direct3D部分是一套已经定义好的,由Direct3D提供给应用程序和开发人员的接口函数,这些接口代表了当前Direct3D支持的所有功能。注意:有些功能Direct3D支持,但...原创 2018-11-14 22:32:00 · 4132 阅读 · 2 评论 -
Direct3D基础——Direct3D的初始化
首先概述一下Direct初始化的大概步骤(稍后我们会详细说明):1、获取接口IDirect3D9 的指针。该接口用于获取系统物理硬件设备的信息并创建接口:IDirect3DDevice9,接口可以看是一个C++对象,代表了我们用来显示3D图形的硬件物理设备。2、检查设备的性能(D3DCAPS9),判断显卡是否支持硬件顶点的计算,是因为我们必须明确显卡是否支持该功能,才能创建IDirect3...原创 2018-11-15 22:55:10 · 938 阅读 · 0 评论 -
Direct3D基础——颜色
颜色表示在Direct3D中颜色使用RGB来表示,我们认为颜色都可以分成:Red(红色)、Green(绿色)、Blue(蓝色)这三种颜色的加性混合,跟向量一样。RGB数据可以使用两种不同的结构来保存。第一种是:D3DCOLOR,这个结构和DWORD完全相同,由typdef进行定义,一共4个字节,32位,D3DCOLOR类型中的各个分量被分成四个8位置的数据,分别来储存RGB三个颜色和一...原创 2018-11-21 14:37:58 · 930 阅读 · 0 评论 -
在屏幕绘制两个三角形(平面着色模式和Gouraud着色模式)
该例程有三个文件:d3dUtility.cpp,colorTriangle.cpp,d3dUtility.h关于d3dUtility.cpp以及d3dUtility.h两个文件里面内容在博客:Direct3D初始化例程中有详细的解释以及拿来就能用的源代码但是在初始化以及绘制普通的三角形的例子中我们没有涉及到颜色,现在我们使用颜色,就需要在.h文件中定义一些全局的颜色,供图元中的顶点使用。...原创 2018-11-21 15:49:51 · 1102 阅读 · 0 评论 -
OpenGL之顶点着色器、片段着色器
本片文章的最终成果是在屏幕上画出一个三角形。涉及的知识主要有:顶点输入,顶点着色器,编译着色器,片段着色器,着色器程序,链接顶点属性,顶点数组对象,索引缓冲对象。首先我们来简答介绍一下OpenGL的渲染管线:1、渲染管线的第一部分是顶点着色器,顶点着色器允许我们设置一些简单的顶点属性,顶点着色器将一个顶点作为单独的输入,将顶点进行一些坐标系的变换(局部坐标系,世界坐标系,观察坐标系等)...原创 2019-08-04 17:53:47 · 1680 阅读 · 0 评论 -
DirectX中的粒子系统
自然界中有现象包含了大量的行为相同的,微小粒子,比如:雪花,烟火等,粒子系统通常用来描述这些场景。粒子是自然界中一种微小的东西,所以显示例子的最好的方法就是使用点图元,但是点图元在被光栅化的时候会被映射为一个像素,此时我们就无法去灵活的操作他,因为我们要去经常的改变他的大小,或者去给这个图元映射纹理。很早之前有一个技术叫做:广告牌,广告牌就是一个四边形,通过控制他的世界矩阵,来使其总面向摄影机...原创 2019-02-15 09:50:51 · 690 阅读 · 0 评论 -
预编译和预编译头的概念以及使用
什么是预编译?a,预编译就是在编译代码之前的一些先前的处理工作b,处理一些以"#"开头的指令 #inlcude "头文件" #define 宏定义 条件编译等预编译指令就是在正式编译之前由编译器编译一把的内容,可以放在程序的任何位置C编译系统会在对程序进行统一的编译之前,会对预编译指令进行预处理何时需要用到预编译?a,总是经常使用不...原创 2019-02-01 16:07:22 · 1143 阅读 · 0 评论 -
在屏幕绘制一个三角形(使用顶点缓存)
首先头文件d3dUtility.h里面:Init3D函数:里面实现了Direct3D初始化的整个过程:包括获取接口Direct3D9的指针,检验设备的顶点运算,填充设备属性结构体的内容,创建IDirect3DDevice9的接口等。EnterMsgLoop函数:该函数接受了一个显示函数的函数指针,然后将应用程序的消息循环进行封装,穿进去的显示函数就是进行绘制的函数,然后EnterMsgLo...原创 2018-11-19 22:32:53 · 858 阅读 · 0 评论 -
D3DX几何体
在代码里面通过创建三角单元来构建3D模型都是非常频繁的,那么D3DX库里面也提供了一下生成简单3D模型的接口。D3DX提供了下面6个接口:D3DXCreateBoxD3DXCreateSphereD3DXCreateCylinderD3DXCreateTeapotD3DXCreatePolygonD3DXCreateTorus以上的接口非常相似,而且都使用了D3DX的网格...原创 2018-11-19 19:40:19 · 377 阅读 · 0 评论 -
Director3D中的绘制——顶点缓存和索引缓存
一个顶点缓存是储存有顶点数据的连续空间,一个索引缓存是储存有索引数据的连续空间,使用顶点缓存和索引缓存来表示相关的数据,而不使用数组来表示的原因是因为:顶点缓存和索引缓存储存在显存中,在处理的时候能够获得比系统内存更快的处理速度。在代码中,顶点缓存使用的接口IDirectorVertexBuffer9表示,索引缓存使用的是IDirectorIndexBuffer9表示。创建顶点缓存和索引缓...原创 2018-11-19 17:31:56 · 713 阅读 · 0 评论 -
Direct3D基础——光照的组成、材质、顶点法线、光源
为了增强所绘制的场景的真实感,我们会为场景增加光照,使用光照来描物体的立体感。使用光照的时候,我们就无需描述顶点的颜色,Direct3D会将顶点送入光照计算引擎,然后引擎根据光源类型,材质以及物体表面和相对于光源的朝向等等,计算出内个顶点的颜色值。基于某种光照模型然后计算出顶点的颜色,效果更nice。光照的组成环境光这种类型的光经过其他物体表面反射到达所观察物体,并且照亮场景。比如:某...原创 2018-11-22 11:00:59 · 1053 阅读 · 0 评论 -
C++中BYTE、WORD、DWORD的作用以及区别
在VC++6.0中,BYTE、WORD、DWORD实际上是一种无符号整形,在WINDEF.h中被定义typedef unsigned char BYTE;typedef unsigned short WORD;typedef unsigned long DWORD;也就是说BYTE是无符号char类型,WORD是无符号short型,DWORD是无符号long型在VC++6.0...原创 2018-11-15 11:53:26 · 26578 阅读 · 0 评论 -
Direct3D基础——预备知识:多重采样、像素格式、内存池、交换链和页面置换、深度缓存、顶点运算、设备性能
多重采样用像素矩阵表示图像的时候往往会出现块状效应,多重采样便是一项用于平滑块状图像的技术。图片来自:DirectX9.03D游戏开发编程基础左边那条是一条锯齿线,右边是一条经过采样的反走样线,看上去要平滑的多。D3DMULTISAMPLE_TYPE枚举类型包含了一系列枚举常量值,用于表示对表面进行多重采样的级别:1、D3DMULTISAMPLE_NONE:禁止多重采样...原创 2018-11-15 16:54:49 · 1068 阅读 · 0 评论 -
D3DX库中表示4×4的矩阵的类:D3DXMATRIX
编写Director3D应用程序时,我们通常只使用4×4的矩阵以及1×4的行向量。注意:使用这两种维数的矩阵,意味着一下的乘法是有意义的:1、向量——矩阵乘法,若v是1×4的行向量,T为4×4的矩阵,则乘积vT是有意义的,是1×4的行向量2、矩阵——矩阵乘法,若T和R都是4×4的矩阵,则乘机就是4×4的矩阵,乘积TR和RT都有意义,但是TR和RT不一定相等在D3DX中可以使用D3D...原创 2018-11-13 21:58:52 · 1092 阅读 · 0 评论 -
static和const
今天复习的时候突然想起了static和const,但是因为琐碎的点还蛮多的,别人问起来总是想起一点说一点,没有系统的整理,所以晚上专门写一篇博客整理一下。static首先C语言中static可以修饰变量,可以修饰函数。在修饰变量中,static可以修饰局部变量,也可以修饰全局变量。第一,修饰变量:a,修饰局部变量,普通的局部变量是在栈中开辟,当函数运行结束,函数的栈空间也就被释放,对应的局部变量也...原创 2018-03-12 09:59:12 · 245 阅读 · 0 评论 -
C++知识体系思维导图
http://download.youkuaiyun.com/download/dy_1024/10260200原创 2018-02-26 20:15:07 · 699 阅读 · 1 评论 -
以String类浅谈深浅拷贝——C++
以String类浅谈深浅拷贝——C++ 提到字符,我们会想到字符串以及字符数组, 字符数组就是用数组储存的字符,而对于字符串,在C语言中,字符串有个特点就是以'\0'结尾,也叫做C风格的字符串,在C语言中也有很多对字符串进行操作的函数,比如:strlen,strcpy,strcmp......等等。而在C++中,对于字符串是用String类来进行管理。 那首先,我们来模拟实现Strin原创 2018-01-20 18:05:46 · 452 阅读 · 0 评论 -
文件压缩机——C++
文件压缩机——C++ 此次我将给大家介绍一个小项目,叫做:文件压缩机,顾名思义,就是完成文件的压缩和解压缩,其原理就是:利用Huffman编码,将文件的内容改成对应编码,在储存到文件里面去,再根据对应的编码和相关信息解压出原来的文件。 我们先讲解一下大概的流程:假设我们文件储存的内容是:ABBBCCCCCDDDDDDD,A:出现1次,B:出现3次,C:出现5次,D:出现7次首先,我原创 2018-01-25 12:16:24 · 489 阅读 · 0 评论 -
虚函数、虚继承——C++
C++中多态的实现机制——虚表关于虚表,我们就要用到一个关键字:virtual,可以修饰函数,也可以修饰类。类的成员函数被virtual修饰之后,就成为了虚函数;修饰类,主要是虚继承。在此之前,我们首先要了解一个概念:对象模型,也就是说,一个基类形成之后,里面的成员是怎么存放的,当派生类继承基类之后,派生类的成员是怎么存放的。我们首先看下面一段代码,普通的public继承:cl原创 2018-01-13 18:55:03 · 454 阅读 · 0 评论 -
C++特性之一:多态
面向对象特性之一:多态面向对象有三大特性:封装、继承、多态,其中多态是非常重要的一部分,而且多态也是很多公司在招聘C++方向的程序员的时候,经常会问到的问题,记得京东面试的时候,面试官的第一个问题就是:什么是多态?当时七七八八也说了一些,但是还是感觉没有条理,如果能够条理清晰的给别人人阐述出来,那一定是个不小的加分项,所以今天总结一下,希望对各位有所帮助。既然要描述多态,那么就要了解多态的概念,多...原创 2018-01-13 18:49:48 · 362 阅读 · 0 评论 -
智能指针——C++
智能指针——C++ 在C和C++的代码编辑的过程中,我们经常会自己动态的开辟空间,但是随着代码量的增加难免在有些时候,会忘记释放动态开辟的空间,此时就会造成内存的泄漏,那么我们怎么样才能避免这样的事情呢?就是用我们的智能指针。智能指针:定义一个类,来封装资源的分配和释放,在构造函数完成资源的分配和初始化,在析构函数中完成资源的清理。首先我们先来介绍第一种智能指针:AutoPtr原创 2018-01-21 22:01:04 · 337 阅读 · 0 评论 -
模版——函数模版、类模版
函数模版:代表了一个函数家族,该函数与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。模版是一个蓝图,本身不是类或者函数,编译器用模版产生指定的类或者函数的特定类型版本,产生模版特定类型的过程成为模版的实例化。 注意:模版被编译两次①函数实例化之前,检查模版代码本身,查看是否有语法错误;②实例化期间,检查模版代码,查看是否所有的调用都有效,原创 2017-11-27 12:09:27 · 557 阅读 · 0 评论 -
关于C++的几个小知识
为什么c++支持重载而C语言不支持重载?因为C语言和c++的编译器不同的原因,假设我们在C语言和c++中同时定义一个void function(int x, int y)函数,首先进行编译,然后链接,生成城可执行文件,其中编译的过程就是把高级语言转变成汇编语言,同样的一个函数,在C语言中,我们刚才的函数名字就变成:_function存放在库中,但是在C++的中,编译之后,他的名字就变成:_func...原创 2018-03-28 16:25:59 · 291 阅读 · 0 评论 -
C++primer(第五版)Sales_item.h头文件
C++primer(第五版)1.51练习章节需要有一个Sales_item类,但是给的网站有点蛋疼,直接复制下面就好咯:#ifndef SALESITEM_H#define SALESITEM_H#include <iostream>#include <string>class Sales_item{public: Sales_item(const s...原创 2018-08-23 22:01:35 · 3029 阅读 · 10 评论 -
使用C++获取目录下的指定文件:结构体_finddata_t 以及函数_findfirst、_findnext、_fineclose
获取文件夹里面下面的相同的文件是经常用的一个操作,比如我们需要获取文件下面所有的.exe文件,这个时候我们就需要一个结构体和三个函数来帮助我们。 首先需要的结构体:struct _finddata_t 这个结构体就是用来存储和文件有关的信息,其结构以及含义如下: struct _finddata_t { //文件属性的存储位置。它存储一个unsig...原创 2018-09-20 17:59:58 · 858 阅读 · 0 评论 -
游戏开发中必备的数学知识(三)——矩阵的基本变换
基本变换使用Direct3D编程的时候,我们使用4×4的矩阵表示一个变换。其思路如下:设置一个4×4的矩阵中元素的值,使其表示某一个具体变换,然后我们将某一点的坐标或者某向量的分量放入一个1×4的行向量v中,乘积vX就是成为了一个新的经过变换的向量v。此时,我们之所以使用4×4的矩阵,,是因为这种特定维数的矩阵有能力表示我们所需要的所有变换,3×3的矩阵似乎更适合3D变化,但是例如:平移...原创 2018-11-13 23:40:40 · 1783 阅读 · 0 评论 -
Windows下boost库下载之后怎么安装
boost库是在C++开发过程中比较常用的库,里面有很多使用的工具供我们使用。但是下载之后通常是一对莫名其妙的文件,具体怎么应用却是不明白,现在就将使用的方法分享出来。1、下载Boost库官网:https://www.boost.org/users/download/根据自己的系统下载对应的压缩文件我下载是Windows下面的boost_1_68_0.zip2、下载好之后,会有...原创 2018-11-05 16:25:12 · 5081 阅读 · 0 评论 -
游戏开发中必备的数学知识(二)——矩阵
一个m×n的矩阵是一个m行、n列的矩形数组,行数和列数指定了矩阵的维数,使用行和列组成双下标来标识矩阵的维数。通常用大写的字母表示矩阵。一下是一个3×3的矩阵:M,和一个2×4的矩阵:N有时候一个矩阵只包含一行或者一列,我们将这种矩阵称之为行向量或者列向量。矩阵相等两个矩阵维数相等且对应的元素也相等,这两个矩阵相等矩阵数乘矩阵可以和标量进行数乘,规则就是将标量个每一个矩...原创 2018-11-12 22:41:45 · 1567 阅读 · 0 评论 -
游戏开发中必备的数学知识(一)——向量
3D空间中的向量向量:只有长度和方向,不含有位置信息的量,也就是说,两个向量只要长度和方向相同,则二者相同。左手坐标系和右手坐标系同样是三维的坐标系,两者的差别在Z轴上面。在左手坐标系中,Z轴正向穿入纸面;右手坐标系中,Z轴正向穿出纸面当某一向量的其起始坐标和坐标系的原点重合的时候,我们称该向量处于标准位置。用来描述向量坐标的,称之为分量。当某一个向量的起始位置在坐标系...原创 2018-11-09 22:29:58 · 1857 阅读 · 0 评论 -
D3DX库中表示3D空间向量的类:D3DXVECTOR3
D3DVECTOR:注意:里面只定义了单个变量,代表x,y,z的坐标。typedef struct D3DVECTOR { float x, y, z;}D3DVECTOR;D3DXVECTOR3:注意:D3DXVECTOR继承了D3DVECTOR里面的三个元素typedef struct D3DXVECTOR3 : public D3DVECTOR{public:...原创 2018-11-09 21:37:38 · 1646 阅读 · 2 评论 -
使用VS生成本地静态库文件以及静态库文件的使用
如何生成静态库?1、使用vs新建空项目,我使用的是vs2017步骤:“文件”-->“新建”-->“项目”-->“空项目”2、添加头文件,添加源文件注:我们现在要生成自己的math静态库,里面封装了一些简单的数学计算的方法,首先我们在头文件里面进行函数的声明,因为我们需要将头文件提供给使用者,所以只在头文件中进行函数的声明,在源文件中进行函数的定义。2.1添...原创 2018-10-30 14:50:28 · 1092 阅读 · 0 评论 -
使用VS生成本地动态库文件以及动态库文件的使用
如何生成动态库文件?1、本地使用的是vs2017,新建一个空项目,工程名叫:Creat_DLL“文件”-->“新建”-->“项目”-->“确定”此时,目录结构如下:2、右键点击工程名-->“属性”-->“常规”-->“配置类型”,然后选择“动态库(.dll)”--->“确定”3、添加头文件:右击“头文件”-->添加“-...原创 2018-10-31 16:39:02 · 758 阅读 · 0 评论