自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

PupYuan的博客

不治已病治未病,不治已乱治未乱

  • 博客(20)
  • 资源 (1)
  • 收藏
  • 关注

原创 游戏项目自动化测试的一些思考和想法

自动化测试框架需要什么样的前置条件对于游戏项目而言,什么样的测试比较合适如何构建更健壮、效率更高的自动化测试Actor Test面对与动画、时间相关的行为该如何测试该使用什么粒度的测试自动化测试作为构建系统的一部分参考资料自动化测试框架需要什么样的前置条件自动化测试代码需要能够独立地启动游戏,加载所需的资源,并直接跳过不相关的流程,直接步进到需要测试的流程。这个过程越短越好,因此,需要系统在设计上保证不同流程的解耦。例如系统能够在没有登录的状态下直接进入一个游戏场景,并根据配置.

2021-12-19 12:38:24 1835

原创 运营期游戏项目重构实践复盘

对于运营期游戏项目,有哪些重构实践?怎样重构能避免对已有系统造成影响?结合自己前几年的开发经验做了一些记录和总结。

2021-12-19 10:41:08 2080

翻译 虚幻引擎的PostProcessVolume和相机的后处理设置的关系

PostProcessVolume和相机的后处理设置虚幻引擎要做后处理的话,会看到PostProcessVolume这个物件,同时在相机中也会看到后处理相关的设置,这两个有什么区别?以及他们的关系是什么?它们的适用范围是不同的。PostProcessVolume是一个摆在场景中的物件,可以看到它会有一个范围,这个范围表示的是当相机进入此范围时,会对相机进行后处理。而相机的后处理设置指的是此相机会一直拥有的一个后处理效果。PostProcessVolume可以调成无限大,这样无论在场景中哪个相机,都会

2021-10-20 21:26:59 2183

原创 设计一个新的数据结构,可以等概率地随机获得字典中的键

初步思路:新数据结构维护一个列表,维护添加进来的键每次给数据结构设值和删除的时候,额外维护一个列表,从列表中添加和删除键。在做随机取键的时候,从该列表中随机选一个键。但额外维护的列表,会导致这个数据结构在删除值的时候,无法O(1)地从列表中删除指定的键。新数据结构使用字典,映射索引到键核心的思路是,在每次设值的时候,将该键映射到一个值。然后在每次删除键的时候,能在O(1)时间内找到这个映射值。每次设值的时候可以将键映射到当前字典的大小,在删除任意键N的时候,找到该键的映射值N1,将当前映射到字典大

2021-08-12 23:32:59 244

原创 python和C#的垃圾回收机制对比

再啃了一遍python和C#的垃圾回收机制,将其综合对比并总结一下。Python的垃圾回收机制首先总结一下python的垃圾回收机制:1:引用计数。python使用引用计数来统计每个对象被引用的次数,每当python对象引用数量降为0时,其内存会被立刻释放掉。这种方案的优点是原理简单,对象内存能被平稳地释放掉(因为内存释放发生在代码正常执行时,边运行边释放内存)。而缺点是无法解决循环引用问题。因此python的垃圾回收机制除了引用计数外,还补充了其他机制来解决引用计数。2:标记-清除算法。pytho

2021-08-08 21:09:19 276

原创 Unity的垃圾回收是在主线程运行的吗?

面试题Unity的垃圾回收是在主线程中运行的吗?回答首先,Unity并不负责垃圾回收,Unity的脚本基于mono,而mono基于.NET(mono和.net的关系还没理清)。在.NET 4.0之前,CIL使用并发垃圾回收技术来清理不再使用的对象。当对第0代或第1代(这两代称为暂时代)对象执行回收的时候,系统会暂时挂起所有活动的线程,确保应用程序在回收过程中不会访问托管堆。不在暂时代的对象...

2020-02-29 20:23:37 434

原创 Unity UI 优化Batch方法

Unity UI 优化Batch方法预备知识什么是Draw Call,Batch?什么是Batching?什么是Canvas的rebatch?Unity UI 优化Batch方法正确使用Sprite Atlases调整子节点的顺序分割画布(Canvas)分割画布的策略分割画布的方式分割画布分割的越多越好吗?References预备知识什么是Draw Call,Batch?每次绘制一个物体在屏...

2020-02-04 20:22:49 4054

原创 glfw+glad使用opengl4.x的computeShader配置事项

computeShader是opengl4.2版本引入的特性,所以为了使用它必须将glfw+glad版本升级,有如下几个需要注意的事项:glad升级glad需要升级到4.2+以后的版本,这里我选择了4.6,glad在线服务:https://glad.dav1d.de/glfw版本升级glfw要升级到多少版本具体不清楚,这里选择了glfw3.3(截至到目前最新的版本),glfw官网:htt...

2019-04-28 10:19:27 632

原创 stb_image.h单头文件库的重复包含问题

问题阐述由于stb_image.h这个库在声明了:#define STB_IMAGE_IMPLEMENTATION之后便会成为可执行的源码,故不建议在头文件中声明和使用stb_image.h中的函数。例子说明我们在model.h中引入了stb_image.h库并直接在model.h中声明了一个加载纹理的方法:TextureFromFile(...)同时我们直接在model.h中定...

2019-03-19 16:22:41 4522

原创 Ogre的渲染流程解析

