自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

游蓝海 的专栏

游戏客户端编程

  • 博客(91)
  • 资源 (8)
  • 收藏
  • 关注

原创 物理引擎学习08-AABB树

AABB树是由AABB结点构成的二叉树,常用来加速场景中的射线检测和碰撞检测。树的每个结点都是一个包围盒,且结点的包围盒包裹了所有子结点的包围盒。本文深入的讲解了AABB树相关的算法,以及结合物理引擎使用。

2022-05-19 00:41:27 4401

原创 拦截Git拉取时文件被占用引发的崩溃

使用某些git工具时,当出现文件被占用(error: unable to unlink old 'xxx': Invalid argument),工具没有做任何处理,导致git流程被异常终止,本地工作目录被污染。本工具用于拦截Git unlink文件失败事件,给出危险提示,避免这种git静默的处理引起不可挽回的错误。

2022-01-24 14:45:48 1054

原创 解除Windows文件占用

解除windows文件占用问题

2022-01-17 21:58:48 4144 1

原创 Unity资源加载闪退问题深度分析

游戏线上测试总是有一些很奇怪的crash信息上报,闪退点是Unity引擎C++层的方法GameObject::GetSupportedMessagesRecalculate。我们自己平时跑游戏,偶尔也会在场景切换的时候发生闪退。经过初步分析,确定是同一个crash。虽然收集到的闪退率不高,但既然我们自己人都碰到了,那线上实际情况可能会更容易出。结论很简单,想看结论,直接跳到末尾即可。分析过程很坎坷,断断续续跨了有两三个月。分析过程分为两个阶段,阶段一主要是围绕崩溃点本身进行的分析,没有得出结论;阶段二,是

2021-09-09 19:17:19 10659

原创 物理引擎学习07-小游戏飞机大战

到目前为止,碰撞检测的基本内容(狭义的碰撞检测)已经讲完了。广义的碰撞检测,我们到下一阶段再继续。本小节,在上节“碰撞反馈”的基础之上,扩展支持多物体间的碰撞检测。使用最简单的方法来检测哪些物体间会发生碰撞。算法每次遍历所有的物体,两两之间进行碰撞检测测试。所以时间复杂度是O(N2)O(N^2)O(N2)。算法伪代码:for i = 1 to n - 1 do for k = i + 1 to n do 检测物体 i 和物体 k 是否发生了碰撞 endendGJK碰

2021-08-22 17:15:33 653 1

原创 python实现GIF生成工具

今天在写文章的时候,需要合成一张Gif动图,结果之前一直使用的在线Gif工具居然要收费了,否则就得加水印,而且水印巨大无比,挡住主要内容了。于是就去github上找了一圈,结果没有找到理想的工具,基本上是使用文档不清晰,或者不支持自定义输入参数。不过也没白逛,扫了一眼代码,发现生成Gif的方法非常简单,所有就决定自己写了一个。用法python makegif.py 后面输入图片文件路径或文件夹,即可合成gif图片。本脚本支持python2和python3,需要先安装Pillow插件: pip insta

2021-02-08 22:09:57 516 11

原创 物理引擎学习06-碰撞反馈

原本计划06章是一个碰撞检测的小demo,上手之后才发现,碰撞反馈也是一个非常复杂的话题,所以就单拎出来一章,详细说明。碰撞反馈是基于碰撞检测的结果,将发生接触的物体分离开,同时应用上物理效果,使碰撞表现的接近于自然情况。本文作者游蓝海。原创不易,未经许可,禁止任何形式的转载。1. 刚体运动1.1 刚体的概念刚体,英文称作Rigidbody,是物理世界中的一个基本运动单元,包含了位移、旋转、质量、速度、力等物理属性。在物理引擎中,通常会把刚体看做是一个不可见的点,通过附加上不同的形状,才能与其他物

2021-02-08 19:00:31 1482 4

原创 物理引擎学习01-碰撞检测基础内容

