自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 GL_ARRAY_BUFFER是什么?

OpenGL基础

2023-03-16 08:54:12 870

原创 OpenGL窗口,视口,裁剪区域

OpenGL基础,窗口 视口 裁剪区域的区别

2023-03-12 02:39:05 1323 1

原创 opengl如何控制不想出现的几何图形 表面剔除or深度测试or多边形模式and多边形偏移

OpenGL基础,控制不想被光栅化的几何图形

2023-03-12 01:44:27 282

原创 OpenGL里的矩阵堆栈(MVP的初始化以及后续更改M,V,P的操作)

openGL基础

2023-03-11 09:17:54 714 1

原创 坐标系、视窗体(裁剪区域),存储着色器

基础渲染,存储着色器

2023-03-10 01:28:32 308

原创 OpenGL三种向着色器传递数据的方法 attributes,uniform,texture以及中间产物

OpenGL固定管线工作流中的数据类型

2023-03-09 07:25:34 679 1

原创 C++的内存机制,程序变成exe执行的过程

C++的内存机制:C++的内存主要分为以下五个存储区:栈:主管存储位于函数内的局部变量,由编译器负责分配和释放内存堆:主管new分配的内存,由程序员delete和delete[]负责释放自由存储区:由程序员的malloc等分配,由free释放,如果忘记了free,会造成内存泄漏。在程序结束时会由os回收。全局区/静态区:存放static变量和全局变量,程序编译好便会存在,编译器会自动赋值,程序结束时候释放。常量存储区:专门存储不能修改的常量。栈是由代码底层(系统)实现的,有专门的寄存器指向栈所

2022-02-09 18:21:50 641

原创 做做游戏客户端面试题,智能指针之类的

如果在一个建立了TCP连接的socket上调用recv函数,返回值为0,则表示()答:解阻塞与非阻塞recv返回值没有区分,都是<0 出错=0 连接关闭(>)0 接收到数据大小inline, static, constructor三种函数都不能带有virtual关键字。inline是编译时展开,必须有实体;static属于class自己的,也必须有实体;virtual函数基于vtable(内存空间),constructor函数如果是virtual的,调用时也需要根据vtable

2022-02-08 22:30:33 2474

原创 设计模式:visitor访问者模式