渲染循环一般由应用程序调用root->startRendering(void)开启渲染循环。void Root::startRendering(void){ ... //游戏渲染循环是一个无限循环,除非被frame listeners或者queueEndRendering()终止 mQueuedEnd = false; ...

2018-12-15 10:17:21 1133 3

原创 Unity协程解析——状态机实现的代码分步执行

Unity协程的效果协程是一个分部执行,遇到条件(yield return 语句)会挂起,直到条件满足才会被唤醒继续执行后面的代码。Unity在每一帧(Frame)都会去处理对象上的协程。Unity主要是在Update后去处理协程(检查协程的条件是否满足)协程跟Update()其实一样的,都是Unity每帧对会去处理的函数(如果有的话),至少是每帧的LateUpdate()后去运行。在Un...

2018-11-26 12:47:48 1270

原创 C++ 虚函数的内部实现

单继承的情况下若类有虚函数,则在构造函数的时候编译器会自动为类的实例(对象)在其内存的首部(0地址偏移处)增添一个虚函数表指针vfptr,指向该类的虚函数表。虚函数表中会存放该类所有的虚函数地址,普通函数则不会被放入其中。如果是子类重写了父类的虚函数,那么在建立虚函数表的时候被重写的虚函数的地址被替换成了子类的虚函数。而使用父类指针BaseClass* base指向一个子类对象DerivedC...

2018-10-26 11:59:48 691

原创 翻转字符串——不用额外的内存空间

描述给定一个字符串,逐个翻转字符串中的每个单词。说明单词的构成:无空格字母构成一个单词样例给出s = “the sky is blue”,返回"blue is sky the"使用额外空间的思路使用std::string的find_first_of,以’ '为参数,将s分割成多个单词并推进堆栈中,然后利用堆栈的先进后出的特点,以弹出的顺序去得到逆序的字符串。这样会使用额外的空间来暂存...

2018-10-04 19:41:23 3945

原创 Lintcode181——将整数A转换为B

题目描述描述如果要将整数A转换为B,需要改变多少个bit位?Both n and m are 32-bit integers.您在真实的面试中是否遇到过这个题? 样例如把31转换为14,需要改变2个bit位。(31)10=(11111)2(14)10=(01110)2初始思路两个数异或之后得到数t(例如样例中t为10001)问题转换为判断t中有多少个1可以通过移...

2018-10-01 12:13:34 580

原创 非泛型集合的集合问题

非泛型集合的使用实例  假设我们创建了非泛型的System.Collections.ArrayList来保存数值(分配在栈上的)数据,查询ArrayList成员,就会发现它们所操作的是System.Object数据:public class ArrayList:...{ ... public virtual int Add(object value); public virt...

2018-09-07 13:54:07 361

原创 C#按值传递引用类型&按引用传递引用类型

值类型和引用类型与引用类型相对的是值类型。值类型当把一个值类型赋给另外一个时,就是对字段成员逐一进行复制,此时在栈上新建了值类型的两个副本,每一个都可以被独立操作。引用类型和栈中的值类型相比,当对引用类型应用赋值操作符时,我们就是在内存中重定向引用变量的指向。 其中,所有类实例都是引用类型。按值传递引用类型回顾一下形参和实参 在一般传值调用的机制中只能把实参...

2018-09-05 14:20:39 1176

原创 Intelligent Scissors 原理与实现

边缘特征我们观察到,磁力套索会自动地去贴合图像中物体的边缘,而图像的边缘特征可以由图像像素的一阶导数和二阶导数描述,故图像中梯度幅值和拉普拉斯算子响应值较高的更可能是图像中的边缘。最小代价路径用户操作流程整个程序的操作流程是这样的,用户首先在想要的轮廓附近设置一个初始点(称之为seed point),然后移动鼠标,在这个过程中曲线会自动地去贴合图像物体的轮廓。程...

2018-06-03 10:49:21 3882

原创 Intelligent Scissors 介绍

这学期的计算机视觉有一个非常有趣的project:实现PhotoShop中的智能套索~在此做个记录和总结。Intelligent Scissors 介绍PhotoShop中磁力套索,可以用来“抠出”指定图片中想要的部分。 使用的时候,边界会“自动”地贴合到边缘,达到只需少量的人工操作就可以迅速分割出物体边界的功能。Intelligent Scissors 资料索引论文...

2018-05-19 01:54:49 2505 1

原创 Intelligent Scissors 绘图功能的构建

绘图功能需求描述首先,程序的绘制部分是需要实时交互的,即使用者点击设置了seed point后,再次移动鼠标,在移动鼠标的过程中图像不停地展示鼠标位置到seed point的最小代价路径。动态绘图的实现方式在鼠标回调函数中,每次回调都新建一个Mat temp,将原图的图像数据拷贝到temp中,然后在temp上进行绘制,然后刷新opencv的窗口。例如我在鼠标回调函数的末尾加了一个d...

2018-05-19 01:51:32 1423

原创 Ogre源码编译与安装

Orge源码编译与安装这学期的课程需要分析Orge源码,所以打算编译Orge源码来满足课程要求; Orge版本我这里使用的是1.10.11 需要提前安装Visual Studio (我使用的是VS2017)CMake https://cmake.org/download/ (我用的是3.11.0)安装过程1. 下载下载Orge编译所需要的依赖项:ogre...

2018-03-14 21:04:50 5668 1

计算机组成与嵌入式系统

计算机组成与嵌入式系统.pdf

2017-03-04

空空如也

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

TA关注的人

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