自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(214)
  • 资源 (3)
  • 收藏
  • 关注

原创 记录最近图形和OpenGL 学习的进度

年初的时候写了一个光栅化的软件渲染器,能够绘制立方体、能够做颜色插值。纹理映射还没实现,基于NDC 坐标系的剪裁也没有做。虽然完成度没有那么高,但是让自己对线性代数和渲染管线的理解一下提升到了一个全新的高度。这里贴一个 github 仓库地址吧。https://github.com/yunyou730/spinning.git最近一段时间,开始重新学习 OpenGL. 学习的网站是 Learn OpenGL. 主要看的是中文版。https://learnopengl-cn.github.io/每个章节

2021-07-11 23:14:09 306

原创 我的软件渲染器终于初步完成了~

记录一个大好事:在 2021年第一个月的上旬,我的软件着色器终于初具雏形了~中间参考了 很多 资料最初是 知乎上的系列教程https://zhuanlan.zhihu.com/p/141210744这个教程是基于 OpenGL ,右手坐标系实现的。是翻译的 github 上一个叫做 tinyrender 的 教程。结合原版食用效果更佳~原版 github 上的图片都 看不到了,所以结合这篇知乎上的教程看,也很帮助人理解。当时觉得比较困难的地方是 矩阵的推导,看这篇教程的时候完全没有去理解。后来觉

2021-01-14 01:37:46 441

原创 2020年度总结

眼看又要年底了,趁着这个双休,给即将过去的 2020 做个简单的总结。今年发生了很多事情, 对我的影响很大。年初,2020年1月7日,我入职了上一家公司,在一个 Unity 项目组里做游戏开发。工资虽然不高,但是业务轻车熟路。也在组里涨了不少见识。因为是一个很新的项目组,并且之间我要接手的工作的负责人在我去了不久很快就离职了,我在项目里很快就接手了战斗开发的任务。战斗开发在卡牌游戏里算是比较核心的业务了。最开始的工作不是很难,并且还发现之前一些同事的代码质量非常差。起初一段时间的工作算得上是平稳过度,

2020-12-27 01:14:37 376

原创 C++ 实现 C# delegate 机制

C# 里的 delegateC# 里的 delegate 作为语法特性的一部分,使用起来非常方便。首先按照函数签名,声明一个 delegate 类型:delegate void DelegateType();之后就可以用这个 delegate 类型来声明 delegate 变量了。DelegateType delegateMetods;再之后,就可以用这个 delegate 类型的变量,来 注册 / 注销监听函数了。比如我们有两个函数 Test1,Test2void Test1() {}

2020-12-15 17:59:36 1236 2

原创 operator new placement new 的基础介绍

c++ 可以使用 new 表达式 构造对象.class ClassA{public: ClassA() { printf("ClassA::ClassA()\n"); }};int main(){ ClassA* a = new ClassA(); return 0;}main 函数里面调用的 new ClassA() 里的 new ,即 new 表达式。 new 表达式背后做了 两件事 :调用 operator new 分配一段原始

2020-12-07 06:11:02 297

原创 漫谈手游商业游戏前端框架

今天我想聊一聊手游商业游戏前端框架.技术选型这其中有两个关键字,一是"手游", 二是"商业" .说到"手游", 基本上引擎就定位在了 Unity. 在手游开发行业, 除了个别技术实力非常雄厚的公司,和个别另辟蹊径的公司, 绝大部分用的引擎都是 Unity ; 还有一些公司因为旧项目依旧能盈利,拖着商业包袱,坚守着 Cocos2DX ; UE4现在用的越来越多, 但总的来说还是偏少,我不熟悉,因此在这不多加评论.就绝大部分情况来说,Unity还是绝对的主流.说到"商业" , 在需求上"热更新" 几乎是

2020-10-25 00:55:55 1520

原创 刷 leetcode 有感

2年前就知道了 leetcode ,直接上去刷. 基础不牢再加上毫无准备, 随机抽两道题就做的我被当时的 leetcode 吊打, 自信心受到了很大打击. 即使这样, 也没唤醒当时自己的忧患意识.前一个来月, 觉得自己在基础方面需要下点功夫恶补一下. 于是开始认真的对待 leetcode,并且开了一个 github 的仓库, 自己每做一道题, 每有一些心得都会提交到 github 上.一个多月下来,断断续续做了50道左右的题目, 从最开始茫然无措, 现在也摸清楚一些套路.比如 链表,通常 可以往快慢

2020-10-21 02:25:30 206 1

原创 [备忘] 部署 c# 服务器到 linux

