- 博客(140)
- 资源 (1)
- 收藏
- 关注
原创 c++函数模版类型推导
针对上面这个Filter函数,在main中直接调用,并没有传递任何的模版类型,编译器会根据调用时的类型自动进行推导,如果不使用编译器的类型推导应该怎么做呢?对于c++的函数模版,可以处理通用的数据类型,特别是stl中针对容器和算法的一些处理,如果自己写某个过程,如果不借助类型推导还真不好处理。方式2:不借助任何类型推导。
2025-01-23 10:16:30
186
原创 C++ 通用模版消息订阅模式
上面代码中通用的类是EventDelegate和EventManager类,其中EventDelegate主要用于一种类型的消息订阅与处理,其中的参数是可变的,如果使用类的继承方法不可避免的使用类的继承和指针的传递,这样可以编写很少的代码。C++中消息订阅模式的处理过程,针对不同的消息处理的数据不同,如果通过类型继承处理,需要写很多的类型,通过模版会减少代码的编写。这个过程不好理解的就是模版的元编程,然后就是stl标准库中的function类的使用。
2025-01-22 16:34:14
187
原创 javascript 原型、原型链
3、SpriteMaterial.prototype = Object.create( Material.prototype )这个过程会将Material.prototype的原型拷贝一份,防止后续SpriteMaterial.prototype上添加成员是修改Matieral.prototype。这个说明如果let sp = new SpriteMaterial时会将Material、SpriteMaterial中的this都指向sp这个对象。
2024-11-27 13:03:31
251
原创 直线与椭球相交计算
通常将椭球和直线联立方程组求解,但是计算过程涉及到分数计算,多项是就比较复杂,将直线与椭球相交转换成直线与球相交,可以简化计算过程;常规化简就比较复杂,涉及通分之类的计算,如果将上式子化简一下为下面的样子,,计算出k的值,就可以计算出交点坐标.,因为各个参数都是已知量,就减少了化简过程。一般的解法是将方程和直线联立,和直线的参数方程联立,
2024-04-23 10:51:54
465
原创 四元数的使用
平面向量向高维空间推广,实数对应一维数轴a, 对实数扩充产生复数a+b*i二维平面,对复数扩充产生四元数a+b*i+c*j+d*k三维空间,并定义相应的运算法则。形如a+b*i+c*j+d*k的数称为四元数(quaternion),其中a、b、c、d是实部,i、j、k称为虚部,并且有下列计算公式。加、减法 : (1+2i+3j+4k) + (4+5i+6j+7k) = 5+5i+9j+10k。乘法:(1+2i+3j+4k) * (4+5i+6j+7k) =复数的运算法则i * i = -1;
2023-03-29 10:58:05
578
原创 xatlas源码解析(六)
上一章说到,facegroup有了,facegroup组成了chartgroup,那么如何使用chartgroup计算相应的chart呢,答案在runChartGroupComputeChartsTask中,如下:// 使用ChartGroup计算Chartsstatic void runChartGroupComputeChartsTask(void *groupUserData, void *taskUserData){ auto args = (ChartGroupComputeChart
2022-04-02 19:03:30
1632
原创 xatlas源码解析(五)
前一章讲到,为了组织计算facegroup的任务数据,调用了computeCharts函数,这个函数中将每一个mesh放到一个任务当中,并使用多线程分割mesh,并将分割后的mesh形成一个一个的facegroup,下面看看是如何分割的:// 运行计算ComputeCharts的任务函数,计算每一个mesh分成多少个Charts的任务static void runMeshComputeChartsTask(void *groupUserData, void *taskUserData){ //
2022-04-02 16:52:40
618
原创 xatlas源码解析(四)
xatlas将导入的模型重新存储完成,格式化成s_atlas内部的mesh后,就开始将mesh分割成一个一个的chart。// 构建图集线程static void atlasGenerateThread() {// 第一次运行 或者 useUvMesh改变了 或者 chart改变了 if (firstRun || s_atlas.useUvMeshChanged || s_atlas.options.chartChanged) {#if USE_LIBIGL if (s_at...
2022-04-02 14:50:20
1035
原创 xatlas源码解析(三)
这一章讲解当模型不参考本身的uv的情况:继续上一章AddMesh过程的讲解,AddMesh中将模型的数据组织为atlas内部的数据,并且是原始数据的拷贝,而不是引用,并将mesh交给了子线程处理。// atlas中添加mesh【顶点、法线、uv】AddMeshError AddMesh(Atlas *atlas, const MeshDecl &meshDecl, uint32_t meshCountHint){ ...... // 获取一个任务组句柄 if (ctx->ad
2022-04-02 11:58:22
925
1
原创 xatlas源码解析(二)
在进行xatlas分析之前,先说说xatlas将模型加载到内存后的数据组织方式,代码如下:typedef struct { uint32_t flags; // flags代表网格索引数是否超过65535 // uint32_t if OBJZ_FLAG_INDEX32 flag is set, otherwise uint16_t. // See: objz_setIndexFormat void *indices; // 所有的面索引buffer uint32_t numIn
2022-04-01 19:54:43
1835
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人