碰撞检测的基础内容很多,这里仅挑一些常用的和经典的内容进行说明。本文作者游蓝海。原创不易,未经许可,禁止任何形式的转载。1. 常用的向量知识1.1 向量点乘向量点乘常用于计算向量之间的投影长度和夹角。如果夹角小于90度,则点乘结果为正数;大于90度则为负数。a⋅b=∣a∣∣b∣cos(θ)=axbx+aybya \cdot b = |a||b|cos(\theta) = a_x b_x + a_y b_ya⋅b=∣a∣∣b∣cos(θ)=ax​bx​+ay​by​1.2 向量叉乘2D向量叉

2020-09-06 20:04:29 1098

原创 物理引擎学习02-分离轴碰撞检测

分离轴碰撞检测算法,SAT(Separating Axis Theorem),适用于凸多边形之间的碰撞检测。 如果能找到一个轴,将两个多边形分离,则说明两个多边形不相交。本文作者游蓝海。原创不易,未经许可,禁止任何形式的转载。1.传统分离轴算法传统的算法是找到一个分离轴,得到分离轴的垂线(投影轴),然后将两个多边形的所有点都分别投影到该垂线上,如果两个多边形的投影区间不重叠,说明不相交。投影轴,需要选择两个多边形的所有边的垂线。算法的复杂度为:O((M+N)2)O((M+N)^2)O((M+N)2)。

2020-09-06 13:22:02 1802

原创 物理引擎学习05-GJK和EPA计算穿透向量