最近我用 c# socket 写了 lock step 转发消息的 服务器,需要把服务器代码部署到自己的云服务器上。过程在此记录备忘第1步,把 c# 代码传到服务器本地执行 scp 命令scp -r ./EBBS root@域名:/data/ 其中 -r 表示传输目录 , 不加 -r 可以传输单个文件./EBBS 是本地目录, 冒号后面是 远端 linux 系统的目录第2步,编译 c# 代码为 exe这步要求云服务器上安装了 mono在服务器上的 c# 代码目录 执行 mcs 命令

2020-08-06 00:41:42 1518

原创 ECS + lockstep 实现实时同步

最近在公司用 Lua 写战斗逻辑,对ECS这套结构理解 比以前深刻了很多。脱离开公司业务 之后,我自己又在 unity 里用 C# 实现 了一套 ecs的结构, 写了一小 demo . 在 ECS 的 结构下 , 业务扩展变得非常 灵活, 因为旧有代码逻辑导致新功能不好实现的情况 也变得很少了。ECS思维方式,实在太适合写游戏战斗逻辑了。用了这套结构写了一个 demo 之后,我又尝试在它的基础上,加上 lockstep 的机制 ,实现局域网 实时同步。 之前一直在做这样的尝试 , 搞起

2020-07-23 23:43:54 703

原创 unity 使用 C# 实时获取外部程序的控制台输出

项目里,有同事把外部的 cmake 编译 C++ 的脚本集成到 unity编辑器里来 ,并且把编译输出实时打印到 Unity 的控制台里。实现这一功能主要依赖于 .net framework 的 System.Diagnostics.Process 类。Process 类可以唤起一个进程.如果想截取控制台输出,则需要设置 进程的 StartInfo 的几个参数UseShellExecute...

2020-02-18 00:23:00 2425

原创 不依赖插件 给 Unity 项目接入 Lua

之前在公司给项目接入过 xLua .接入过程非常傻瓜.又了解到 Unity 由于历史原因,有各种各样的 lua 接入插件。 slua,xlua,tolua 等等层出不穷。如果是为了直接在 Unity 项目里使用 Lua,使用现成的插件肯定是最好的选择。如果是为了学习,就需要自己亲手实践一番之前并不了解 unity 接入 lua 的原理 。最近通过公司的项目,查阅看官方文档,了解到 Unit...

2020-01-20 17:53:24 1369

原创 使用 unity理解渲染时的 深度缓冲机制

在其他游戏里见到过这样的效果:人物走到建筑后面,被建筑挡住的部分做特殊显示、没有被建筑挡住的部分正常渲染。想要实现这种效果,关键的要点是 ZTest.今天借助unity了解了 ZTest 机制.再此做一下总结.创建一个空场景,两个 cube,距离近的是 cube_1, 远的是 cube_2分别给 cube_1 ,cube_2 写 shadercube_1 的 shader 叫做 Sh...

2019-10-31 18:25:05 1687 1

原创 一个 unity 新粉丝入门一个月的经验和感想

最近一段时间一直在使用unity.最开始直接上手就撸,之后放低姿态稍微看了几个教学视频.就这样算是较快的度过了从写代码到使用编辑器的不适期.在熟悉了 面向组件的开发方式,熟悉了 unity 编辑器和 物理引擎之后,现在能够搞定大部分种类的 2d gameplay 开发了.我也逐渐的体会到了 unity 的便捷,以及使用unity 开发游戏的乐趣.让我比较有深刻体会的有几个方面.开始时不熟悉物理...

2019-10-30 23:55:33 552

原创 [c++] delete 只有声明没有定义的指针时遇到的问题

今天遇到这样一个问题:class AParent 有一个成员 BParent* ptr 初始化为 nullptrclass AChild 作为 AParent 的子类,ptr = new BChild , 其中 BChild 是 BParent 的子类为了减少编译时的依赖, AParent.h 上面声明了 class BParent;在 AParent.cpp 里面虽然调用了 delete...

2019-08-31 21:33:24 758

原创 使用 VisualStudio 属性表自定义用户宏

在配置 vc 工程时,常常要根据现有的宏来配置包含路径每个工程都自带一些 $(SolutionDir) $(ProjectDir) 等宏但是如何自定义这些宏呢?在 VC 的属性管理器里, 工程右键 -> 添加新项目属性表比如命名为 Demo1,则会生成 Demo1.props 文件双击 Demo1 -> 通用属性 -> 用户宏 -> 添加宏这样就可以给项目自...

2019-08-27 18:19:02 1378

