自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(297)
  • 资源 (1)
  • 收藏
  • 关注

原创 向量点乘在图形学中的作用

我们把图中b的在a上的投影向量称作b1吧,因为b1就在a上,所以只需要求出b1的大小,然后乘以a的单位向量,我们就得到向量b1了。b1的大小刚好等于b的模长乘以夹角余弦。图中a点乘b大于0,称a和b方向趋于相同, a点乘c小于0,a和c的方向趋于相反。点乘结果等于0的话两个向量垂直。1.找到两个向量之间的夹角(不用多说)

2024-03-31 20:27:03 146

原创 向量叉乘和其在图形学的应用

我们都学过向量的标量积,也就是所谓的点乘(dot product),两个向量做标量积后得到的是一个标量。(cross product,“向量”同物理中的“矢量”概念,一直想不通为啥数学和物理用不一样的名字,英文都是vector)这一概念。(normal vector),这在高中阶段也是有固定方法的,我们这里想要介绍的是一种更高级也更迅速的方法,也就是引入。前两条性质根据定义一眼就能看出,第三条叉乘的分配律是非常重要的性质,证明也比较困难,我们不打算赘述了。记x,y,z轴正方向的单位向量分别为。

2022-12-19 23:18:44 2673

转载 Unity Shader 中step,lerp 和 smoothstep 应用

b 的差值,w 越接近0,返回结果越接近a,w越接近1,返回结果越接近1,通常用来计算一些渐变量。1→2:平滑过渡(0→1),2→3:保持过渡后的效果(1),3→4:平滑过渡(1→0)平滑过渡,_Start=0, _End=0.35(过渡的距离较长)当 w = 0 时,返回a,当 w = 1 时返回b,否则返回对 a 和。1→2:平滑过渡(0→1),2→3:平滑过渡(1→0))可以用来生成0到1的平滑过渡值,它也叫平滑阶梯函数。作用是计算两个参数的距离。的代码,下面看一个使用。提供了单一的平滑过渡方法。

2024-04-06 15:37:36 122

原创 ORCA(动态避障)算法

A物体沿着向量v1和v2移动,刚好能和B擦肩而过,不会发生碰撞;若V1和V2的夹角再小一点的话就一定会发生碰撞。A的速度为V1,B的速度为V2,A对于B的相对速度(也就是我们把B看做静止,A的速度)就是V1-V2。,那么怎么判定A的速度向量是不是在碰撞区域内呢?这就需要用A相对于B的速度来判定。红线画出来的锥形区域就是A相对于B的。

2024-03-20 21:12:04 392

转载 std::forward与完美转发详解

完美转发(Perfect Forwarding)是 C++11 中引入的一种编程技巧,其目的是在编写泛型函数时能够保留参数的类型和值类别(左值或右值),从而实现更为高效且准确地传递参数。通过使用右值引用和,完美转发允许我们在函数中以原始参数的形式将参数传递给其他函数,而不会发生不必要的拷贝操作,从而提高性能。

2024-02-16 16:45:25 107

原创 C++ 中的 typedef 和 using

更加现代化且灵活,尤其在C++11之后,推荐使用它来定义别名。

2024-02-16 12:19:14 524

转载 C++右值引用和移动语义

当对一个包含资源的对象进行拷贝操作时,有深拷贝和浅拷贝两种方式,深拷贝需要申请新的资源,而浅拷贝是指将一个对象的值复制到另一个对象中,对于指针类型成员变量的拷贝,指针所指向的内存区域,并不进行复制,而是仅仅拷贝了指针本身。要做的事情也很简单,需要实现两个拷贝赋值函数,一个负责深拷贝,一个负责移动拷贝,其中深拷贝函数对应的参数是左值(当参数是左值时,调用深拷贝函数),移动拷贝函数对应的参数是右值(当参数是右值时,调用移动拷贝函数)。回顾之前我们对左值和右值的认识,右值表示一个临时值,左值表示一个非临时值。

2024-02-15 23:21:48 51

原创 C++11 thread_local

