Message 1 of 1
DotNet SDK How Get Vertex Normal
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
我正在使用 3ds Max 2020。
如何正确获取模型的顶点、法线和纹理坐标数据?希望与 Max obj 导出
一致,以下是我使用 DotNet SDK 的方法。目前,顶点法线不一致。
for (int i = 0; i < Mesh.Faces.Count; i++)
{
var Face = Mesh.Faces[i];
var TVFace = Mesh.TvFace[i];
for (int j = 0; j < Face.V.Length; j++)
{
// ==========
var vi = Face.GetVert((int)j);
var v = Mesh.GetVert((int)vi);
v = NodeUtil.GetWorldSpacePoint3(Node, v);
var vKey = PointToString(v);
if (!V_Unique.TryGetValue(vKey, out vi))
{
Vertices.Add(v);
vi = (uint)V_Unique.Keys.Count + 1;
V_Unique.Add(vKey, vi);
}
FaceVertexIndexs.Add(vi);
// ==========
var vni = vi - 0;
var vn = Mesh.GfxNormals[(int)vni];
var vnKey = PointToString(vn);
if (!VN_Unique.TryGetValue(vnKey, out vni))
{
VertNormals.Add(vn);
vni = (uint)VN_Unique.Keys.Count + 1;
VN_Unique.Add(vnKey, vni);
}
FaceNormalIndexs.Add(vni);
// ==========
if (Mesh.NumTVerts > 0)
{
var vti = TVFace.GetTVert((int)j);
var vt = Mesh.GetTVert((int)vti);
var vtKey = PointToString(vt, false);
if (!VT_Unique.TryGetValue(vtKey, out vti))
{
TexCoords.Add(vt);
vti = (uint)VT_Unique.Keys.Count + 1;
VT_Unique.Add(vtKey, vti);
}
FaceTexCoordIndexs.Add(vti);
}
// ==========
SmoothGroups.Add(Face.SmGroup);
}
}
这是一个数据对比图