将其他骨骼数据与其他骨结合在一起

问题描述 投票:0回答:1

[我的问题是,我试图使用Assimp从Direct X c ++中的fbx文件中加载关节/骨骼数据,但是我想将8和索引存储在与存储位置,uv等相同的顶点结构中。

我可以为每个顶点制作一个循环,但我也想在每个骨骼上制作一个循环。这意味着我不能在同一循环中同时拥有联合数据和其他数据。

我应该创建多顶点vertec对象,然后再将它们组合吗?

我也不知道如何找到每个顶点的骨骼ID和重量,我指望每个骨骼4个,但是也许我根本就不需要最后一个循环?我不确定如何设置。

非常感谢您的帮助,非常感谢。

  for (UINT k = 0; k < currentMesh->mNumBones; k++)
    {

        aiBone* bone = currentMesh->mBones[k];

        for (UINT m = 0; m < bone->mNumWeights; m++)
        {
            aiVertexWeight weight = bone->mWeights[m];

            for (UINT n = 0; n < 4; n++)
            {
                //if




            }

        }




    }


     //////////////////////////////////////////////
    for (UINT k = 0; k < currentMesh->mNumVertices; k++)
    {



        Vertex vert;
        vert.position.x = currentMesh->mVertices[k].x;
        vert.position.y = currentMesh->mVertices[k].y;
        vert.position.z = currentMesh->mVertices[k].z;



        vert.TexCoord.x = currentMesh->mTextureCoords[0][k].x;
        vert.TexCoord.y = currentMesh->mTextureCoords[0][k].y;

        vert.normal.x = currentMesh->mNormals[k].x;
        vert.normal.y = currentMesh->mNormals[k].y;
        vert.normal.z = currentMesh->mNormals[k].z;





        vertexVector.push_back(vert);

    }
assimp
1个回答
0
投票
    for (UINT k = 0; k < currentMesh->mNumBones; k++)
    {

        aiBone* bone = currentMesh->mBones[k];

        for (UINT m = 0; m < bone->mNumWeights; m++)
        {
            aiVertexWeight weight = bone->mWeights[m];


            if (vertexVector[weight.mVertexId].joints.x == 0)
            {
                vertexVector[weight.mVertexId].joints.x = k;
                vertexVector[weight.mVertexId].weights.x = weight.mWeight;
            }
            else if (vertexVector[weight.mVertexId].joints.y == 0)
            {
                vertexVector[weight.mVertexId].joints.y = k;
                vertexVector[weight.mVertexId].weights.y = weight.mWeight;
            }
            else if (vertexVector[weight.mVertexId].joints.z == 0)
            {
                vertexVector[weight.mVertexId].joints.z = k;
                vertexVector[weight.mVertexId].weights.z = weight.mWeight;
            }
            else if (vertexVector[weight.mVertexId].joints.w == 0)
            {
                vertexVector[weight.mVertexId].joints.w = k;
                vertexVector[weight.mVertexId].weights.w = weight.mWeight;
            }



        }




    }
© www.soinside.com 2019 - 2024. All rights reserved.