这意味着每个线程都有其自己的变量实例,每个线程都可以独立地访问和修改该变量,而不会影响其他线程的同名变量。的场景通常涉及到需要在每个线程中保持状态的情况,同时又不希望这些状态被其他线程共享。每个线程都有自己的单例实例,不需要额外的同步机制来保护共享状态。变量可以轻松地跟踪每个线程的日志信息,而无需在日志记录期间进行同步。变量提供了一种简单的方法,在不同的函数调用之间保持线程特定的状态。变量可以让每个线程拥有自己的配置,而不会相互干扰。:有时候,不同的线程可能需要不同的配置参数。

2024-02-14 15:01:17 460

原创 UnityShader的混合模式

Blend OneMinusDstAlpha:与上一个混合模式相反,使用一个材质的颜色,并将一个背景颜色与它的目标透明度混合。- Blend OneMinusSrcAlpha:与上一个混合模式相反,使用一个材质的颜色,并将一个背景颜色与它的源透明度混合。- Blend OneMinusSrcColor:与上一个混合模式相反,使用一个材质的颜色,并将一个背景颜色与它混合。- Blend OneMinusDstColor:与上一个混合模式相反,使用一个材质的颜色,并将一个背景颜色与它相除。

2024-01-24 17:02:11 362

原创 特别大的地图A*算法优化思路

那么为了保证每次搜索不会超过一定代价,可以设置深度限制,每搜一次则深度+1,搜到一定深度限制还没搜到终点,则返还失败值。step2:让角色向下一个小地图的入口点移动,若下一个小地图不是终点所在的地图,那么重复step1根据这个入口点到终点的方向计算出,新的小地图的出口点,用A*找到出口点的路径。step1:根据起点和终点的方向算出走出当前小地图出口点,用A*寻路到出口点。若下一个小地图是终点所在小地图那么就再用A*寻路到终点即可。(注:当前小地图出口点也就是要经过的下一个小地图的入口点)

2024-01-22 23:10:58 414

原创 Distance Field Font与TTF字体

Distance Field Font(DF字)是一种用于渲染平滑和高质量文字的技术。它使用距离场来表示字体的形状,然后通过特定的算法将距离场转换为像素图像。

2024-01-21 17:58:33 315

原创 游戏架构之继承对象模型和组件对象模型

在所有游戏性架构相关的内容中,运行时对象模型可能是最复杂的系统,并且不同的游戏引擎呈现出的差异极大。例如Unity3D提供的组件模型,虚幻引擎提供的面向对象继承模型,其他一些游戏则使用一种不同于两者的基于数据驱动的游戏对象模型。管理游戏对象的创建与销毁。许多游戏引擎都提供一种统一的动态创建、销毁游戏对象的方式,并管理游戏对象的内存及资源。比如Genius-X框架中使用createEntity()、removeEntity(entity)来动态创建、销毁一个游戏对象。

2023-12-07 23:23:56 329

转载 Unity ShaderLab中的模板测试(Stencil)

模板测试 发生在片元着色器之后的逐片元操作阶段:透明度测试——>——>深度测试——>透明度混合。

2023-11-13 11:13:58 217

原创 渲染管线详解

在组装好图元之后,它会判断该图元是否处于屏幕的可显示的范围内,如果图元完全不在屏幕的可显示范围内,那么它就会丢弃该图元,如果图元有一部分在可显示的范围内,则裁切图元,丢弃不在屏幕显示范围内的部分。在顶点着色器之前,需要先进行顶点规范(Vertex Specification),即确定渲染所需的顶点数据,包括顶点的位置、纹理坐标、法线向量等信息。几何着色器的输入是完整的图元,输出是新的图元。几何着色器的主要功能是对输入的图元(如点、线段、三角形)进行操作,并根据需要生成零个、一个或多个输出的新的图元。

2023-11-09 20:09:53 187

原创 模板测试和深度测试在cocoscreator中的应用

当片段着色器处理完一个片段之后,模板测试(Stencil Test)会开始执行,和深度测试一样,它也可能会丢弃片段。接下来,被保留的片段会进入深度测试,它可能会丢弃更多的片段。模板测试是根据又一个缓冲来进行的,它叫做模板缓冲(Stencil Buffer),我们可以在渲染的时候更新它来实现一些很有意思的效果。一个模板缓冲中,(通常)每个模板值(Stencil Value)是8位的。所以每个像素/片段一共能有256种不同的模板值。

2023-09-09 17:46:29 453

转载 Promise、(async,await)用法

promise resolve后没有then方法,那么等到的就是传给resolve的值promise 有then 方法,则等到的是then方法回调函数的返回值。如果then没有返回值则等到的是undefined。

