- 博客(105)
- 收藏
- 关注
原创 unity 渲染流水线
渲染流水线主要分为应用阶段、几何阶段、光栅化阶段。应用阶段:这一阶段最重要的输出是渲染所需的几何信息,即渲染图元。几何阶段:重要任务就是把顶点坐标变换到屏幕空间。通过对输入的渲染图元进行多次处理后,输出屏幕空间的二维顶点坐标、每个顶点对应的深度值、着色等相关信息。光栅化阶段:决定每个渲染图元中的那些像素应该被绘制在屏幕上。需要对上一个阶段得到的逐顶点数据进行插值,然后再进行逐像素处理。应用阶段的工作1.把数据加载到显存中。硬盘--->内存--->显存2.设置渲染状态。定义场.
2021-01-20 12:27:46
606
原创 设计模式--访问者模式
访问者模式:属于行为型模式基本原理:元素类的执行算法随着访问者改变而改变。主要流程: 1.创建元素类,内有不同的执行算法,根据不同的访问者选择不同的执行算法 2.创建访问类,实现不同的访问派生类,将自身传入元素类的执行算法#include <iostream>#include <string>#include <vector>using namespace std;class Keyboard;class...
2020-07-31 22:19:15
238
原创 设计模式--模板模式
模板模式:属于行为型模式基本原理:子类按照基类的定义的方法执行,子类实现具体的方法。主要流程: 1.创建基类,并定义方法执行的顺序 2.创建子类,每个子类具体实现基类中的方法#include <iostream>#include <string>using namespace std;//定义基类class Game{public: //定义需要子类实现的方法 virtual void initDate...
2020-07-31 22:17:54
236
原创 设计模式--策略模式
策略模式:属于行为型模式基本原理:一个类的行为或其算法可以在运行时更改主要流程: 1.创建策略基类,并根据不同行为实例化不同的策略类。 2.使用时选择合适的策略类注意:如果一个系统的策略太多最好考虑其他模式。#include <iostream>#include <string>using namespace std;//策略基类class Strategy{public: virtual int doOpe...
2020-07-31 22:16:46
156
原创 设计模式--空对象模式
空对象模式:属于行为型模式基本原理:用一个空对象取代 NULL 对象实例的检查主要流程: 1.创建一个基类 2.在这个基类上实例化一个该类型的空对象 3.在使用时没有找到可实例化的对象,返回该对象的空对象注意:空对象不是检查空值,而是反应一个不做任何动作的关系。这样的空对象也可以在数据不可用的时候提供默认的行为。#include <iostream>#include <string>using name...
2020-07-31 22:15:30
185
原创 设计模式--状态模式
状态模式:属于行为型模式基本原理:类的行为是基于它的状态改变的主要流程: 1.创建一个对象,该对象可以使用状态改变行为 2.创建状态类,对象可以使用这些状态来进行不同的行为#include <iostream>#include <string>using namespace std;class State;//创建一个对象,该对象受状态控制class Context{private: State *sta...
2020-06-30 23:23:56
1044
原创 设计模式--观察者模式
观察者模式:属于行为型模式基本原理:当一个对象被修改时,会自动通知它的依赖对象。主要流程: 1.创建一个对象,存储它的所有依赖对象 2.在对象被修改的时候,通知所有依赖的对象 3.创建依赖对象,有统一的刷新方法注意:避免循环依赖#include <iostream>#include <string>#include <vector>using namespace std;//依赖对象基...
2020-06-30 23:21:03
1762
原创 设计模式--备忘录模式
备忘录模式:属于行为型模式基本原理:保存一个对象的某个状态,以便在适当的时候恢复对象。主要流程: 1.创建一个状态对象 2.创建管理类,用来管理状态对象,支持修改状态和得到状态 3.创建存储类,用来存储当前的状态对象,支持存储和获得对象#include <iostream>#include <string>#include <vector>using namespace std;//对象...
2020-06-30 23:18:51
629
原创 设计模式--中介者模式
中介者模式:属于行为型模式基本原理:用一个中介对象来封装对象之间的交互主要流程: 1.创建对象,并可以传消息给中介者类 2.创建中介者类,用来处理对象之间的交互注意:中介者是用来处理对象之间的交互,不管是相同对象还是不同对象,如MVC中的C就是中介者。#include <iostream>#include <string>using namespace std;//创建对象class User{private: ...
2020-06-30 23:17:44
2098
原创 设计模式--迭代器模式
迭代器模式:属于行为型模式基本原理:顺序访问一组对象,不需要知道对象的底层。主要流程: 1.创建迭代器类,用来连接对象和判断是否有下一个对象。 2.使用时得到该迭代器类型,并顺序使用该迭代器注意:迭代器的类型要保持一致。可以参考c++语言中的容器迭代器是如何实现的。#include <iostream>#include <string>using namespace std;//创建一个迭代器class Iterator...
2020-05-31 22:40:46
201
原创 设计模式--解释器模式
解释器模式:属于行为型模式基本原理:创建解释器,来解释特定的上下文。通俗一点就是类似,先定义一个文本,再查看指定的关键字是否符合需求的在文本中。主要流程: 1.创建解释器类的终结符表达式类,就是用来判断关键词是否在关键字集合中。 2.创建解释器类的非终结符表达式类,利用终结符表达式类来判断关键字是否符合条件的在集合中。 3.定义一个环境类,它包含解释器需要的数据(即关键字集合),完成对终结符表达式的初始化,并调用非终结符表达式来进行解释...
2020-05-31 22:39:28
242
1
原创 设计模式--命令模式
命令模式:属于行为型模式基本原理:请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。主要流程: 1.创建命令对象。该对象中包含请求,和执行请求。 2.创建请求类,其中包含请求 3.创建命令调用类,寻找合适的执行对象注意:该模式的核心点在于请求包含在命令内。#include <iostream>#include <string>...
2020-05-31 22:36:54
215
原创 设计模式--责任链模式
责任链模式:属于行为型模式基本原理:消息可以在链式的结构中一层层的传递主要流程: 1.创建结构基类,并在基类中创建设置下一层的方法,和传递信息给下一层的方法 2.将基类实例化成不同的功能, 3.将每个实例化类根据需求连起来 4.使用时使用基类,传入信息注意:不能保证信息一定被接收。该模式降低了信息发送者与接收者的耦合性。#include <iostream>#include <strin...
2020-05-31 22:34:50
224
原创 设计模式--代理模式
代理模式:属于结构型模式基本原理:用一个类去代表另一个类的功能。主要流程: 1.创建功能类 2.创建代理类,代理类中有功能类中可以使用的功能 3.在使用的时候,使用的是代理类注意: 1.和适配器模式的区别,适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。 2.和装饰器模式的...
2020-04-29 22:01:29
152
原创 设计模式--过滤器模式
过滤器模式:又叫标准模式属于结构型模式基本原理:创建过滤器,过滤出符合标准的对象。主要流程: 1.准备原料,将对象抽象成有共性的一类 2.根据需求的不同创建各种过滤器 3.依靠过滤器过滤出需要的对象注意:过滤器是工具,创建的对象是原料#include <iostream>#include <strin...
2020-04-29 22:00:10
209
原创 设计模式--外观模式
外观模式:属于结构型模式基本原理:隐藏系统复杂性,为系统开放一个便于使用的接口主要流程: 1.创建系统和子系统 2.创建一个外观类,统一管理子系统的功能,并对外提供接口注意:外观类是管理子系统和对外提供接口#include <iostream>#include <string>using namespace ...
2020-04-29 21:58:39
178
原创 设计模式--装饰器模式
装饰器模式:属于结构型模式基本原理:创建一个装饰器用来对一个现有对象添加新功能,不改变对象结构主要流程: 1.根据对象创建一个修饰类,该修饰类要保持方法签名完整 2.在修饰类中根据需求添加新的功能 3.使用时将对象或对象的引用传入修饰类中注意:修饰类要与对象在一定程度上一致,新的功能只在修饰类中添加#include <iostream...
2020-04-29 21:57:11
179
原创 设计模式--组合模式
组合模式:又叫部分整体模式,属于结构型模式。 基本原理:以树形的结构将相似的对象组合起来。 主要流程: 1.创建对象 2.在对象中设置用来存放下一级相似对象的数据结构。 3.在对象中设置增删改查等功能。 注意:这种模式和数据结构中的树形结构相似#include <iostrea...
2020-03-10 11:57:17
170
原创 设计模式--过滤器模式
过滤器模式:又叫标准模式属于结构型模式 基本原理:创建过滤器,过滤出符合标准的对象。 主要流程: 1.准备原料,将对象抽象成有共性的一类 2.根据需求的不同创建各种过滤器 3.依靠过滤器过滤出需要的对象 注意:过滤器是工具,创建的对象是原料#include <iostream>...
2020-03-10 11:55:09
316
原创 设计模式--桥接模式
桥接模式属于结构型模式 基本原理:链接两个不同的独立变化的维度。将实现类与抽象类变成两个独立的维度。 主要流程: 1.创建一个维度A 2.创建另一个维度B,并让之前的维度A成为本维度B的一个成员 3.在使用时创建维度B,并对维度B的成员维度A进行赋值 注意:抽象类依赖实现类#include...
2020-03-10 11:52:44
195
原创 设计模式--适配器模式
适配器模式属于结构型模式 基本原理:根据不同的需求,使用一个适配器去寻找应对的方法。 主要流程: 1.创建解决方法的类。 2.创建一个适配器,根据不同需求对应相应的解决方法。 3.使用一个类去分配适配器。 注意:适配器不是在详细设计时添加的,而是解决正在服役的项目的问题。#include ...
2020-03-10 11:46:39
109
原创 设计模式--原型模式
原型模式:属于创建型模式 基本原理:又称为克隆模式,拷贝本身对象。可以直接使用语言中的拷贝构造。 主要流程:在构建对象的时候实现一个对本身的拷贝函数。 特别注意:要有对应的销毁方法。#include <iostream>using namespace std;//对象基类,可以对有共性的对象统一要求功能函数class prototype{...
2020-02-29 01:18:25
112
原创 设计模式--创建者模式
建造者模式属于创建型模式 基本原理:有底到高一层层的创建叠加,上层是依靠底层的创建。就如细胞组成人体不同的组织,组织组成了不同的人。 主要流程: 1.建立最基本的单元 2.建立所要建造的物品,使用基本单元创建该物品的元素 3.使用物品建立完整的结构#include <iostream>...
2020-02-29 01:16:37
143
原创 设计模式--单例模式
单例模式属于创建型模式基本原理:是全局只有一个对象,不管在何处使用,都是使用的同一个对象中的方法。主要流程:创建时如果已经有存在的则返回已有的,如果没有则创建一个新的特别注意:如果是多线程,要避免同时创建#include <iostream>using namespace std;class SingleObject{private: SingleObject...
2020-02-29 01:13:12
139
原创 设计模式--工厂模式--抽象工厂模式
工厂模式属于创建型模式基本原理:使用一个工厂类统一生产各种产品。主要流程: 1.创建产品的基类,便于统一返回创建的产品 2.创建各种产品,继承基类,注意多态 3.创建工厂类,对每种产品进行区分创建。 4.在使用时要先实例化工厂类,在调用期内生产的方法。优点: 1.一个调用者想创建一个对象,只要知道其名称就可以了。 ...
2020-02-29 01:09:59
115
原创 c++模板元
模版元主要解决递归加速,单纯的递归会反复调用,函数等待,返回,所需时间多。模版元编译的时候慢,代码会增加,把运行时间节约在编译时template<int N>struct data{ enum{res=data<N-1>::res + data<N-2>::res};};template<>struct data<...
2020-01-18 00:14:20
136
原创 Socket -- udp
接收者 //完成System.out.println("UDPProvider Started."); //作为接收者,指定一个端口用于数据接收 DatagramSocket ds = new DatagramSocket(20000); //构建接收实体 final byte[] buf = n...
2019-12-30 23:28:18
119
原创 Socket -- tcp
创建SocketSocket socket = new Socket();绑定一个socket到本地地址和端口上socket.bind(new InetSocketAddress(Inet4Address.getLocalHost(),20001));设置读取超时时间socket.setSoTimeout(2000);//是否复用未完全关闭的Socket地址,对于制定bind操作...
2019-12-30 23:24:21
255
原创 lua协程
coroution协程定义协程函数,co = coroutine.create(function(a,b) end)启动协程函数和继续运行,coroutine.resume(co,10,20)co = coroutine.wrap(function(a,b) end) 另一种创建协程函数方法,可co(10,20)这样启动协程函数暂停协程函数,coroutine.yiel...
2019-11-30 11:35:52
202
原创 lua文件操作
io.xxx 文件操作file = io.open("data","r")--打开文件--[["r":只读,读取data文件必须存在,"w":只写,文件可以不存在,不存在会创建,存在会删除原内容"a":附加方式只写,文件不存在会创建,存在则在原文件后面添加"r+": 以可读写方式打开文件,该文件必须存在。"w+": 打开可读写文件,若文件存在则文件长度清为零,即该文件...
2019-11-30 11:35:12
348
原创 lua元表与面向对象
lua元表 扩展普通表的行为setmetatable(tab,mematable),如果元表中存在__mematable,setmematable会失效,__mematable可以保护元表,禁止访问或修改元表中的成员。getmetatable(tab),获取tab的元表。__index:当搜索表的key不存在的时候调用,如果__index为一个函数的时候调用该函数,有两个参数table...
2019-11-30 11:34:30
646
原创 c++命名空间
命名空间:主要解决全局变量的冲突,内部不允许私有变量,所有变量都是公有的。namespace data{int x = 10;}data::x ::为域作用符,直接使用等同于使用全局变量,不存在就是0,不包含匿名命名空间内变量同一个文件引用static,当前文件static > 跨文件的externextern:引用外部全局变量static:特点...
2019-10-20 21:12:42
264
原创 c++特殊工具与技术
类型识别typeid:用于返回表达式的类型dynamic_cast:用于将基类的指针或引用安全的转换成派生类的指针或引用Base &b1,*b2;//Base是基类 Derived是派生类Derived &d = dynamic_cast<Derived&>(b1);Derived *d = dynamic_cast<Derived*&...
2019-10-20 21:05:42
191
原创 c++多重继承和虚继承
多重继承多重继承是指从多个直接基类中产生派生类的能力。多重继承的派生类继承了所有父类的属性。struct Base1 {Base1() = default;Base1(const string&);Base1(shared_ptr<int>);};struct Base2 {Base2() = default;Base2(const st...
2019-10-20 21:04:09
254
原创 c++随机数
随机数随机数库组成引擎:生成随机数unsigned整数序列分布:使用引擎返回服从特定概率分布的随机数default_random_engine e;//生成随机无符号数for (size_t i = 0; i < 10; ++i){//e()用来生成随机数cout << e() << endl;}Engine e:默...
2019-10-20 21:03:07
628
原创 c++正则表达式
正则表达式是一种描述字符序列的方法,就是寻找一定规则的匹配字符序列。在头文件regex中regex:表示有一个正则表达式的类regex_match:将一个字符序列与一个正则表达式匹配regex_search:寻找第一个与正则表达式匹配的子序列regex_replace:使用给定格式替换一个正则表达式sregex_iterator:迭代器适配器,调用regex_search来...
2019-10-20 21:02:00
286
原创 c++tuple和bitset
tupletuple是类似pair的模板,一个tuple可以有任意数量的成员,类型也可以不相同make_tuple:返回一个用给定初始值初始化的tuple,返回的tuple类型从初始值推断可以使用()、{}初始化但不能使用={}tuple<size_t, size_t, size_t> three;//tuple<int, string, vector<...
2019-09-22 22:02:02
154
原创 c++模板的重载与特例化
//重载与模板//函数模板可以被另一个或普通非模版函数重载,名字相同的函数必须具有不同数量或类型的参数template<typenameT> stringdebug_rep(constT&){/**/}template<typenameT> stringdebug_rep(T*p){/**/}stringdebug_rep(co...
2019-09-15 19:04:04
444
原创 c++可变参数模板函数
可变参数模版函数类型一致可变参数 “...” 使用头文件(cstdarg,va_list arg_ptr//开头指针va_start(arg_ptr, n)//从开头开始读取n个va_arg(arg_ptr,T)//根据数据类型取出数据va_end(arg_ptr)//结束读取template<typenameT>TaddSum(intn, Tt...
2019-09-15 19:02:43
349
原创 c++模板实参推断
//模板实参推断//类型转换与模板类型参数template<typenameT> Tfobj(T, T);//实参被拷贝template<typenameT> Tfref(constT&, constT&);//引用strings1("aaaaa");conststrings2("bbbbb");fobj(s1, s...
2019-09-15 19:01:09
737
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人