объединить данные костей ассимпа с другими данными вершин - PullRequest
0 голосов
/ 09 января 2020

Моя проблема в том, что я пытаюсь загрузить данные суставов / костей из файла fbx в Direct X c ++, используя Assimp, но я хочу сохранить восьмерки и индексы в той же самой структуре вершин, в которой я храню позицию, uv, et c.

Я могу сделать al oop для каждой вершины, но я также хочу сделать al oop для каждой кости. Это означает, что у меня не может быть как объединенных данных, так и других данных в одном и том же l oop.

Должен ли я создавать объекты типа multitilpe verte c и затем объединять их потом?

I Также я не уверен, как найти идентификатор кости и вес для каждой вершины, я рассчитываю на 4 на кость, но, может быть, мне вообще не стоило этого последнего l oop? Я не уверен, как его настроить.

Буду признателен за помощь, большое спасибо.

  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);

    }

1 Ответ

0 голосов
/ 09 января 2020
    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;
            }



        }




    }

Я получил доступ к той же структуре, что и у меня, и добавил материал.

...