2023-08-25 09:22:51 172

原创 ECS架构的理解

Unity里面可以同时拥有多个不同的世界, 每个世界独立包含EntityManager与Systems, 在世界里面创建出来的一个Entity,只属于这个世界。Archetype由EntityManager创建出来,创建出来后这个类型的Entity的大小,包含的组件数据,内存布局都确定了。一个游戏对象的实体,可以是游戏中玩家、BOSS、NPC等,一个Entity里面包含了一个个的ComponentData,每个ComponentData代表这个Entity拥有这个功能。组件便可以认为它拥有了移动的能力,

2023-08-20 23:49:03 922

转载 OpenGL之uniform block 与UBO

uniform buffer的实现思路为: 在多个着色器中定义相同的uniform block,然后将这些相同uniform block绑定到同一个UBO,这样就实现了一个UBO被多个着色器的uniform block共用,这个UBO的数据更新了,就会更新多个着色器中的uniform数据。,此后shader中的uniform block就和OpenGL中的UBO联系起来,我们在程序中操作UBO的数据,就能够在不同着色器之间共享了。同时着色器A的Lights和着色器B的Data,分别指向不同的UBO。

2023-08-20 15:38:15 284

原创 k-d Tree KD 树 交替建树

总结下:KD树的每个节点都有一个坐标值和子树区域的坐标范围。所以KD树的节点可以表示一个空间范围,并且它本身也是这个范围内的一个样本点。KD查询效率高 就是因为目标点通过估价函数和整个空间范围计算距离,只在距离最近的空间内的点做距离比较,距离远的空间里的点就先被排除了,这就是上面说的通过估价函数做最优性剪枝。最近的点应该位于:以查询点为圆心,以它到近似点的距离为半径的圆域内。例题:给定平面上n个点,找出其中的一对点的距离使得在这n个点的所有点对中,该距离为所有点对中最小的。

2023-08-16 01:22:24 146

原创 glOrtho与gluOrtho2D 的作用

函数设置二维正交裁剪区域。相当于调用 zNear = -1 且 zFar = 1 的。left, right 指定可视空间的左边界和右边界bottom, top 指定可视空间的下边界和上边界zNear:距离较近的深度剪裁平面。zFar:到更远深度剪裁平面的距离。正交投影的裁剪空间如图:更直观的说法,g,调用gluOrtho2D后,我们代码中要传给着色器的顶点坐标数据,就不再是规范化的了(-1~1),不再是-1~1;

2023-08-13 20:59:57 317

转载 OpenGL之Clip Space 和 NDC透视除法(Perspective Division)

透视除法的时候,(x,y,z,w) => (x/w, y/w, z/w, w/w)。会发现最后一个分量变成了1没什么意义,所以不如存点有用的数据,对于SV_Position来说,最后一个分量存的就是w,也即View Space的Z。前面提到了Fragment Shader的输入是经过视口变换后的坐标,Shader中访问的方法是:OpenGL中通过gl_FragCoord来访问,D3D中则通过SV_Position语义访问。:在DirectX里面,NDC的z方向取值范围是[0,1],在Unity中可以用。

2023-08-13 15:37:18 263

转载 求两个线段交点

判断线段相交需要有关于叉积(外积,向量积)的预备知识。若表示为表示为则:叉积的模:我们要用的只是由x1∗y2−x2∗y1的正负判断两个向量的位置关系(正表示a由逆时针旋转更容易得到b)(顺逆时针是指两向量平移至起点相连,从某个方向旋转到另一个向量小于180度)。如下图:在上图中,OA×OB = 2 > 0, OB在OA的逆时针方向;OA×OC = -2 < 0,OC在OA的顺势针方向。即叉乘结果大于0,后一个在前一个的逆时针方向;小于零,后一个在前一个的顺时针方向。

2023-07-20 22:06:28 1136

原创 改写cocos2d的ProgressTimer,实现任意起始点的Radial进度条

就是根据起点向量和旋转到某个角度后的终点向量,和旋转过程中经过的矩形顶点,把这些点连接成一个个相邻的三角形,用纹理颜色绘制这些三角形即可。

2023-06-19 18:51:00 599

转载 OpenGL之VAO,VBO和EBO

