Fix collision cooking for skinned models that use different vertex format

#3246
This commit is contained in:
Wojtek Figat
2025-02-24 22:05:33 +01:00
parent afc4158dd3
commit bf21b0a267

View File

@@ -216,7 +216,21 @@ bool CollisionCooking::CookCollision(const Argument& arg, CollisionData::Seriali
const int32 vertexCount = vertexCounts[i];
if (vertexCount == 0)
continue;
Platform::MemoryCopy(finalVertexData.Get() + firstVertexIndex, vData.Get(), vertexCount * sizeof(Float3));
const int32 vStride = vData.Length() / vertexCount;
if (vStride == sizeof(Float3))
Platform::MemoryCopy(finalVertexData.Get() + firstVertexIndex, vData.Get(), vertexCount * sizeof(Float3));
else
{
// This assumes that each vertex structure contains position as Float3 in the beginning
auto dst = finalVertexData.Get() + firstVertexIndex;
auto src = vData.Get();
for (int32 j = 0; j < vertexCount; j++)
{
*dst++ = *(Float3*)src;
src += vStride;
}
}
vertexCounter += vertexCount;
if (needIndexBuffer)