EPA,是扩展多边形算法(Epanding Polytop Algorithm) ,用来计算两个多边形碰撞的穿透深度。本文的写作目的,主要是对GJK和EPA算法的理解和应用。对算法本身感兴趣的朋友,可以阅读源论文的文献。本系列GJK算法文章共三篇,本篇是第三篇,强烈建议从第一篇开始看:GJK碰撞检测算法基础GJK计算多边形之间的最近距离GJK和EPA计算穿透向量本文作者游蓝海。原创不易,未经许可,禁止任何形式的转载。1. 基本原理当碰撞发生时,原点到最近的闵可夫斯基差集多边形的边(下文称作

2020-08-30 15:05:14 3839 8

原创 物理引擎学习04-GJK计算多边形之间的最近距离

计算多边形之间的最近距离,才是GJK算法原本的目的。只有两个多边形不相交,计算最近距离才有效。如果相交,则最近距离无效,但是可以使用EPA算法要计算碰撞深度。本文的写作目的,主要是对GJK算法的理解和应用。对算法本身感兴趣的朋友,可以阅读源论文的文献。本系列GJK算法文章共三篇,本篇是第二篇,强烈建议从第一篇开始看:GJK碰撞检测算法基础GJK计算多边形之间的最近距离GJK和EPA计算穿透向量本文作者游蓝海。原创不易,未经许可,禁止任何形式的转载。文章目录1. 基本原理2. 算法解析2.1

2020-08-30 15:04:07 4816 4

原创 物理引擎学习03-GJK碰撞检测算法基础

GJK是由Gilbert,Johnson,Keerthi 三位前辈发明的,用来计算两个凸多面体之间的碰撞检测,以及最近距离。GJK算法可以在O(M+N)的时间复杂度内,检测出碰撞,算法在每次迭代的过程中,都会优先选择靠近原点的方向,因此收敛速度会很快。算法的证明过程比较复杂,但是原理还是比较容易理解的。本文作者游蓝海。原创不易,未经许可,禁止任何形式的转载。本文的写作目的,主要是对GJK算法的理解和应用。对算法本身感兴趣的朋友,可以阅读源论文的文献。本系列GJK算法文章共三篇:GJK碰撞检测算法基础

2020-08-30 15:02:59 9568 4

原创 物理引擎学习-开篇

物理引擎是游戏引擎中一个非常重要的基础模块,也是一个非常有趣的模块。虽然现在商用的物理引擎已经很多了,而且都非常成熟,但是引擎毕竟不是万能的,有些特殊场合还是需要自己去实现。比如:要实现一个小游戏,使用很简单的碰撞检测就够了,引入庞大的物理引擎,效率反而低而且不够灵活;要实现一些超自然场景。比如宇宙类宏观题材,或是量子等微观题材,本来常规的物理定律就不适用,更别说是基于常规物理定律实现的物理引擎了;运动的物体数量太多的游戏,比如弹幕类游戏。这种情况下,物理引擎可能就是瓶颈之一了,也许我们要的仅仅是碰

2020-08-30 15:01:08 1671 4

原创 VC++调试配置

VisualStudio在某些环境下,调试的时候总是会出现一些奇怪的现象。本文记录了一些我遇到的一些坑,会持续更新中。本文作者游蓝海(https://blog.csdn.net/you_lan_hai),未经许可禁止仍和形式的转载。调试启动速度很慢因为符号文件加载的太多。有时候vs会把系统相关的符号文件全部加载进来,会导致调试时启动速度非常慢。在菜单:Tools->Options-&g...

2020-02-22 00:47:56 731

原创 unity tolua异常处理

C#、C、Lua分别有不同的异常处理机制,在跨语言函数调用的时候,必须要正确的处理异常,否则会导致堆栈错误、内存泄露、程序崩溃等问题。tolua对此做了非常全面的安全处理,值得我们去学习。如果我们要自己去做一些C层面的扩展,也必须要对这些底层原理熟记于心,才能避免各种诡异问题。本文作者游蓝海,未经许可禁止转载。C#调用Lua函数C#调用Lua函数的时候,必须使用lua_pcall接口进行调用...

2019-11-11 23:06:29 1952

原创 C#委托传递给C++函数指针

C#委托传递给C++函数指针原创作者游蓝海,转载请注明出处最近在Unity中集成一些C++库,跨语言交互的时候遇到了一个坑——不能直接将extern方法的参数声明为委托类型。因为将方法作为参数传递的时候,C#会自动创建一个临时的委托对象,然后将委托对象的指针传入C++。由于委托对象是临时的,在垃圾回收的时候回会被回收掉,导致C++端的函数指针就变成野指针了。因此,在传递委托参数的时候,需要自...

2018-10-24 23:37:05 4441 3

原创 unity tolua跨语言对象引用原理和内存泄漏问题分析

unity tolua跨语言对象引用原理和内存泄漏问题分析原创作者游蓝海,转载请注明出处垃圾回收概述对于c#和lua这两种语言,都有自己的垃圾回收机制(gc),并且垃圾回收算法都是用的标记清扫方式,也就是说不管对象间的引用有多复杂,只要没有被对象根结点直接或间接引用,都是可以被当做垃圾清理掉。还有一种简单粗暴的内存管理方式,是c++智能指针的引用计数。这种方式的回收效率最高,只要对象没有被...

2018-10-24 23:14:51 3205 2

原创 shader中浮点数取整性能问题

本来计划着抽空写一些高质量的文章,但是真的没空。只能晚上用手机打一些纯文字的东西,就当笔记备忘了。最近在基于unity进行地形优化,好不容易用图集的方式将drawcall降下来,但立马陷入了另一个大坑。将地形细节纹理合成图集后,需要在片段着色器中对uv重新缩放和偏移,找到纹理在图集中的区域。大致算法为:uv = frac(uv) * scale + offset:由于地形顶点uv经过变换...

2018-10-18 01:09:39 6661

原创 Cocos Creator Shader工具

十一就这样过去了,没什么大成就,但还是写个总结吧。前几天用Cocos Creator写一个demo,涉及到了shader开发,而cocos一直没有好用的shader工具,就心血来潮要自己开发一个。花了两天时间,模拟Unity Shader完成了一套基本的材质框架,由于不知道怎么扩展编辑器,就没写工具,后面等Cocos Creator的编辑器扩展功能更完善一些再说。源码已经放到github了

2017-10-08 15:27:17 4040

原创 关于lua字节码在32位和64位系统上不兼容的问题

使用32位的lua虚拟机编译出来的字节码,无法被64位的lua虚拟机识别。反过来也一样不能识别。实际上,主要问题出现在了序列化上

2017-08-20 16:40:19 6176 3

翻译 RecastNavigation-理解高度场

为了能够运用高级导航网格的生成特性,你需要理解NMGen构建流程的核心。为了理解这个构建流程,你需要理解高度场(heightfield)。这里有两种高度场:体素集(voxel field)和顶点集(vertex field)

2017-08-20 14:49:45 8764 2

翻译 RecastNavigation-NavMesh生成原理

RecastNavigation是一款非常强大的寻路系统,被广泛的应用于各大游戏引擎中。如Unreal,Unity等。CritterAI是基于RecastNavigation原理开发的一套寻路系统

2017-08-20 14:47:22 26459

原创 UE4入门学习4:C++编程介绍

UE4直接使用C++作为逻辑层语言,这样引擎层与逻辑层语言统一,不需要胶水代码去转发,消除了逻辑层和引擎层的交互成本。为了便于开发,UE4对C++做了一些包装,比如反射和垃圾回收,大大减轻C++开发的难度。

2017-05-21 15:38:08 15817 3

原创 UE4入门学习3:GamePlay框架

UE4为游戏开发提供了一套基础的框架,在这套框架的基础上,我们可以快速的构建出我们的游戏雏形。本文结合官方文档《游戏架构快速指南》,来分析一下UE4的这套游戏框架

2017-05-14 15:43:01 12510 2

原创 UE4入门学习2:工程结构分析

本文的目的是详细分析上一节中建立的工程结构,从宏观上认识UE4。

2017-05-14 14:04:21 3806

原创 UE4入门学习1:环境搭建

介绍UE4的安装步骤,和创建工程的详细步骤。

2017-05-01 17:40:03 8933 1

原创 UE4入门学习-开篇

本系列文章主要内容为UE4 C++编程学习,蓝图学习者或非程序开发者请绕行。UE4的学习资料其实也挺丰富的,不过很多都是英文的。官方文档是不错的学习资料,比较全面的介绍了UE4的各个功能模块,而且目前大部分都翻译成了中文。

2017-05-01 15:34:51 7375 1

原创 游戏引擎学习-开篇

随着新学的东西越来越多,以前很熟悉的知识也在渐渐的被淡忘。我希望通过写博客的形式,来总结一下学到的知识,一方面可以完善自己的知识体系,另一方面希望对想要学习游戏编程的朋友一些参考

2017-05-01 13:43:18 935

原创 ULUA的简洁用法(二)

写上一篇文章《ULUA简洁用法》的时候,我对ULUA的认识还不是很深,经过一段时间的摸索后,我又整理了另一种更简单的方式,不需要修改ULUA源码,一个代码文件就能容纳下所有需要的内容。1.原理给GameObject添加上一个C#脚本组件作为中间层,在中间层上绑定上一个LUA脚本,将Unity的所有回调接口通过中间层传递到...

2017-04-23 22:40:53 1722

原创 开源cocos2d-x编辑器 qco-editor

用于cocos2d-x的开源编辑器,使用Qt和C++开发,支持Windows和Mac等操作系统。

2017-03-01 21:57:03 2732 2

原创 u3d tolua + ZeroBraneStudio远程调试

tolua默认支持ZeroBraneSudio(以下简称zbs)的本地调试,但不能进行远程调试。其实远程调试也很简单,只需要将zbs的mobdebug.lua脚本拷贝到你的工程Lua目录下,在需要调试的地方,执行代码require("mobdebug").start(ip, port)即可连接到zbs进行调试。但是,还需要一些配置,才能完美的进行下去。拷贝mobdebug脚本将脚本mobdebug.

2017-02-13 22:04:10 4950

原创 ULUA的简洁用法

ULUA所推荐的几种framework虽然功能强大,但是结构比较复杂,对于unity初学者来说太过麻烦和冗余。因此我自己总结了一套很简洁的用法,抛开MVC和各种框架,直接使用tolua实现Unity与LUA交互。

2016-04-04 23:25:40 11398 12

原创 OpenGL顶点数据传输速度优化

前言最近在给cocos2d-x v2.x的一个项目做渲染优化,执行渲染批处理(Batch)的时候,发现顶点数据传输速度很慢,实在是颠覆了我的OpenGL认知。 常规的Batch原理: · 将渲染命令加入到一个缓冲区当中 · 根据需求对渲染命令进行排序 · 合并所有命令的顶点数据 · 提交顶点数据 · 根据不同材质分批次渲染

2016-03-27 21:42:25 5707 5

原创 在do while语句中使用continue的误解

以前我一直以为,continue就是跳转到do开始的位置,所以就认为上面这段程序将会是一个死循环。其实却不然,continue不会跳过do while的条件判断

2016-03-27 20:55:24 21690

原创 cocos2d-x 3D shader的纹理坐标是上下颠倒的

前几天写了个3D shader,把我坑了个惨。不知道是为什么,cocos2d-x将3D shader中的纹理坐标作了上下颠倒,而2D坐标却是正常的。对此我很是不解。

2016-03-27 20:37:11 1879

原创 使用ndk-gdb调试android native程序

#1.配置目标程序1. C++代码必须使用`ndk-build`编译,传入参数`NDK_DEBUG=1`。编译完成后,会在lib目录下生成gdbserver,供后续调试使用。2. 设置AndroidManifest.xml,在**application**项下面设置`android:debuggable="true"

2016-03-27 20:08:18 7748

原创 OpenSSL中AES加密的用法

使用API的时候,需要特别小心数据长度,我在初次使用的时候简直被弄的晕头转向,遂作此文留个备忘。一般没有指定长度的参数,默认都是16(AES_BLOCK_SIZE)个字节。输出数据的长度一般都是16字节的倍数,否则会出现数组越界访问。

2016-03-27 17:26:52 17112 6

原创 开始unity学习

手游3D化是大势所趋,目前最流行的3D手游引擎非Unity莫属。虽然cocos2d-x也在做3D引擎,但毕竟会受到原本2D框架的束缚,扩展起来容易捉襟见肘,再加上工具链的严重缺乏,所以cocos3d-x在未来很长一段时间内也无法赶超Unity。我等靠技术混饭吃的人,决不能坐吃等死,在闲暇之余,学习一些新的知识来

2015-10-17 14:12:05 902 2

转载 OpenGL, GLSL, DirectX, HLSL中的矩阵存储形式

OpenGL:  按列存储矩阵(column-major)。调用API形成的矩阵用来和一个列向量相乘,矩阵在左,列向量在右GLSL:   存储方式和OpenGL相同(column-major)DirectX:    按行存储矩阵(row-major)。调用API形成的矩阵用来和一个行向量相乘,矩阵在右

2015-09-19 12:16:10 2679

原创 A*寻路路径优化

本文目的是对A*寻路算法所生成的路径进行一些人性化的调整,使其看起来不至于太机械化。关于A*算法的原理与实现,读者可以阅读其他资料,这里不再详细阐述。        A*寻路算法本质上是一个有方向性的广度优先搜索算法,它使用一个估价函数,来估测可能的最短路径,在每一次搜索迭代完成后,选取其邻接点中最优的一个(即,距离终点最近的一个点),作为下一次迭代的起点。如此反复,直到找到终点。

2015-04-12 20:53:33 8173 3

GDC2006_Catto_Erin_PhysicsTutorial.pdf

box2d官方ppt: GDC2006上的物理引擎教程。主要是讲解碰撞反馈。

2021-02-07

HowDoPhysicsEnginesWork.pdf

box2d官方ppt:物理引擎如何工作,讲述了最基本的物理引擎结构

2021-02-07

OpenGL Insights

OpenGL Insights. 深入学习OpenGL

2017-03-20

毕设游戏《天鹰教》源码

基于Windows+DirectX3D,用C++与Python语言混合编程实现,使用Visual Studio 2008为程序开发平台。希望对3d游戏编程新手有所帮助。

2012-12-15

TortoiseSVN-1.7.7.22907-x64含汉化包

TortoiseSVN-1.7.7.22907-x64-svn-1.7.5 含简体中文语言包。

2012-08-04

游戏编程笔记-起步3-贪吃蛇游戏源代码

简易贪吃蛇。 实现:C + VS2008 算法说明:见我的csdn博客-游戏编程笔记。 博客: http://blog.csdn.net/you_lan_hai

2011-10-31

原创3D游戏引擎源代码

大学时期(2010年)的学习作品。基于windows + DirectX3D开发的简单游戏框架。

2011-09-13

原创2D游戏引擎源代码

大学时期(2010年)的学习作品。基于windows GDI开发的简单游戏框架。

2011-09-13

空空如也

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

TA关注的人

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