缓冲对象是OpenGL管理的一段内存,为了与我们CPU的内存区分开,一般称OpenGL管理的内存为:显存。显存,也就是显卡里的内存。显卡访问显存比较快,而Buffer Object,就是由OpenGL维护的一块显存区域。比如说在一块显存为2G的显卡里,分配了128K大小的内存区域给OpenGL使用,这个128K大小的内存区域,就叫一个Buffer Object。由于显卡访问显存,比访问内存(CPU里的内存区域)要快很多。而且显卡做运算,一般都是访问显存的数据,然后运算得到结果,并把结果也都保存在显存中。

2023-06-08 17:42:44 3226

原创 glGenBuffers与glBindBuffer理解

注意:glGenBuffers()函数仅仅是生成一个缓冲对象的名称,这个缓冲对象并不具备任何意义,它是个没有类型的缓冲对象,它类似于C语言中的一个指针变量,我们可以分配内存对象并且用它的名称来引用这个内存对象。OpenGL有很多缓冲对象类型,那么这个缓冲对象到底是什么类型,就要用到下面的glBindBuffer()函数了。也就是说,这时候VBO内会是一个从未被使用过的缓冲对象的ID,类似于给缓冲区起名字,起了一个独一无二名字。第一个参数是要生成的缓冲对象的数量,第二个是要输入用来存储缓冲对象名称的数组,

2023-06-01 16:28:14 797

原创 OpenGL标准化设备坐标

通过使用由glViewport函数提供的数据,进行视口变换(Viewport Transform)后,标准化设备坐标将会变换为屏幕空间坐标(Screen-space Coordinates)。,标准化设备坐标是一个x、y和z值在-1.0到1.0的一小段空间。任何落在范围外的坐标都会被丢弃/裁剪,不会显示在你的屏幕上。与通常的屏幕坐标不同,y轴正方向为向上,(0, 0)坐标是这个图像的中心,而不是左上角。最终你希望所有(变换过的)坐标都在这个坐标空间中,否则它们就不可见了。

2023-06-01 10:48:31 239

转载 【转】关于Mip贴图

当摄像机的视点前后移动,比如游戏中的人物移动,距离人物较远的画面纹理如果使用的贴图大小和距离较近的纹理大小相同,那么我们将无法分辨远近距离。要想解决这样的问题,就需要将距离视点远的图形纹理等比缩小,这时候,我们就需要一种缩小纹理的技术,这也就是Mip的需求。为了减少这个问题造成的影响,我们可以将贴图提前进行滤波,并且将滤波后的图像存储为连续的,低分辨率的版本(原始图像是全分辨率),这个动作就是Mip贴图。

2023-05-17 16:36:33 291

原创 OpenGL 与 OpenGL ES区别

Cocos2d-x底层的api是opengl es,Cocos2d-x基于OpenGL ES进行图形渲染,从而让移动设备的GPU性能发挥到极致。OpenGL 与 OpenGL ES 的主要区别,在于OpenGL ES 主要针对嵌入式设备使⽤。opengl es是opengl的嵌入式版本,

2023-05-17 15:49:08 838 1

转载 【转】OpenGL中的基本图元

OpenGL中一共有7种基本的图元,代表了7种基本的绘制方式,根据图元的不同,可以将OpenGL中构成图形的三种基本图形扩展成其他的图形。

2023-05-17 15:25:04 913

转载 OpenGL的混合模式,解决半透明像素渲染问题

设置了对目标颜色的alpha影响。Cdestination:目标颜色向量。这是储存在颜色缓冲中当前位置的颜色向量。OpenGL使用混合(Blending)技术来完成半透明图像的渲染。举几个例子,我们重点关注alpha的变化。源(1,1,0,0.6),目标(0.6,0.6,0.5,1)Csource:源颜色向量。这是来自图片纹理中的颜色向量。Fsource:源因子。设置了对源颜色的alpha值影响。混合模式的公式,一定要注意好哪个是源,哪个是目标。来分别对RGB 和 alpha 设置不同的因子。

2023-05-08 17:16:40 569

原创 变换矩阵解析

当向量作为行矩阵时如下:(等价于程序中矩阵是以行优先存储)用来做投影变换,另外两个同T1,T4。在右上角是用来平移变换,

2022-12-19 17:17:35 152

原创 UnityShader之UnlitShader模板详解

【代码】UnityShader之UnlitShader模板详解。