在软件构建的过程中,由于需求的改变,常常需要在某类层次结构中增加新的方法(从基类到派生类都要),如果直接在基类中更改,就会破坏原有设计。visitor模式可以在不改变各元素类的前提下“拓展”作用于这些元素的新变化。本设计模式的主要点是double dispatch二次多态辨析每个visitor派生类都可以定义新的element方法,这样就达到了不该变element结构设计而拓展功能的效果,当然这么做的设计前提是element在结构设计上已经稳定,及不会有新的派生类,要变化的只有增加操作方法。(这个前

2022-02-05 23:53:26 370

原创 设计模式:命令模式

将请求(行为)封装成对象,从而更加灵活的使用,比如对行为的记录、撤销、重做等,命令模式将组件的行为和组件本身解耦了。command的模式和c++的仿函数很像,command模式以“接口-实现”来定义接口规范,更加严格,但是虚函数会有性能损失,是运行时绑定。C++的仿函数是以函数签名来定义行为规范,更加灵活,性能也更高,运用了模板(自动推导类型),是编译时绑定。本质都是将行为对象化。#pragma once#include <iostream>#include <vector&

2022-02-05 21:27:28 188

原创 设计模式:责任链模式

也是数据结构模式的一种,处理了在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接受者的问题,实现了请求发送者和接收者的解耦。将接受的对象链接成一条链,并让请求沿着这条链传递,直到达到请求的目的或者责任链遍历完成返回异常,使得多个对象都有机会能够处理请求。到游戏开发中,比如策划出了个像方舟那样的关卡链,玩家需要从本章第一关闯关到最后一关,此时我们需要发送一个维护到每个关卡中,如果使用责任链设计模式,我们只需要将维护请求发送到责任链首部的那个关卡,每一个节点就都能够接收到维护请求

2022-02-05 17:32:32 105

原创 设计模式:composite组合模式

属于数据结构模式的一种,常常有一些组件再内部具有特定的数据结构,如果客户程序依赖这些数据结构,那么将极大的破坏组件的服用。我们需要将这些特定的数据结构封装在内部,再外部提供统一的接口,来实现与特定数据结构无关的访问。就是将客户代码与复杂的对象容器结构解耦合。composite模式将对象组合成部分-总体的层次结构,对一对一,一对多统一视为一对一,使得用户对单个对象和组合对象的使用具有一致性。用户无需关心处理的是单个的对象,还是组合的对象容器。使用了composite后,用户将与抽象接口发生依赖,而不是与具

2022-02-05 10:45:41 2503

原创 设计模式:memento备忘录模式

就跟游戏的存档的概念一样,在软件构建的过程中,转换某种状态后,出于某种需要,我们需要程序能够回溯到处于某个时间节点之前的状态。但是我们又不能把对象的状态公开(会暴露对象的细节实现)。如何在保持封装性的同时又能有这种类似存档的功能。答案就是备忘录模式(一种思想,而非实现)在不破坏封装性的前提下,捕获一个对象的内部状态,并在对象之外保存这个状态。之后就可以利用这个备份回溯到以前的状态。被保存的状态可能跟实际的结构是一样的,也可能有所差异,比如经过了某些编码或是转换成其他格式,但是只要能“代表”之前的状态,

2022-02-04 23:06:43 283

原创 设计模式:享元模式

回答了对纯粹对象方案(就是万物皆对象)在设计大量细粒度对象时候的性能问题,比如字符的字体属性,按说每个字符都需要有字体属性,但是一篇文章一共就几种字体,如果对每个字符都单独设置一个font属性,开销就会很大。享元模式(flyweight)采用对象共享的方法来降低系统中对象的个数,从而降低内存压力。(在实际使用中,享元一般设置为只读的)。我们维护一个享元池,每次需要享元时,我们就尝试根据一个value(所以在代码中pool设计成了map)从中拿共享对象,存在的话就返回,不存在就先创建一个在返回。这样就提高

2022-02-04 16:57:13 193

原创 设计模式:状态模式及有限状态机

有时候在组件构建的过程中,某些对象的状态经常面临变化,如何对变化进行有效管理的同时又能保证高层模块的稳定。(状态模式解决的问题)即是根据运行时的条件转换状态。如果不用状态模式,普通开发可能会导致if-else增值过多以及破坏oop原则。状态模式允许一个对象在内部状态改变它的行为,从而是对象看起来似乎修改了其行为。~GOF设计模式state模式将所有的行为都放在state的子类对象中,在对象状态切换时,切换相应的对象。而且这样写可以使状态之间的转换更加明确,可以保证不出现状态不一致的情况,即有限状态机值

2022-02-04 10:32:11 727

原创 设计模式 builder模式

也是属于对象创建类模式。使用的一般情况是,需要完成一个复杂的对象创建工作,工作通常由各个部分的子对象用一定的算法构成,比如step1,step2,step3,步骤内部常常发生剧烈的变化,但是组合在一起的算法却相对的稳定。(就是构建一个东西需要好多步骤去组合才能完成)我们的做法是,将复杂对象的构建和表示相分离,使得同样的构建过程(step1,step2,step3)可以创建不同的变化。这里以造房子举例,假设造房子都有3步,floor,upstairs和elec,我们把他们定义为step1,2,3,在派生类

2022-02-03 16:13:30 311

原创 游戏开发原型模式

使用原型实例指定创建对象的种类,通过拷贝这些原型来创建新的对象。原型模式也是一种特殊的abstract factory,他的使用情况是,对象比较复杂(难以用工厂模式实现,或者希望保留开发的中间状态),如果初始的状态不太让人满意,那么等到已经开发出一个比较好的状态时,去clone()一个比较满意对象的状态。要求跟之前的工厂模式一样又比较稳定的接口(泛用参数来创建对象),还是不用new,而是去使用clone()的方法去创建新的对象。ps:c++的序列化太难了.jpg,但是有拷贝构造函数所以很niceps

2022-02-02 22:33:44 1418

原创 游戏开发设计模式 抽象工厂模式

上次用了factory_method模式,这实际上是抽象工厂模式的一种特例化(指只有一组变化)使用的场合是:需要创建一组产品,产品之间存在互相依赖的关系,类比到游戏开发中,就是在难度1的游戏中,只有难度1的敌人和难度1的地图,不能是难度1的敌人搭配难度2的地图。方法是:提供一个接口,让该接口负责创建一系列”相关或者相互依赖的对象“,无需指定他们具体的类(和工厂方法的概念差不多,就是多了依赖的关系)#pragma once#include <iostream>using namesp

2022-02-02 17:29:49 1392

原创 游戏开发设计模式 factory_method模式

属于是对象创建模式的一种,这类模式的特点是:用虚函数运行时依赖的特点创建对象,绕开new,避免对象创建(new)过程的紧耦合。通常是接口抽象后的第一步工作。定义一个用于创建对象的接口(侯捷课上说的,就是相当于重写一个支持多态的new方法)让子类决定实例化哪一个类。Factory_method就启到了一个让类的实例化延迟的作用。就是有个虚函数 (参数就肯定相同了),用的时候根据传来的工厂判断要生产的是什么东西。工厂模式有效的解决了添加新产品必须要修改工厂类代码的问题,新增一种武器只需要新增一个武器类

2022-02-02 11:02:05 1534

原创 游戏开发设计模式 桥模式

跟装饰器模式一样,设计上属于职责划分,要划清责任,分清主体和拓展,解决的是(随着需求变化,子类数目极具膨胀的问题)头文件#pragma once#include <iostream>using namespace std;template<typename T>//这里用了下类的前向声明,不然编译过不去class My_character;template<typename T>class My_weapons {public: virtual..

2022-02-01 18:00:12 382

原创 C++设计模式 装饰器模式

提出的动机来源于对继承的乱用导致的派生类急速增加的问题。主要是要分清楚积累的派生分别是往“主体”走的or往“拓展”走的装饰器模式特征一般比较明显,父类在被派生类继承的同时也被包含了(用侯捷老师的话是委托delegation,因为这里用的是指针)。//头文件#pragma once#include <iostream>using namespace std;//基类template<typename T>class component {public: vir

2022-01-31 23:08:40 666

原创 虚幻四蓝图cast to节点学习。。

蓝图中的cast to,尝试检查发出转换的对象是否为被转换的特定对象,举例子就是创建了一个特殊的蓝图,其中包含了许多的自定义功能,我们想要在其他的蓝图中调用这个自定义蓝图的功能。我们可以用get player character节点在其他蓝图中对玩家角色昌盛影响,但是没有办法使用自定义蓝图中的功能,是因为我们获取的是玩家角色(父类),而不是我们特定的角色。这个时候,我们就可以使用get pla...

2020-03-02 15:39:51 4526

原创 2020 ccpcwannafly day2 E题

阔力梯的树题目的主要思想是dsu on tree(树上启发式合并),可以解决某些树上离线问题。大致过程有三步:1.dfs预处理出每个每个节点子树的大小,dfs序(有时候还有对应dfs序的节点编号),重儿子。2.第二遍dfs,先遍历轻儿子,并且不保留答案,然后遍历重儿子,保留,然后把所有的轻儿子的信息加入3.如果不保留的话就整体清空在这个题目中,我们需要把树上每个节点的子树编号拿出来,...

2020-01-13 23:20:50 126

原创 l1————006

L1-006 连续因子 (20 分)一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。输入格式:输入在一行中给出一个正整数 N(1&lt;N&lt;2​31​​ )。输出格式:首先在第 1 行输出最长连续因子的个数;然后在...

2019-03-11 15:32:14 128

原创 假期总结

第一版:具体知识总结。数据结构方面:这个暑假大概花费了15*1.5小时的时间来看数据结构那本黑皮书,了解了其中基础的数据结构,其中包括最基本的线性表结构,顺序表结构,链表结构,栈结构,队列结构,树结构(这个感觉还是不太好,主要搞了搞二叉树中的完全二叉树,理解了一下关于二叉树的基本性质),还有比较基础的图结构(给人的感觉是类似python中的字典)。至于基本的算法方面,在暑假之前,虽然感觉贪...

2019-02-22 18:58:54 204

原创 自定义结构体比较大小

#include &lt;iostream&gt;#include &lt;stdio.h&gt;#include &lt;cstring&gt;#include &lt;algorithm&gt;#include &lt;cstring&gt;#include &lt;string&gt;#include &lt;vector&gt;#include &lt;set&amp

2019-01-26 10:27:55 2639

原创 C++结构体的创建与结构体函数的使用

struct Point{ int x, y; Point(int x = 0, int y = 0) :x(x), y(y) {}};Point operator + (const Point&amp; A, const Point&amp; B) { return Point(A.x + B.x, A.y + B.y);}ostream&amp; operator &lt;&l...

2019-01-23 18:34:48 3300 2

原创 欧拉降幂快速幂用。。。。(前天打比赛真的是长见识了。。。)

emmmm,昨天第一次做牛客的比赛,就出来两个(真的是没救了。。)做第三个的时候看见的一个用快速幂的题,发现("▔□▔)肿么跟我学的那个快速幂长得这么不一样,今天看别人写的代码,顺便总结一下快速幂的用法。。1.先上一个普通的取模的快速幂。。。ll pow(ll a, ll b, ll mod){ ll r = 1; a = a % mod; while (b &gt; 0) { ...

2019-01-23 16:56:33 2267 3

原创 分金币,uva11300

题目描述:环形排列的n(n&lt;=106)(n&lt;=106)个人,每人有一定量的金币。每个人可以给左右相邻的两个人金币,最终使得每个人都有相同量的金币。求被转手的最小金币数。样例输入:310010010041254样例输出:04#include &lt;iostream&gt;#include &lt;stdio.h&gt;#include &lt;algor...

2018-11-25 22:31:31 108

原创 突击战,uva11729

最重要的就是要搞清楚时间的次序,表现为ans=max(ans,s+a[i].j),及时更新最后时间#include &lt;iostream&gt;#include &lt;stdio.h&gt;#include &lt;algorithm&gt;#include &lt;cstring&gt;using namespace std;int n;#define maxn 10005...

2018-11-25 21:55:54 156

原创 彩虹岛大魔王、、超级回文数

D 超级回文数Description一个数字是回文数意味着这个数字正着读和反着读相同,比如12321,124421是回文数字,而123,12451不是。彩虹岛的大魔王认为比回文数更加美好的是超级回文数,超级回文数指的是长度为偶数的回文数,比如124421是回文数,而12321不是。现给定

2018-11-24 23:09:34 239

原创 FatMouse's Speed、、(看看你表哥杰瑞。。。)

FatMouse believes that the fatter a mouse is, the faster it runs. To disprove this, you want to take the data on a collection of mice and put as large a subset of this data as possible into a sequence...

2018-11-21 22:23:38 189

原创 最少拦截系统

某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹.怎么办呢?多搞几套系统呗!你说说倒蛮容易,成本呢?成本是个大问题啊.所以俺就到这里来求救了,请帮助计算一下最少需要多少套拦截系统....

2018-11-20 19:51:16 81

原创 典型迷宫问题

/*E - 迷宫问题 *//*定义一个二维数组:int maze[5][5] = {0, 1, 0, 0, 0,0, 1, 0, 1, 0,0, 0, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 1, 0,};它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。Input一...

2018-11-15 21:50:49 120

原创 棋盘问题(皇后区,不是彼得帕克住的那个)

/在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。Input输入含有多组测试数据。每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个nn的矩阵内描述棋盘,以及摆放棋子的数目。 n &lt;= 8 , k &lt;= n...

2018-11-15 21:20:20 417

空空如也

空空如也

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

TA关注的人

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