- 博客(177)
- 资源 (10)
- 收藏
- 关注

翻译 【一步步学OpenGL 1】-《打开一个窗口》
@专栏介绍:这里开一个专栏,翻译OGLdev的系列教程《OpenGL Step by Step》,由于本人是个程序员,所以对教程不会完全的简单直译,会根据自己的理解进行一个汉语的解释以及补充,尽量将原文的意思介绍清楚。原文核心内容是对函数的详细解释,这里为了更容易理解,将作者的实例代码加注释后贴在后面代码片里,使程序员看上去更容易理解和动手测试。由于本人也在学习阶段,难免有理解不精确的地方,欢...
2017-09-14 22:21:00
36563
17

原创 在matlab上实现遗传算法解决TSP旅行者问题
TSP问题指的是从一个节点开始遍历其他所有节点并回到初始节点,构成一个哈密顿回路,节点与节点之间距离不同,目标是找到一条回路使得总路程最短,也即就是走最短的路遍历所有节点回到起点。 遗传算法模仿达尔文进化论中优胜劣汰的思想,从随机初始总群开始,不断进化最终选出接近最优解的一代,从而求解出近似最优解 问题描述下图矩阵展示了不同城市之间的距离,城市到自身的距离为0,现要求从Hong Ko
2017-03-22 13:26:35
25337
14

翻译 2D空间中使用Quadtree四叉树进行碰撞检测优化
很多游戏中都需要使用碰撞检测算法检测两个物体的碰撞,但通常这些碰撞检测算法都很耗时很容易拖慢游戏的速度。这里我们学习一下使用四叉树来对碰撞检测进行优化,优化的根本是碰撞检测时跳过那些明显离得很远的物体,加快检测速度。【注:这里算法的实现使用的Java语言,但算法和语言没有关系,理解了其中的原理可以应用到各种碰撞检测场景中。】 介绍碰撞检测是多数游戏的关键部分,不管是2d游戏还是3d游戏中,检测
2016-12-22 22:44:42
12843
7

原创 【洗牌算法】C++将数组的元素顺序随机打乱(条件概率证明算法充分随机)
将数组顺序打乱做模拟需要用到将一个数组内的元素随机打乱的需求,也就是需要生成数组下标的一个随机顺序。实现的思路如下:以将一个元素个数为10的数组打乱为例:思路 1开始先循环一次生成0-9之间的一个数作为第一个下标,此时原数组的位置已经被占用了一个(实际第一次生成的随机下标就是最终的下标了,因为之前位置没有被占用);然后生成一个0-8之间的数作为第二个下标,但这个下标是对应于剩下空间所在的数组的下标,
2016-10-21 16:00:28
22114

