- 博客(22)
- 收藏
- 关注
原创 FBX SDK的使用:读取Mesh
首先SubMesh是顶点索引数组的一部分,作用是一个Mesh的不同部分可以使用不同的材质,比如眼镜的镜框和镜片,对应3DMax里面材质ID的功能,给不同的Polygon设置不同的材质ID,通过。法线,UV的读取和位置相似,都是先获取一个索引,然后通过索引去数组里面查找对应的值,但是索引和数组要根据映射和引用模式去获取。这里读取出来的数据,顶点数组的长度和索引数组的长度相同,不做顶点去重。,读取来的数据是直接在OpenGL使用的,因此顶点数据不需要做转换,如果是在DX使用,需要做转换,可以参考。
2025-02-03 15:32:10
842
原创 FBX SDK的使用:基础知识
是动态库,需要在中添加;是两种静态库,不同的是运行库选项,在中设置/MD或/MT/MDd和/MTd时debug模式。mtLIBCMT.libobjmdMSVCRT.libobjMSVCRT.dllmt如果时debug模式的静态链接,还需要在项添加LIBCMT项添加:FBX SDK可以使用多线程,但是不保证线程安全。
2025-01-31 23:34:21
1670
原创 《经典力学》笔记
ri为矢量,刚体的质量是均匀分布的,每个ri都有另外一个相反的ri与它对应,因此最后一项为0。从刚体通过质心的直轴(质心轴)的转动惯量,计算出刚体对平行于质心轴的另外一直轴的转动惯量。弹性碰撞的碰撞前和碰撞后机械能守恒,非弹性碰撞的碰撞前和碰撞后机械能不守恒。为通过质心轴的转动惯量,M为刚体的质量,d为质心轴到另外一轴的距离。和动量守恒一样,在没有外力的情况下,系统内部的角动量是守恒的。比如,物体m由粒子构成,物体的动量为所有构成粒子的总动量,,由牛顿第三定律,力的作用是相互的,粒子的合力。
2025-01-02 00:04:08
894
原创 物理运动模拟基础
但在游戏中,我们每帧的时间可能为30ms,离无限小差很远的,所以是无法准确模拟现实的。回到问题,在dt的时间内,我们无法知道位置的准确路径,但是我们仍可以用一个方程来表示它,设为方程x=f(t),使用泰勒级数展开。可以明显看到,欧拉积分方法是泰勒级数展开的前两项,导数的最大结束是一阶,所以欧拉积分方法是一阶方法,精度只有前两项。,经过极短的时间dt,如果我们知道物体的受力,就可以求出物体的加速度,根据上面的计算,就可以求出x。,当前速度为v,时间为t,加速度为a,位置x,运动的距离为s。
2025-01-02 00:00:40
951
原创 【C++】模板使用总结
b : a;**模板函数的实例化:**使用具体类型代替模板参数。只要使用函数模板,编译器会自动进行实例化。// 使用int实例化// 使用float实例化// 实例化时,编译器会自动生成实例化的代码。比如使用int实例化会生成如下代码:b : a;// int支持a < b的调用注意:用于实例化模板的类型,必须支持模板函数的所有操作class A{}A a1, a2;// 编译报错:A不支持
2024-12-30 10:39:19
999
原创 【数据结构】二叉树
若高度为h的完全二叉树的节点数为n,则它和同样高度为h的满二叉树的前n个节点可以一一对应。这里我们将根节点的索引定为1,从上往下,从左往右,依次递增,最后一个节点的索引为n。将所有节点从上到下,从左到右的排序,顺序为两个子节点的节点,1个子节点的节点,0个子节点的节点,所以叶节点的开始索引为。二叉树是一种树形结构,一个节点最多有两个子节点,没有子节点的节点为叶节点,我们设二叉树的节点数为n。节点到其叶节点的最长简单路径中边的个数是节点的高度,树的高度为根节点的高度。,有1个子节点的节点的个数为n。
2024-04-01 16:28:34
1011
原创 vscode调试Unity
那么是vscode连接到Unity,Unity是服务端,vscode是客户端;所以,我们开始运行lua的时候,需要和vscode建立连接,建立连接的API在。现在使用vscode调试Unity的C#代码很简单,直接在vscode的EXTENSIONS里面搜索“Unity”,第一个就是,然后安装它,它会自动帮你安装上。字段,可以猜出emmylua和unity的连接是使用网络协议连接的,所以ide和debugger必定一个为服务单,一个为客户端。,无法成功附加,原因应该是你没有选择附加的Unity对象。
2024-03-29 15:54:06
3789
原创 【几何】平面方程
我们知道两个垂直向量的点乘为0,则平面的法线和平面上任意两点组成向量的点乘也为0。和上面一般式的求取过程是一样的,只不过得到的最后的表达方式不同。已知平面的法线和原点到平面的距离,求平面的方程。法线式和一般式几乎是一样的。= (A, B, C),平面上的任意一点为p。) ,现有任意一点p(x, y, z)。与xyz三个坐标轴的余弦值是多少呢?分别为平面与xyz轴的交点。为原点离平面的垂直距离。现在已知平面的一般式为。与xyz的夹角分别为。
2024-03-24 15:43:04
3154
1
原创 [unity]使用EditorUtility.CopySerialized复制脚本时要注意脚本中对其他物体的引用
A和B互相引用,使用EditorUtility.CopySerialized复制后得到C和D后,C引用的是B,D引用的是A,这时C和D的引用需要重新指定。
2021-11-16 17:41:36
2949
原创 [unity]计算子节点到父节点的长度不能使用子节点的localPosition的长度来计算
子节点的localPosition受父节点的localRotation的影响。最好使用Vector3.Distance(parentPos - childPos),如果要使用localPosition去计算则要现将localPosition乘以父节点的Transform.lossyScale,而lossyScale比较消耗性能。childTrans.localPosition * parentTrans.lossyScale。...
2021-11-16 11:51:46
2486
原创 [Unity]不要使用Mathf.Max()求大于2个数的最大值
Mathf.Max()当传入大于3个数的参数时,调用的是Mathf.Max(params float[] values),这样会new一个数组,会有GC。
2021-11-15 21:13:39
2342
原创 unity调试package的源代码
我们通过Package Manager导入的包是无法调试源代码的,如果想要调试源代码,必须将包的文件夹手动复制到Assets同目录下的Packages文件夹中(不是编辑器中的,是文件资源管理器中的)。如果是一个新项目需要导入某个package,可以另外新开一个专门用来下包的项目,将需要的包下下来,包的文件夹保存在上图中的Library/PackageCache中。然后将包文件复制到新项目的Packages目录下;如果项目中已经通过Package Manager导入这个包了,需要先在Packa...
2021-06-28 23:06:45
1411
3
原创 《计算机组成原理》第一章 读书笔记
《计算机组成原理》 作者:娄国焕 刘晓悦 出版社:北京大学出版社冯·洛伊曼计算机体系结构的基本特点:1.计算机由运算器、控制器、存储器、输入设备和输出设备组成;2.采用存储程序的方式,程序和数据放在同一存储器中;3.数据以二进制码表示;4.指令由操作码和地址码组成;5.指令在存储器中按执行顺序存放;6.机器以运算器为中心(现代计算机以存储器为中心);存储器存储器是计算机中用于存放程序和数据的部件。存储器由存储单元组成,每个存储单元存储一个数据或一条指令,...
2020-11-06 18:12:43
346
原创 GLSL的in、out存储限制符使用错误
在GLSL中用in修饰的变量表示传入的数据,用out修饰的变量表示传出的数据,通过这样可以实现顶点着色器向片段着色器传递数据,但要注意这个变量的命名要相同,不相同的话,片段着色器是获取不到从顶点着色器传入的数据的。1.顶点着色器#version 330 corelayout (location = 0) in vec3 aPos;layout (location = 1) in vec3 aColor;layout (location = 2) in vec2 aTexCoord;out
2020-06-13 18:11:09
1148
原创 Opengl错误:“Error C5145: must write to gl_Position”
写opengl时,编译出现了这个错误,查了很久都没有找出问题,网上大部分说的是读取shader文件的时候出错了,或者将gl_Position拼错,或者是没有给gl_Position赋值。我检查我的代码都没有上面的问题,后来发现是API用错了。错误代码:vs = glCreateShader(GL_VERTEX_SHADER);glShaderSource(GL_VERTEX_SHADER, 1, &vsCode, NULL); // 错误用法glCompileShader(vs);
2020-06-10 21:52:00
5051
原创 读取3DMax的.obj文件,并优化顶点数据
数据结构struct vertex_t { float p[3]; float n[3]; float t[2];};struct mesh_t { vertex_t *vertices; unsigned short *indices; unsigned int vertexCnt, indexCnt; mesh_t(unsigned int vertex_count,...
2019-08-07 11:28:31
1357
原创 【c++】行为树
行为树节点接口enum STATUS{ STATUS_SLEEP, STATUS_RUNNING, STATUS_SUCCESS, STATUS_FAILURE,};enum TYPE{ TYPE_LEAF, TYPE_BRANCH,};class Node {public: std::string _name; // 节点的名字 int _Index[12...
2019-08-07 11:18:40
1783
原创 乘法如何突破位数限制
如果我们用int或double等进行乘法运算是有位数和精确度的限制,如何突破这种限制呢?当然只能自己写一个乘法运算。 如果我们用笔和纸进行乘法运算是没有位数和精确度限制的,那么我们是否可以模拟用笔和纸做乘法运算呢?在一定范围内是可以。首先我们可以肯定,一位数乘一位数是可以实现的,然后我们可以设置两个char数组a[n]和b[n]来个记录两个n位数,无论是小数还是整...
2019-04-21 16:08:56
395
2
原创 OpenGL鼠标移动方块
思路:用变量设定方块的坐标,然后根据鼠标的位移更改方块的变量坐标。注意:方块的绘图坐标系和世界坐标系是重合的,鼠标所在的坐标是以窗口的左上角为原点(0,0)的坐标系,窗口的左下角的世界坐标系为gluOrho2D(left, right, bottom, top)中的(left, bottom)。所以鼠标的坐标(xMouse, yMouse)转化为世界坐标(x, y)为: x = xMouse;...
2018-08-03 02:02:56
1649
原创 Breshenham画线算法及应用
Breshenham画线算法是由Bresenham提出的一种精确而有效的光栅线生成算法,该算法仅仅使用增量整数计算。原理:当斜率小于 1 时,x 增加 1, y 增加 0 或 1.因此只需要判断 y 是增加 0 或 1. 算法:画线段(x0, y0)到(xEnd, yEnd), 线性方程 y = mx + b假设已经确定要显示的像素在(x_k, y_k), 那么下一步需要确定在列...
2018-05-16 22:40:43
2778
原创 非线性叠加算法
在游戏中,有许多属性的叠加是非线性的,这里以闪避为例子进行展开。单位目前的闪避为 a, 物品增加闪避 b, 单位得到物品的最终闪避为 c. (闪避的最大值为100%,这里用100来算,记为 limit)c = a + b* ( (limit - a)/ f(limit) ) | a<limit, b<limit, f(limit) > limitf(limit)为叠加衰...
2018-04-24 11:44:16
4709
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人