2022-11-13 20:18:09 977

原创 glsl语法之变量限定符

varying类型变量是 vertex shader 与 fragment shader 之间的信使,一般我们在 vertex shader 中修改它然后在fragment shader使用它,但不能在。和C语言类似,被const限定符修饰的变量初始化后不可变,除了局部变量,函数参数也可以使用const修饰符.但要注意的是结构变量可以用const修饰,//结构变量可以用const修饰。attribute变量是`全局`且`只读`的,它只能在vertex shader中使用,只能与浮点数,向量或矩阵变量组合,

2022-08-24 20:06:24 341

原创 OpenGL代码解读,创建shader,并使用

【代码】OpenGL代码解读,创建shader,并使用。

2022-08-19 16:17:14 361

原创 opengl-shader学习笔记:varying变量

渲染管线中应用程序调用openglAPI,把顶点数据传给VertexShader,VertexShader处理完后输出数据给FragmentShader,如上图中VertexShader->FragmentShader的过程中。

2022-07-20 18:00:23 569

原创 glGetUniformLocation,glUniform4f

代码】glGetUniformLocation。

2022-07-20 11:55:09 275

原创 游戏物理引擎概述

3d物理引擎:bullet2d物理引擎有两种:1.box2d 2.chipmunkcocos中用到的物理引擎:cocos2dx中的Node自带物理引擎的参数(基于chipmunk封装的)://Physics:remaining backwardly compatible #if CC_USE_PHYSICS PhysicsBody* _physicsBody;public: void setPhysicsBody(PhysicsBody* physi.

2022-05-02 14:20:43 2606

原创 帧动画与spine动画

一.帧动画原理:帧动画是一组“相关联”图片,在很短的时间内,播放切换,让大脑认为是连续的;优点: 实现简单播放性能高,播放性能高;缺点: 资源占用过大;二.Spine原理:将一个模型,根据动画的需求分成一些骨骼,一个骨骼对应一张贴图,将这些 骨骼通过工具,在不同的时间点来调整骨骼的位置、缩放、透明度等信息, 将这些时间点连续的播放形成动画;优点:资源占用少;缺点: 播放的性能比帧动画差;spine动画的cocos2dx播放代码:SkeletonAnimation* no

2022-04-26 01:23:15 2446

原创 CocosCreator游戏资源管理assetManager

1.资源AssetBundle包(简称ab包):每个文件夹都可以设置成ab包,在creator编辑器中这样设置:两个默认的资源Ab包; 1: 我们编辑器场景中用到的的资源:都会被打入到main ab包里面; 2: resources文件夹(老版本代码加载的资源都放在这里),cocos 为了兼容以前的,内置一个resources的文件夹的ab包; 兼容以前 resource 代码加载;creator3.x后的版本不要把文件夹命名为resources。asset-manager.ts下代

2022-04-24 12:56:00 5903

转载 lua闭包

从形式上来讲:子函数可以使用父函数中的局部变量,这种行为就叫做闭包! 闭包 = 函数 + 引用环境 ]] function FUN1() local num = 10 --upvalue(非局部变量,非全局变量,和C和C++中的成员变量有点类似) function InFun1() print(num) end function InFun2() num = num + 10 print(num...

2022-04-24 11:55:53 2737 1

CocosCreator 框架设计

CocosCreator 框架

2023-10-23

改写cocos2d的ProgressTimer实现任意起始点的Radial进度条

cocos2dx4.0版本的CCProgressTimer.h 和CCProgressTimer.cpp

2023-06-20

改写cocos2d的ProgressTimer实现任意起始点的Radial进度条

cocos2dx4.0版本的CCProgressTimer.h 和CCProgressTimer.cpp

2023-06-20

CocosCreator框架设计Demo,内容在这篇文章介绍:

https://blog.csdn.net/u012861978/article/details/124113400

2022-09-17

UNITY最近打开文件记录,多个资源来回切换

实现UNITY最近打开文件列表的功能,可以多个文件来回切换。把压缩包里的两个cs文件放到Assert/Editor下,没有Editor自己新建一个,按F6显示最近打开列表窗口。

2022-08-18

GLSL 中文手册,shader学习

详细介绍着色器程序中的数据类型的和内置函数,学习GLSL必备,写shader时查阅用

2022-07-18

空空如也

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

TA关注的人

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