Export tangents in GLTF (#5900)

Previously tangents were not being exported. If they are present, they should also be properly
exported.

Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
This commit is contained in:
Julian Knodt
2024-12-23 12:57:13 -08:00
committed by GitHub
parent 016be03c3d
commit 258cdfd2bc
2 changed files with 15 additions and 0 deletions

View File

@@ -608,6 +608,7 @@ namespace glTF2 {
{
WriteAttrs(w, attrs, p.attributes.position, "POSITION");
WriteAttrs(w, attrs, p.attributes.normal, "NORMAL");
WriteAttrs(w, attrs, p.attributes.tangent, "TANGENT");
WriteAttrs(w, attrs, p.attributes.texcoord, "TEXCOORD", true);
WriteAttrs(w, attrs, p.attributes.color, "COLOR", true);
WriteAttrs(w, attrs, p.attributes.joint, "JOINTS", true);

View File

@@ -1215,6 +1215,20 @@ void glTF2Exporter::ExportMeshes() {
p.attributes.normal.push_back(n);
}
/******************** Tangents ********************/
if (nullptr != aim->mTangents) {
for (uint32_t i = 0; i < aim->mNumVertices; ++i) {
aim->mTangents[i].NormalizeSafe();
}
Ref<Accessor> t = ExportData(
*mAsset, meshId, b, aim->mNumVertices, aim->mTangents, AttribType::VEC3,
AttribType::VEC3, ComponentType_FLOAT, BufferViewTarget_ARRAY_BUFFER
);
if (t) {
p.attributes.tangent.push_back(t);
}
}
/************** Texture coordinates **************/
for (int i = 0; i < AI_MAX_NUMBER_OF_TEXTURECOORDS; ++i) {
if (!aim->HasTextureCoords(i)) {