本人没有什么cpp基础,只能是看到哪里是哪里,
我没有cpp基础,
你只能看到哪里在哪里,
如果我错了,请纠正我。
想用这个插件来寻找几何特征。
这就是我要说的:
不过,这里虽然有分析建模插件U3D开发外包,但目的并不是为了更好的拉取ue中的模型。
为了更好地监控引擎中对象之间的关系。
一.前言
有些人可能会说:
如果要存储几何的特征,直接去dcc获取定点颜色或者纹理什么的?
然后写个导入导出同步插件什么的,
可以直接利用已有知识快速完成。
简单快速。看起来很合理
但不得不说。我只想一次性使用几何的一些特征数据,
你必须打开单个软件来做一堆操作,
保存顶点颜色或纹理并在引擎中读取它们,
真的很难接受。
其实一开始我并不知道如何处理几何。
因为如果要搜索ue的建模ue模型外包,基本都会找到mesh。
那东西还是有点简陋的;还没有深入。
二. 查找几何体!
想谈谈我的心路历程:
我从一开始就不知道怎么看几何图形。
首先,为了找到顶点ue模型外包,我想到了建模工具插件,
我从一开始就不知道可以使用几何找到顶点。
只调试建模工具的编辑功能---。
本插件提供界面和点击系统等辅助功能。以及使用几何
(这里有个坑unity3d模型外包,我之前一直在调试插件的点击动作,我以为可以找到模型操作的部分ue模型外包,但可能是因为插件异步处理模型,所以找不到点击动作的调试。部分模型处理?)
经过一番心理逆转后,我找到了正确的路径:在启用填充模式时处理几何图形。
其实就是调用geometry中的方法来处理模型。
ger:: 作为一个repeater,它获取场景中被选中的物体,里面有一些虚函数可以调用建模工具中的函数来工作。 Setup当前使用的是什么工具,会进入what工具的setup函数中。然后初始化一堆东西。例如ue模型外包,那些点击动作或悬停动作。但我想在这里使用的是创建和
并且是属于几何的类,
它们在每个工具的 .h 中定义,有时在 .cpp 中定义。有点混乱。
但实际上只是使用几何中的方法来处理模型。
因为目的是获取几何特征。您不必担心建模工具。
只需创建总和;
例如,在.cpp中它是这样创建的
// create mesh to operate on
OriginalMesh = MakeShared<FDynamicMesh3>();
FMeshDescriptionToDynamicMesh Converter;
Converter.Convert(ComponentTarget->GetMesh(), *OriginalMesh);
// initialize topology(topology的初始化在.h中)
Topology = MakeUnique<FBasicTopology>(OriginalMesh.Get(), false);
三. 和。
并且是属于几何的类,
我使用函数 in 来查找几何特征
场景中的接收是存在的。
而且很奇怪。它使用大小为 2048 的块来存储网格信息
这次我选择了太多的网格面,它给了我3块
在每个区块中
我们几何的三角形面不会是 2048 的整数倍,
如果一个元素没有三角面,它会将元素值写为负数。
显然这样一堆数据当然是需要处理的,
这一次你需要用到它。
bool FGroupTopology::RebuildTopology()
{
Groups.Reset();
Edges.Reset();
Corners.Reset();
int32 MaxGroupID = 0;
for (int32 tid : Mesh->TriangleIndicesItr())
{
MaxGroupID = FMath::Max(GetGroupID(tid), MaxGroupID);
}
MaxGroupID++;
// initialize groups map first to avoid resizes
GroupIDToGroupIndexMap.Reset();
GroupIDToGroupIndexMap.Init(-1, MaxGroupID);
TArray<int> GroupFaceCounts;
GroupFaceCounts.Init(0, MaxGroupID);
for (int tid : Mesh->TriangleIndicesItr())
{
int GroupID = FMathd::Max(0, GetGroupID(tid));
if (GroupIDToGroupIndexMap[GroupID] == -1)
{
FGroup NewGroup;
NewGroup.GroupID = GroupID;
GroupIDToGroupIndexMap[GroupID] = Groups.Add(NewGroup);
}
GroupFaceCounts[GroupID]++;
}
for (FGroup& Group : Groups)
{
Group.Triangles.Reserve(GroupFaceCounts[Group.GroupID]);
}
// sort faces into groups
for (int tid : Mesh->TriangleIndicesItr())
{
int GroupID = FMathd::Max(0, GetGroupID(tid));
Groups[GroupIDToGroupIndexMap[GroupID]].Triangles.Add(tid);
}
最后一个 for 循环注释将人脸分组
中间是加载有效的三角形序号
然后我使用正在使用的方法找到了顶点
还有更多关于edgeloop的功能。
使用更广泛或
它似乎被许多处理几何图形的工具调用,包括地形工具。
但在其他工具中处理有效元素似乎是在 lamdba 表达式中写一些东西..
这个类中有很多与几何相关的基本函数
例如,返回顶点的函数。等功能实现点、线、面相互访问。
也测量曲线。
和Houdini不同的地方是这里写了一套关于edge的api。还是不错的。
然后我没有看几何创建部分。
我没有深入其他地方。以后用的时候再补充。