原创 使用 VisualStudio 诊断工具 解决 c++ 项目的内存泄漏

今天了解了一下 VisualStudio “诊断工具”,感觉非常好用,甚至强过xcode 的 instrument 的泄漏检查工具。趁热记录一下经验感受。应用场景今天同事反应,我们的游戏每一局新开一把,内存都会飙升几十兆。反复开几把,内存会飙到1.5G然后挂掉。光听现象很明显是发生了内存泄漏。 本来打算找一些 windows 平台的工具来检查。由于我们项目使用的是 Vistual Studi...

2019-06-14 01:17:17 3839

原创 web版"凑发票计算器"经验总结

故事背景公司一直有这样的报销传统:每个月加班一天报销25块钱,但是必须提供相应的发票。发票的规定有点奇葩,不能少于报销金额,但是也不能多余报销金额+30.举个例子,比如一个月加班10天,那么可以报销的金额是250元,需要提供的发票金额加起来必须在250-280之间。旁边的同事每个月都能搞到好多发票,各个金额都有。但是每次为了把这些发票凑成合适的数字,都要花一些时间。由此想到,如果要是能写个代...

2019-06-14 00:52:51 3346

原创 c/c++ 几个双下划线 实用的内置宏

c/c++ 几个双下划线 实用的内置宏这几个宏分别是__FILE__ 文件路径文件名 字符串__FUNCTION__ 函数名 字符串__LINE__ 行号 数字__TIME__ 编译时间 字符串__DATE__ 编译日期 字符串printf("%s %s %d %s %s",__FILE__,__FUNCTION__,__LINE__,__DATE__,__TIM...

2019-04-19 16:55:01 3334

原创 试了试 glfw 对手柄支持的几个 api

最近给自己买了个 switch,由于独乐乐不如众乐乐,又新购入了一个“良值”牌的手柄。手柄到货的时候我还在公司,没法用 switch 实机测试手柄好用不好用, 就打算用 windows 自带的手柄检测软件测试一下。插到 PC 上, 欣喜的发现啥驱动都不用安装(可能是自动安装好了),手柄就识别了。用 windows 自带的软件测试了几下,没有啥问题,网上说的十字键串键位的问题也没有。由于 win...

2019-02-14 19:58:36 1043 1

原创 [备忘] 给现有代码创建 git 仓库

每次自己写一些代码,想要在家里和公司共享的时候,都会在自己的服务器上创建一个git仓库。但是每次都磕磕绊绊,多少都会遇到一点问题。再次重新操作了一遍,在这里记录一下做备忘。首先在本地电脑有一个文件夹,是自己想要上传的代码服务器端创建一个空的 git 仓库登陆到服务器,进入想创建代码仓库的目录 cd /data/repositories创建 git 仓库文件夹 mkdir werew...

2019-02-13 18:49:31 1124

原创 聊聊随机数

工作里遇到了关于随机数的问题:使用相同的随机种子,换一个设备,还能得到相同的随机序列吗?由于对随机数的生成理解不够深刻,还引发了一次跟同事之间的小讨论。不知为不知,在这里承认自己以前对随机数理解有限,把过程和经验记录于此。随机数的基础用法和特性编程过程中,随机数的基础用法和特性广为人知。但为了防止有对这个概念还不清楚的新手,还是先简单说明一下。编程获取随机数的基本做法是:在程序初始...

2019-01-23 00:19:01 619

原创 C++的一种错误写法:用引用类型接收值类型返回值函数的返回值

观察下面的错误代码,函数的返回值是值类型,在外面接收返回值时,使用引用类型。CTest getTest(){ CTest t; return t;}CTest& test = getTest();在vs2017里面,这样写代码竟然在编译阶段不报错,而且运行也正常。在 xcode 的编译器下,直接会报错不能用引用类型,来接收值类型的参数。这种写法,语意上,有一种“接收了局...

2018-11-16 00:02:53 589

原创 c++多线程 thread mutex 使用小结

c++多线程 thread mutex 使用小结std::thread std::mutex 基本使用方法std::thread 用于开启一个线程。std::mutex 是互斥锁,防止不同线程间的代码在不同线程间做不安全的切换std::mutex try_lock()子线程作生产者、主线程做消费者子线程做加载、主线程显示百分比多线程里遇到的几个问题:c++对于多线程的支持,依赖于 std::th...

2018-11-11 23:02:31 8914 1

转载 详解C语言可变参数va_list和vsnprintf及printf实现

转自 https://blog.csdn.net/cbNotes/article/details/38760025C语言的变长参数在平时做开发时很少会在自己设计的接口中用到,但我们最常用的接口printf就是使用的变长参数接口,在感受到printf强大的魅力的同时,是否想挖据一下到底printf是如何实现的呢?这里我们一起来挖掘一下C语言变长参数的奥秘。先考虑这样一个问题:如果我们不使用C标...

2018-10-31 01:00:14 1128

原创 吐槽一下网站备案

前阵子刚刚买了个云服务器,买了个域名,跑的挺好,新鲜劲还没过去。今天说在网站上更新一下内容,发现竟然需要我备案?不备案直接就把网站封了。我果然还是对社会大意了。云主机平台上一个劲的强调备案的重要性,我本来以为前一阵子折腾了 身份证照片什么的,已经算是备案完成。现在才知道,那个仅仅是 域名“实名制”完成。要想网站一直能访问,必须得备案。备案的步骤还特别繁琐,填写各种真实信息、正反身份证照片是基本操作...

2018-09-19 01:02:23 1573 1

原创 n阶bezier曲线 通用公式说明和应用

今天,孤陋寡闻数学不好的我,才知道n阶bezier 曲线是有一个通用公式的。我先把这个公式截图放在这里,留作备忘感觉就这么一个公式,说的就比较明确了,用代码实现起来也比较简单。稍微解释一下:上面的公式,说的是 2d 场景下, 每个点的插值坐标,是怎么算的。首先得有一个所有点集合的数组。数组里包括 起点、控制点x N,终点。比如有 3个控制点, 加上 起点终点,...

2018-09-08 02:57:00 3325

原创 新工作新气象

前一段时间,我辞职跳槽了。辞职的最主要原因,是因为我在工作里提升不大。每天绝大部分时间,堆着各种各样的简单逻辑,面对着奇奇怪怪怎么也改不完的垃圾代码产生的bug.并且感觉周围大部分同事的技术水平也都比较low。在这个公司,我参与了2个卡牌游戏项目。第一个项目,我加入时,游戏刚刚上线,进入了线上营收,更新迭代的阶段。我把这个项目一直维护到不赚钱,算是给它养老送终。第二个项目我参与时,雏形框架有了,基...

2018-07-28 00:05:55 703 3

转载 【OpenGL4.0】GLSL渲染语言入门与VBO、VAO使用:绘制一个三角形

转自https://blog.csdn.net/xiajun07061225/article/details/7628146以前都是用Cg的,现在改用GLSL,又要重新学,不过两种语言很多都是相通的。下面的例子是实现绘制一个三角形的简单程序。采用了VBO(veretx buffer object)、VAO(vertex array object)等OpenGL的一些新特性。越往后发展,可编程管线肯...

2018-07-01 02:02:15 300

转载 openal播放ogg的例子

转自https://blog.csdn.net/ccsdu2004/article/details/4264751OpenAL 播放 ogg#include <AL/al.h>#include <AL/alut.h>#include <al/alc.h>#include <vorbis/vorbisfile.h>#include <cs...

2018-06-29 15:45:17 943

转载 在sublime text中设置某种扩展名文件的默认语法

转自http://shashanzhao.com/archives/971.html对于正常扩展名(后缀)的文件,sublime text都能识别.对于其他不寻常的扩展名,sublime text不能识别.比如某些软件的语言文件,如zh-cn.lng,lng扩展名sublime text无法识别,只能默认当成普通文本,但它其实是xml格式的文件.我们可以通过菜单:查看->语法 中选择 xml...

2018-06-12 21:43:42 4381

原创 c++ 反射机制: 用类名作变量,动态创建对象

什么是反射从创建对象的角度上来看,狭义的说,比如有个 class A ,你能直接 new A() 来创建 对象。但是如果想根据字符串 “A” 来创建 class A 的对象,比如 使用 new “A” 的形式来创建 对象,甚至 “A” 是个变量。 str = “A” , new str. 这种把 class 作为变量,又能在运行时创建对象的机制,就叫做反射。大部分的高级编程语言,先天是...

2018-06-08 16:45:55 5472

转载 C++ 动态创建对象

转自https://blog.csdn.net/jnu_simba/article/details/9318799回顾前面的文章,实现了一个简单工厂模式来创建不同类对象,但由于c++没有类似new "Circle"之类的语法,导致CreateShape 函数中需要不断地ifelse地去判断,如果有多个不同类对象需要创建,显然这是很费神的,下面通过宏定义注册的方法来实现动态创建对象。Shape.h:...

2018-06-08 00:33:40 5314 1

转载 [c/c++]宏定义,#,##

转自 https://blog.csdn.net/believefym/article/details/1836162# —— 字符串 ##——连接两个参数#include <iostream>using namespace std;#define TEST(pid) (cout<<para##pid<<endl);#define TEST2...

2018-06-08 00:24:36 185

原创 lua 报错处理

lua 报错处理在给 c++ 程序集成lua库后,使用lua 时,难免会写出来lua 语法级的错误,运行时的错误。这时候就需要 c++ 程序能够对 lua 的错误有所处理,明确地把错误内容显示出来。 c++中获取 lua 错误lua 库本身,许多函数都可能会返回一个 int 值,如果这个值不是0,则代表 在执行 lua 脚本时,遇到了错误。 比如 luaL_loadfile()...

2018-06-04 12:21:56 4837 1

原创 使既有的c++工程支持lua

使既有的c++工程支持lua本文将介绍如何给一个既有的c++程序,增加对 lua脚本的支持. 在网上搜索到的大部分文章都是基于 cocos/cocos2dx 环境下的。游戏引擎把一些 lua 库已经集成到了 solution 里,在使用 lua 完全略过了集成 lua库的步骤。 所以,下面将不依赖于任何引擎,从一个最小c++工程 hello world 开始,一步一步说明 c++工程集...

2018-06-02 12:08:56 1453

原创 我也试试markdown

最近在公司写交接文档,尝试用了一下markdown。尝试了一下之后就停不下来了。因为markdown的默认效果真的很好看,比我之前写的格式都好看太多了。而且用起来也很简单。markdown 真是个好东西。用到的软件包括 windows 的 markdownpad2 ,mac上的 mou 和 macdown.感觉都挺好用的。虽然用了好几天,但是实际上用不上太多的语法。 最常用的就是各个...

2018-06-01 14:10:07 251

原创 2018年劳动节

今天是5月1日劳动节的正日子。不过由于假期安排比较特殊,4月29,30,5月1日休息3天,也就是说,现在已经是劳动节假期的最后一天了。而我,现在依然在公司,刚刚结束了为时半天多的劳动,度过了一个真正意义上的“劳动”节。3天的假期里面,因为各种各样的远,主要是自己懒惰,没有学习,甚至都没有去跑步,只在公司做了一些工作。然而工作本身对自己来说,并没有什么收获。虽然现在在公司接触的任务越来越核心,在公司...

2018-05-01 22:08:34 195

原创 记一次sublime插件开发的经历

现在在公司的大部分时间,都在使用windows系统,lua 语言,开发游戏逻辑。windows 下使用lua 开发时,使用了 vs2015 + babelua插件的方式,来启动和调试游戏。babelua插件虽然在vs 里的断点调试功能支持得不错,但是可能是插件优化得不够好的原因,每次在vs里面F5启动游戏,编辑lua代码的时候,都会有明显的卡顿。与此相比,在vs里面编辑c++代码,则几乎毫无卡顿感...

2018-05-01 15:10:36 3450

原创 windows 接入阿里云oss C SDK, 实现异步下载 的经验和总结

前段时间项目有个需求:游戏中接入自定义头像。我们项目采用的方案,是把用户自定义的头像存储到阿里云的 oss 上。需要的时候,把头像图片下载到本地,放到游戏引擎能取到的路径,通知游戏下载成功,游戏逻辑端再像操作普通的资源一样,创建用户自定义头像的图片作为精灵使用到游戏里。iOS端和android端已经由其他同事接入了。但是平时开发时不便于测试,因此需要再在电脑上,对于我来说就是win32平台,也接入...

2018-04-13 02:12:33 1830 7

转载 用 vs 的生成事件,拷贝运行时必要的 dll

给 项目接了一个库,这个库依赖一些  dll 动态链接库 。否则程序跑起来会因为找不到 动态链接库 报错挂掉。如果每次 rebuild 后 手动拷贝 这些 dll 会很麻烦,也不利于多人协作,共享工程.xcode  里面可以再  build phases  里 增加  自定义步骤,拷贝必要的 dylib 动态链接库,vc 也同样支持该功能。值得注意的是,需要再配置好命令后,把 "在生成中使用" 一...

2018-04-12 22:20:01 3329

pygame写的flappy bird

第一次用pygame,仿照flappybird写的小游戏

2016-01-24

不规则按钮

WIN32 API 不规则按钮的例子

2011-10-22

子窗口作父窗口的标题

win32 api 子窗口作父窗口的标题

2011-10-20

空空如也

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

TA关注的人

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