- 博客(32)
- 收藏
- 关注
原创 Unity-Shader-语义
POSITION:顶点坐标(模型空间下)NORMAL:法线向量(模型空间下)TANGENT:切线向量(模型空间下)TEXCOORD0~n:纹理坐标COLOR:顶点颜色。
2024-10-16 16:50:47 363
原创 Unity-Shader-SubShader CG代码块
顶点函数,将顶点在模型空间的坐标转换为屏幕坐标(模型坐标转剪裁空间)片元函数:对每一片元(像素)计算其颜色SubShaderpassCGPROGRAM//函数声明函数定义ENDCG需要先声明函数,再定义函数这两个函数均有返回值和传入参数,返回值在函数名前,参数在函数名后的括号内返回值 vert(参数)示例为将模型空间转换为剪裁空间的简单操作(MVP变换)
2024-10-16 15:04:09 353
原创 Unity-Shader简介
shader是cpu与gpu通信的桥梁,一般用于material的塑造中material由贴图与shader组成,shader会控制该material对光的反射,折射等性质,从而影响渲染效果。
2024-10-11 12:57:42 374
原创 C-include
include = 文件拼接include的作用就相当于是把所有相关的头文件与生成文件打包在一起,并不是一对一的链接,但是有顺序关系。
2024-10-06 17:00:10 260
原创 C/C++简单编译原理
目标文件与其所用到的静态库中的内容共同链接打包为生成文件。第三方头文件、系统头文件、自编头文件……第三方动态库,在运行时与生成文件动态链接。我们写的头文件和.cpp文件究竟是如何在电脑中运行的?每一个编译单位都会被编译为一个目标文件。5、生成文件(.exe .so .dll)系统静态库,第三方静态库。2、编译单位(.cpp .c cu)6、动态库(.so .dll)1、头文件(.h .hpp)3、目标文件(.obj)4、静态库(.lib)
2024-10-06 16:59:41 1221
原创 计算机图形学-tangent space(切线空间)
常见的法线贴图是在世界坐标系下的,这会导致,如果要做模型动画,法线贴图就需要随之改变,而Darboux框架(切线空间)下的法线贴图就会随着物体的运动,而不必更新法线贴图。要利用Darboux框架下的法线贴图,就需要计算出像素所在的切线空间的基向量。y轴:该点的副切线,与z轴,x轴垂直,可以利用叉乘得出。x轴:该点的切线,且与z轴垂直。
2024-09-19 16:09:28 141
原创 计算机图形学-Phong Shading
diff:确保最后的光照强度大于0(否则没有意义),bn与light_dr点乘实际上是获取这两个向量的夹角大小,夹角越小计光线损失的越少,计算出的结果也就越大。vertex方法:对三角型逐个顶点进行mvp变换,将变换后的结果存入varying_tri中。fragment方法:将法线和uv进行加权计算,得到相应的插值。Phong 着色模型,主要考虑光线的漫反射对模型的影响。varying_uv:储存三角形的uv纹理坐标。varying_nrm:储存每个顶点的法线。可以大致模拟模型经过光的漫反射之后的样子。
2024-09-19 13:36:24 320
原创 计算机图形学-深度缓存
在更新深度缓存时(该点的深度比该点所在像素的深度缓存中的深度值小时),将该点的颜色放入frame buffer 实现图片的绘制。深度缓存用于存储距离玩家最近的点(深度最浅的点)的深度,永远记录的是最上层的像素点的深度。解决思路:根据像素的深度,决定每个像素的绘制位置。画家算法:先将图形排序,后根据顺序逐个绘制。frame buffer:存储像素的颜色。遇到相互折叠的图形画家算法并不能适用。depth buffer:深度缓存。
2024-09-11 13:40:14 281
原创 计算机图形学-Veiw Transformation
用于视角的旋转标准状态:位置:原点(0,0,0)观察方向:z轴负方向(0,0,-1)上方向:y轴(0,1,0)(右手系)
2024-09-07 14:20:25 180
原创 计算机图形学—NDC归一化设备坐标
NDC(Normalized Device Coordinates)即归一化设备坐标,是计算机图形学中用于表示和处理图形的一个坐标系统。NDC 的坐标范围通常是从 [−1,1][−1,1] 在 x 和 y 轴上,z 轴上则是从 0 到 1。它是在将模型空间中的三维坐标转换为屏幕空间坐标之前的一个中间步骤。Frustum:模型的可视范围Canonical Cube:标准正方形目的:将frustum压缩至以远点为中心,边长为2的立方体(即为Canonical Cube)。
2024-09-06 15:20:01 652
原创 obj文件内容介绍
f 表面 面片索引,格式为:点索引/纹理坐标索引/顶点法向量索引,中间用空格隔开(示例f 5/1/1 3/2/1 1/3/1)vt 纹理坐标,展开图的u,v坐标,中间用空格隔开(示例 vt 0.875000 0.5000000)v 顶点坐标 ,中间用空格隔开(示例 v 1.000000 1.000000 -1.000000)vn 顶点法向量 ,中间用空格隔开(示例 0.0000 1.0000 0.0000)o 模型名称(示例 o Cube)
2024-09-03 16:08:55 236
原创 计算机图形学-TGA图片的RLE压缩
存储一个颜色值,并在块头部指示这个颜色值要重复的次数。eg:(压缩前)12,12,12,33,4,55,55,66,66,66,77。RLE压缩也称行程压缩,RLE压缩的基本思路:将重复的数据内容用数字表示。(压缩后)3 12,1 33,1 4,2 55,3 66,1 77。对于压缩块,读取一个颜色值并重复指定的次数来恢复图像数据。)标识块的大小(实际像素数量减去1),例如,如果。: 这些数据块包含一个重复的像素数据,前面的。是129,则实际的重复次数是2,以此类推。来判断是非压缩块还是压缩块。
2024-08-14 15:55:26 372
原创 计算机图形学/C++ ——对tinyrenderer的详细分析
根据上述vec模板具体定义vec2,vec3。return i?y : x;return i?y : x;return i?(1==i?y : z) : x;return i?(1==i?y : z) : x;增加了normalize操作,提供了将向量转化为标准向量(长度为1)的简便方法。定义了vec4,但未具体定义。
2024-08-06 17:05:28 429 1
原创 C++-基础
函数参数类型、返回值类型不确定,可以利用template书写函数模板。实际上,可以看作多个重载函数的集合。传入参数为数据类名。1、template - 模板。也可在template后换行。示例:比较两值的大小。
2024-08-05 16:32:24 221
原创 C#-socket应用示例(网络聊天)
简介:采用UDP协议,利用Client Server架构(简称C/S架构)进行客户端对服务器的通信,利用服务器间接实现各客户端之间的通信。1、消息类:用于存放需要发送的信息(包括消息类型、发送者名字、消息内容),并对外提供消息类转为字节数组的方法、字节数组转为消息类的方法。——消息类型用枚举分为客户端上线消息,客户端下线消息,普通消息。2)写入字节数组的长度(4字节int型)——发送的信息用字符串进行发送。
2024-07-26 16:57:27 408
原创 C#-Socket
2、发送Send/接收Receive。3、接收Receive/发送Send。1、创建Socket对象。1)客户端(发送端)示例。4、释放资源Close。
2024-07-24 16:50:50 811
原创 C#-关于线程2
解决问题:多线程异步(不排队)调用,多线程访问同一数据,结果将产生不可预知的数据损坏。(参数1,参数2……//自动推断方法体返回的值类型;前台线程结束后才能退出程序,程序不考虑后台线程,可以直接退出。解决的问题:频繁创建和销毁线程会增加系统资源的开销。Unity中程序退出后,前后台线程随机关闭。利用lock,保证方法同时只被一个线程调用。传入的方法需要带有object类型参数。线程池创建的线程默认为后台线程。三、线程同步(重点)
2024-07-22 14:10:32 478
原创 C#-关于线程基础
可以将一个应用程序看作一个进程,进程中有许多线程。可以将线程看作方法,CPU根据线程分配时间片,让用户感觉多个程序在同时运行。每个线程相互独立,CPU以单个线程为单位分配时间片。
2024-07-21 14:17:59 213
原创 Unity-状态机
有一个字典用于存放,条件和满足该条件会进入的状态(这个字典需要在脚本中配置),所以还需要对外提供一个增加字典词条的函数。4、控制脚本:用于调用状态的方法和提供状态切换的方法。脚本负责状态的切换和执行,一个类为状态,一个类为条件。2、条件类,负责存放状态转换的条件,只需要提供一个输出为bool类型的函数。3、状态类,需要对外提供进入状态、状态内的执行、退出状态、判断条件的方法。使用场景:满足一定的条件就从某一个状态切换到指定状态。再有一个列表用于存放所有条件类,用于状态内的判断。举一个例子:血量没有的条件。
2024-07-03 20:37:43 455
原创 Unity - 技能框架
角色释放者身上挂一个SkillManager的脚本,用于管理释放者身上所能释放的所有技能数据,并对外提供受否能释放技能的方法和释放技能的方法。这个只是一个数据的存放器,所以没有必要让它继承MonoBehaviour变成unity的脚本,但是为了配置方便可以将其序列化,实现可以在编辑器面板配置数据。1)范围选择,创建一个父类,通过技能数据中的范围类型,选择子类,在通过父类释放,实现变化的隔离。2)效果接口:与范围选择的接口类似,只不过效果有比较多在释放器的脚本调用时,需要用数组来存放所有需要用的效果接口。
2024-07-02 14:24:52 589
原创 Unity-ResourcesManager
主要思想:在editor中做一个方法,实现将Resources文件夹中所有资源按一定的格式写入一个文档并将该文档存放在StreamingAssets文件夹下,便于在游戏运行过程中查找到该文档。使用场景:在Unity中要从Resources文件夹加载资源时需要知道,资源的具体路径,有时遇到路径的更改十分麻烦。这个脚本可以实现通过名字直接load对应资源。2、GenerateResConfig(提供在unity编辑器界面中一键生成文档的editor方法)1、ResourcesManager:主要方法脚本。
2024-07-02 13:38:07 302
原创 Unity-对象池
通过控制物体在unity场景中的active实现对象池的回收与再生,这样可以有效减少每次通过预制体生成物体的时间消耗,但是增加了使用的内存空间。3)Clear:可以做成两个方法,一个是清理某一类物体的对象池;一个清理所有的对象池。1、需要加入对象池的对象,需要实现IResetable接口,用于对象出生时的初始化。主要思想:用字典作为存放对象池的集合,用字典中的列表存放每个对象池的对象。2)CollectObject:用于回收对象。2、把管理对象池的脚本作成单例,初始化,并提供3个基础方法。
2024-07-02 12:58:58 278
原创 关于A星寻路基础算法
2、Manager类用于管理,生成节点,并提供计算方法。A星算法的主要公式:f = g+h。1、Note 类,储存节点信息。
2024-07-02 11:24:43 140
原创 Unity关于UI框架
1、UIManage类:用于管理UIWindow,全场景只需要一个,所以需要实例化。2、UIWindow类,作为父类方法,子类将被挂载到游戏场景中需要控制的窗口。
2024-07-02 10:33:47 165
原创 C#基础不常用
Concat(“”+100),把不是字符串类型的和不是字符串类型的相加。ref int a 引用参数,方法引用其时直接改其数值,而不是改其引用。out int a 输出参数,方法引用后必须有输出,可以无输入。params参数数组,对于方法内部而言就是普通数组;对于方法外部,参数数组就是直接把数组打到方法的括号里。满足条件的结果:不满足条件的结果。因为值类型直接存储数据,所以数据存储在栈中当事人。方法在栈中,所以方法声明的变量都在栈中。把数值类型改为object类型:装箱。d2不足两位补足两位。
2024-07-02 10:07:00 357
原创 关于gitHub上传
git branch -M main // 强制将此分支改名为 “main”应该是gitHub强制要求的。git push -u origin main //将main分支上的更新提交到远程仓库。git remote add origin 仓库url //与远程仓库建立连接。git commit -m "此次更新的名字"// 更新仓库。git add -A //添加所有文件到仓库。git init // 建立本地仓库。在要上传的文件所在文件夹打开git。
2024-07-01 19:54:42 101
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人