原创 【Demo】iOS可吸附拖动的悬浮窗按钮插件
参考http://www.myexception.cn/operating-system/1924022.html的思路使用一个UIWindow实现按钮悬浮在应用中不受页面切换的影响,之后要实现悬浮窗口的拖动和自动吸附在靠近的屏幕边缘。 开始思路是直接改写UIButton,使用touch代理事件来监听按钮开始触摸,移动,触摸结束等事件获取触点坐标,改变UIWindow的位
2016-06-14 23:32:45
14617
21
翻译 【一步步学OpenGL(41)】 -《物体运动模糊》
教程 41物体运动模糊原文: http://ogldev.atspace.co.uk/www/tutorial41/tutorial41.html优快云完整版专栏: https://blog.youkuaiyun.com/cordova/article/category/9266966理论介绍运动模糊是快节奏的3D游戏中比较常用的技术,给运动的物体添加模糊效果,视觉上可以提高速度感,提高玩家的真实感体验。运动模糊的实现也有多种方法,主要分为基于相机运动的模糊和基于物体运动的模糊,这里会介绍其中的一种简单
2021-12-16 20:38:06
731
翻译 【一步步学OpenGL(40)】 -《模板阴影锥》
教程 40模板阴影锥原文: http://ogldev.atspace.co.uk/www/tutorial40/tutorial40.html优快云完整版专栏: https://blog.youkuaiyun.com/cordova/article/category/9266966理论介绍在教程23和24中,我们介绍了shadow map,相对简单的获取到了3D世界的阴影。但是在光源为点光源的情况下,使用shadow map来计算阴影就不太合适了。因为shadow map的计算需要光源的方向向量(平行
2021-11-26 18:34:15
580
翻译 【一步步学OpenGL 39】 -《模型轮廓识别检测[阴影锥1]》
教程 39模型轮廓识别检测[阴影锥1]原文: http://ogldev.atspace.co.uk/www/tutorial39/tutorial39.html优快云完整版专栏: https://blog.youkuaiyun.com/cordova/article/category/9266966理论介绍这篇我们讨论一种检测物体轮廓的方法,确切的说,这里的轮廓指的是当光源从任意方向照向3D物体时创建的3D轮廓,当移动光源时,轮廓很可能会跟着改变。这个和在二维图像空间识别轮廓的原理是完全不同的,图像的
2020-12-08 16:56:55
807
翻译 【一步步学OpenGL(38) 】-《Assimp库实现骨骼蒙皮动画》
教程 38Assimp库实现骨骼蒙皮动画原文: http://ogldev.atspace.co.uk/www/tutorial38/tutorial38.html优快云完整版专栏: https://blog.youkuaiyun.com/cordova/article/category/9266966理论介绍***骨骼动画(Skeletal animation)***,也叫***骨骼蒙皮(Skinning)***,这里我们介绍使用Assimp这个库来实现骨骼动画。骨骼动画的制作实际上分为两个阶段,第
2020-09-16 18:41:26
1842
翻译 【一步步学OpenGL(37) 】-《延迟渲染(三)》
教程 37延迟渲染(三)[模板测试][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rxb67rH1-1599744879773)(http://ogldev.atspace.co.uk/tutorial37.jpg)]原文: http://ogldev.atspace.co.uk/www/tutorial37/tutorial37.html优快云完整版专栏: https://blog.youkuaiyun.com/cordova/article/category/9266966
2020-09-10 21:36:32
577
原创 【一步步学Metal图形引擎10】-《BRDF:Cook-Torrance光照模型》
教程 10高级光照模型1:Cook-Torrance BRDF教程源码下载地址: https://github.com/jiangxh1992/MetalTutorialDemos优快云完整版专栏: https://blog.youkuaiyun.com/cordova/category_9734156.html一、关键词基于物理的渲染(PBR)微表面理论能量守恒各向异性菲涅耳反射定律...
2020-04-04 18:56:27
1714
2
原创 【一步步学Metal图形引擎9】-《Blinn-Phong光照模型》
教程 9Blinn-Phong光照模型教程源码下载地址: https://github.com/jiangxh1992/MetalTutorialDemos优快云完整版专栏: https://blog.youkuaiyun.com/cordova/category_9734156.html一、原理前面的教程我们完成了漫反射、镜面反射和环境光的计算,基于Phong光照模型组合三者得到不错的光照效果,...
2020-04-04 18:52:05
856
原创 【一步步学Metal图形引擎8】-《环境光》
文章目录***教程 8***环境光一、原理二、源码分析2.1 ShaderTypes.h2.2 Render.m2.3 Shaders.metal三、运行效果教程 8环境光教程源码下载地址: https://github.com/jiangxh1992/MetalTutorialDemos优快云完整版专栏: https://blog.youkuaiyun.com/cordova/category_9...
2020-03-31 19:02:26
747
原创 【一步步学Metal图形引擎7】-《镜面反射》
教程 7镜面反射教程源码下载地址: https://github.com/jiangxh1992/MetalTutorialDemos优快云完整版专栏: https://blog.youkuaiyun.com/cordova/category_9734156.html一、原理1.1 镜面反射光上一篇教程中基于Lambert模型计算的漫反射较好的表现了粗糙物体表面的光泽,像石灰墙、泥塑等。但对于表...
2020-03-31 18:58:31
853
原创 【一步步学Metal图形引擎6】-《漫反射》
教程 6漫反射教程源码下载地址: https://github.com/jiangxh1992/MetalTutorialDemos优快云完整版专栏: https://blog.youkuaiyun.com/cordova/category_9734156.html一、原理1.1 基础光照之前的教程我们实现了将一个模型加载到场景中,并实现了模型的矩阵变换和相机的移动变换。但我们之前并没有开始真正...
2020-03-31 14:00:53
787
原创 【一步步学Metal图形引擎5】-《Uniform Buffer》
教程 5Uniform Buffer教程源码下载地址: https://github.com/jiangxh1992/MetalTutorialDemos优快云完整版专栏: https://blog.youkuaiyun.com/cordova/category_9734156.html一、Uniform Buffer的作用Uniform Buffer和OpenGL中的一致变量类似,用来定义和传递...
2020-03-27 11:55:31
1431
原创 【一步步学Metal图形引擎4】-《OBJ模型加载》
教程 4OBJ模型加载教程源码下载地址: https://github.com/jiangxh1992/MetalTutorialDemos优快云完整版专栏: https://blog.youkuaiyun.com/cordova/category_9734156.html一、知识点OBJ格式模型AAPLMeshMDLVertexDescriptorMDLMesh二、背景前面教程3中...
2020-03-20 21:55:28
1717
原创 【一步步学Metal图形引擎3】-《MTLVertexDescriptor》
教程 3MTLVertexDescriptor教程源码下载地址: https://github.com/jiangxh1992/MetalTutorialDemos优快云完整版专栏: https://blog.youkuaiyun.com/cordova/category_9734156.html知识点MTLVertexDescriptorAOS & SOAattribute语义绑定...
2020-03-01 18:14:36
1121
6
原创 【一步步学Metal图形引擎2】-《纹理贴图》
教程 2纹理贴图教程源码下载地址: https://github.com/jiangxh1992/MetalTutorialDemos优快云完整版专栏: https://blog.youkuaiyun.com/cordova/category_9734156.html一、知识点UV坐标系MTLTextureMTKTextureLoader贴图加载Metal采样对象sampler二、纹理...
2020-02-28 20:17:27
2412
1
原创 【一步步学Metal图形引擎1】-《绘制第一个三角形》
教程 1绘制第一个三角形教程源码下载地址: https://github.com/jiangxh1992/MetalTutorialDemos优快云完整版专栏: https://blog.youkuaiyun.com/cordova/category_9734156.html一、知识点Metal渲染管线顶点缓冲Metal着色器(顶点着色器和片段着色器)顶点坐标系Metal Shading...
2020-02-27 22:10:19
3527
翻译 【一步步学OpenGL(36)】 -《延迟渲染(二)》
教程 36延迟渲染(二)原文: http://ogldev.atspace.co.uk/www/tutorial36/tutorial36.html优快云完整版专栏: https://blog.youkuaiyun.com/cordova/article/category/9266966理论介绍上个教程我们学习了延迟渲染的基础原理,并从几何阶段第一个pass计算得到了G-buffer组合数据(...
2020-02-25 11:21:32
678
原创 【Metal2剖析(七):抗锯齿之基于Imageblock特性的增强MSAA】
文章目录关键词游戏中的抗锯齿技术锯齿(走样,失真)产生的根本原因抗锯齿算法的分类SSAA(Super Sample Anti-Aliasing),超级采样抗锯齿MSAA(Multi-Sample AntiAliasing),多重采样抗锯齿FXAA(Fast Approximate Anti-Aliasing),快速近似抗锯齿MLAASMAA(Subpixel Monorplogical Anti-...
2020-02-16 14:52:08
1490
翻译 【一步步学OpenGL(35)】 -《延迟渲染(一)》
教程 34延迟渲染(一)原文: http://ogldev.atspace.co.uk/www/tutorial35/tutorial35.html优快云完整版专栏: https://blog.youkuaiyun.com/cordova/article/category/9266966理论介绍从教程17开始我们的光照计算渲染路径都是前向渲染。前向渲染是一种最直接的光照计算渲染路径,我们在VS...
2020-02-13 17:48:07
1032
原创 【Metal2剖析(六):Metal图像处理基础(上)】
【Metal引擎研发笔录】完整版优快云专栏:https://blog.youkuaiyun.com/cordova/category_9467887.html文章目录一、关键词上:下:二、Metal引擎下实现图像处理三、图像处理概念四、灰度变换4.1 灰度取反(Image NegaTive)4.2 Log变换(Log Transformation)4.3 幂律变换(Power-Law Trandfor...
2019-12-31 23:16:01
1885
原创 Unity Profiler联调Xcode性能分析
Unity Profiler联机调试工具:Profiling安卓联调Unity Profiler链接安卓手机调试一般通过USB连接手机并通过ADB来connect:https://www.cnblogs.com/fengxing999/p/9958593.htmlhttps://blog.youkuaiyun.com/BillCYJ/article/details/81664215https:...
2019-12-27 13:49:09
1771
原创 【Metal2剖析(五):Forward+ with Tile Shading】
官方Demo下载地址:https://developer.apple.com/documentation/metal/forward_plus_lighting_with_tile_shading?language=objc文章目录一、关键词二、关于Forward+三、Persistent Threadgroup memory四、Tile Based Shading五、Light Cul...
2019-12-05 16:50:01
710
原创 【Metal2剖析(四):基于MPS的GPU加速光线追踪(Accelerating Ray Tracing)】
Demo下载地址:https://developer.apple.com/documentation/metalperformanceshaders/metal_for_accelerating_ray_tracing?language=objchttps://developer.apple.com/documentation/metalperformanceshaders/animati...
2019-11-20 20:56:18
1325
原创 Metal2新特性:光栅顺序组(ROG,Raster Order Groups)
背景主题文章:【Metal引擎剖析(二):传统延迟渲染和TBDR】1. Raster Order Groups的作用ROG是干什么的呢?官方解释:准确的控制并行的fragment shader线程访问同一个像素的顺序。通俗点说,就是我们在渲染场景物体的时候,有些前后重叠遮挡的物体身上的fragment shader可能会同时访问同一个坐标的那个像素数据,造成竞争,导致结果错误。而ROG就...
2019-11-12 16:12:42
2208
2
原创 【Metal2剖析(三):OIT顺序无关透明渲染[Imageblock]】
官方Demo下载地址:https://developer.apple.com/sample-code/metal/Order-Independent-Transparency-with-Imageblocks.zip文章目录一、关键词二、普通透明度算法三、高级透明算法3.1 加权平均值算法(Weighted Average)3.2 深度剥离算法(Depth Peeling)四、Imageb...
2019-11-09 17:17:58
2088
原创 【Metal2剖析(二):传统延迟渲染和TBDR】
针对延迟渲染,官方给出了一个Demo,分别实现了传统的双Pass延迟渲染和利用Metal的特性实现的单一Pass延迟渲染。单Pass延迟渲染主要依靠iOS和tvOS平台的Tile based特性来实现。这篇文章主要根据官方的延迟渲染Demo来分析两种延迟渲染的原理区别,扩展Programmable blending特性实现延迟渲染和ImageBlock实现延迟渲染进行优化的原理,挖掘总结用到的...
2019-11-06 22:51:15
1660
原创 【Metal2剖析(一):MTLRenderPassDescriptor和MTLVertexDescriptor】
MTLRenderPassDescriptor和MTLVertexDescriptor是Metal引擎框架中比较重要的两个类,分别用来配置渲染末期渲染结果的去向和渲染初期顶点数据的映射传送。一、MTLRenderPassDescriptor渲染通道描述1.1 MTLRenderPassDescriptor是什么关于MTLRenderPassDescriptor苹果官方的解释比较简单,初学者可...
2019-10-29 15:57:59
4205
翻译 【一步步学OpenGL(33) 】-《实例渲染》
教程 33实例渲染原文: http://ogldev.atspace.co.uk/www/tutorial33/tutorial33.html优快云完整版专栏: https://blog.youkuaiyun.com/cordova/article/category/9266966理论介绍假设我们想渲染一个有一支庞大军队经过的场景,我们要用一个士兵的模型渲出成千上万的士兵大军。一种方法是每次绘...
2019-10-09 11:36:27
876
翻译 【一步步学OpenGL(34) 】-《GLFX,一个OpenGL效果库》
教程 34GLFX,一个OpenGL效果库原文: http://ogldev.atspace.co.uk/www/tutorial34/tutorial34.html优快云完整版专栏: https://blog.youkuaiyun.com/cordova/article/category/9266966理论介绍这篇教程暂时先不继续探索OpenGL的特性和3D技术了,来介绍一下GLFX,一个O...
2019-10-09 11:33:30
922
1
原创 Unity传送数据到原生平台参数映射总结
Unity传送数据到原生平台参数映射总结在Unity的移动游戏开发中,尤其涉及到一些原生插件的开发中,需要利用Unity和原生平台(iOS、安卓)之间的通信机制,实现数据和事件的传输。其中数据传输涉及到脚本数据到C++数据类型的一个转变,因为在往原生平台传数据过程中,数据会以无类型的数据流传过去,因此正确的接收转换数据十分重要。关于Unity和iOS原生平台之间的通信方法请移步:Unity与I...
2019-10-05 18:06:00
1894
翻译 【一步步学OpenGL 32】 -《顶点数组对象VAO》
教程 32顶点数组对象VAO原文: http://ogldev.atspace.co.uk/www/tutorial32/tutorial32.html优快云完整版专栏: http://blog.youkuaiyun.com/column/details/13062.html理论介绍顶点数组对象(VAO,Vertex Array Object)用来封装所有和定点处理器相关的数据的特殊对象。它并...
2019-10-04 16:53:49
748
翻译 【一步步学OpenGL 31】 -《PN(Point-Normal)三角形曲面细分》
教程 31PN(Point-Normal)三角形曲面细分原文: http://ogldev.atspace.co.uk/www/tutorial31/tutorial31.html优快云完整版专栏: http://blog.youkuaiyun.com/column/details/13062.html理论介绍上一个教程我们介绍了OpenGL 4.x中的曲面细分基础技术(本章教程的内容是在上一...
2019-10-04 15:52:09
1098
原创 Unity CommandBuffer渲染MTR到自定义的RenderTexture
目标:延迟渲染技术下,有时我们要先把模型的Diffuse、Normal、Depth、Roughness等数据先渲到自定义的RenderTexture中(CPU中,以几张贴图的形式保存到Disk),然后进行后面的延迟光照等计算。思路:方法一可以用Camera直接渲,只要将自定义的RT设置为相机的target即可(MRT要使用Camera的SetTargetBuffers (RenderBu...
2019-09-11 20:07:52
5564
1
原创 游戏中的抗锯齿技术Anti-Alasing提炼总结
游戏中的抗锯齿技术Anti-Alasing提炼总结锯齿(走样,失真)产生的根本原因图形学的根本过程是一个图形转化成图像的过程,该过程是一个连续信号经过采样转化成离散信号(显示设备的像素是离散的)的过程,之所以产生锯齿现象(失真,走样)就是因为信号的离散性被人眼识别出来。抗锯齿就是通过一些手段来重构丢失的信号。我们通常用的抗锯齿算法实际上是降低锯齿,并非消除锯齿。走样的两个来源:采样点的颜色...
2019-01-27 19:32:27
3796
原创 True Impostor技术原理总结与实践
True Impostor技术基本介绍Impostor,原意“伪装者”,是一种使用极简单的mesh来模拟真实mesh模型的一种优化技术,可以高效的在场景中绘制大量同类的模型而不需要绘制大量的多边形。Impostor技术是介于Billboard和mesh之间的一种模型,在节省顶点的同时实现模型全角度细节的展示。Impostor将2维纹理映射到一张矩形mesh上,模拟高精度模型的假象,实现方法可以...
2019-01-27 19:20:15
2788
原创 Unity判断机型是否为iPhoneX,iPhoneXS,iPhoneXR,以及iPhoneXS Max
原生iOS常用的判断方法iOS中判断机型的方式通常是利用屏幕分辨率,导航栏尺寸,是否支持某些功能特性等进行判断。例如获取屏幕宽高:CGFloat screenWidth = [UIScreen mainScreen].bounds.size.width;CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;Uni...
2018-10-05 16:34:09
11495
1
用于unity的纯C版LZMA库(包括dll、so和.a))
2018-06-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人