亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? winmain.cpp

?? 用DirectX制作高級動畫-[Advanced.Animation.with.DirectX]
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
    CombineTransformation(&Bones[0], &matIdentity);
  }

  // Open the target file
  if((fp_out = fopen(DestFilename, "wb"))==NULL)
    return FALSE;

  // Write the target .X file header and templates
  fprintf(fp_out, "xof 0303txt 0032\r\n");
  fprintf(fp_out, "\r\n");
  fprintf(fp_out, "// This file was created with MeshConv (c) 2003 by Jim Adams\r\n");
  fprintf(fp_out, "\r\n");
  fprintf(fp_out, "template XSkinMeshHeader {\r\n");
  fprintf(fp_out, " <3cf169ce-ff7c-44ab-93c0-f78f62d172e2>\r\n");
  fprintf(fp_out, " WORD nMaxSkinWeightsPerVertex;\r\n");
  fprintf(fp_out, " WORD nMaxSkinWeightsPerFace;\r\n");
  fprintf(fp_out, " WORD nBones;\r\n");
  fprintf(fp_out, "}\r\n");
  fprintf(fp_out, "\r\n");
  fprintf(fp_out, "template SkinWeights {\r\n");
  fprintf(fp_out, " <6f0d123b-bad2-4167-a0d0-80224f25fabb>\r\n");
  fprintf(fp_out, " STRING transformNodeName;\r\n");
  fprintf(fp_out, " DWORD nWeights;\r\n");
  fprintf(fp_out, " array DWORD vertexIndices[nWeights];\r\n");
  fprintf(fp_out, " array FLOAT weights[nWeights];\r\n");
  fprintf(fp_out, " Matrix4x4 matrixOffset;\r\n");
  fprintf(fp_out, "}\r\n");
  fprintf(fp_out, "\r\n");

  // Write out bone hierarchy if it exists
  char Indent[256]; Indent[0] = 0;
  if(msNumBones) {
    // Write root frame and recursively write out remaining
    WriteFrame(&Bones[0], fp_out, 0, FALSE);

    // Don't close out last frame - stick mesh into it
    strcpy(Indent, "  ");
  }

  // Name the mesh by clipping out mesh filename (without path and extension)
  char *NamePtr = strrchr(SrcFilename, '\\');
  if(!NamePtr)
    NamePtr= &SrcFilename[0];
  else 
    NamePtr++;
  char MeshName[MAX_PATH];
  for(i=0;i<strlen(NamePtr)+1;i++) {
    if(NamePtr[i] == 32 || NamePtr[i] == '.')
      MeshName[i] = '_';
    else
      MeshName[i] = NamePtr[i];
  }

  // Write out mesh header
  fprintf(fp_out, "%sMesh %s {\r\n", Indent, MeshName);

  // Write out vertices
  fprintf(fp_out, "%s  %lu;\r\n", Indent, NumMeshVertices);
  for(i=0;i<NumMeshVertices;i++) {
    fprintf(fp_out, "%s  %06lf;%06lf;%06lf;", Indent, Vertices[i].x, Vertices[i].y, Vertices[i].z);
    if(i < (NumMeshVertices-1))
      fprintf(fp_out, ",\r\n");
    else
      fprintf(fp_out, ";\r\n");
  }

  // Write out face data
  fprintf(fp_out, "%s  %lu;\r\n", Indent, msNumFaces);
  for(i=0;i<msNumFaces;i++) {
    fprintf(fp_out, "%s  3;%lu,%lu,%lu;", Indent, Faces[i*3], Faces[i*3+2], Faces[i*3+1]);
    if(i < ((DWORD)msNumFaces-1))
      fprintf(fp_out, ",\r\n");
    else
      fprintf(fp_out, ";\r\n");
  }

  // Write out normal data
  fprintf(fp_out, "%s  MeshNormals {\r\n", Indent);
  fprintf(fp_out, "%s    %lu;\r\n", Indent, NumMeshVertices);
  for(i=0;i<NumMeshVertices;i++) {
    fprintf(fp_out, "%s    %06lf;%06lf;%06lf;", Indent, Vertices[i].nx, Vertices[i].ny, Vertices[i].nz);
    if(i == (NumMeshVertices-1))
      fprintf(fp_out, ";\r\n");
    else
      fprintf(fp_out, ",\r\n");
  }
  fprintf(fp_out, "%s    %lu;\r\n", Indent, msNumFaces);
  for(i=0;i<msNumFaces;i++) {
    fprintf(fp_out, "%s    3;%lu,%lu,%lu;", Indent, Faces[i*3], Faces[i*3+2], Faces[i*3+1]);
    if(i < ((DWORD)msNumFaces-1))
      fprintf(fp_out, ",\r\n");
    else
      fprintf(fp_out, ";\r\n");
  }
  fprintf(fp_out, "  }\r\n");

  // Write mesh material list
  fprintf(fp_out, "%s  MeshMaterialList {\r\n", Indent);
  fprintf(fp_out, "%s    %lu;\r\n", Indent, msNumMaterials);
  fprintf(fp_out, "%s    %lu;\r\n", Indent, msNumFaces);
  for(i=0;i<msNumFaces;i++) {
    fprintf(fp_out, "%s    %lu", Indent, msGroups[msFaces[i].GroupIndex].Material);
    if(i < ((DWORD)msNumFaces-1))
      fprintf(fp_out, ",\r\n");
    else
      fprintf(fp_out, ";\r\n");
  }

  // Write materials
  for(i=0;i<msNumMaterials;i++) {
    fprintf(fp_out, "%s    Material {\r\n", Indent);
    fprintf(fp_out, "%s      %06lf;%06lf;%06lf;%06lf;;\r\n", Indent, msMaterials[i].Diffuse[0], msMaterials[i].Diffuse[1], msMaterials[i].Diffuse[2], msMaterials[i].Diffuse[3]);
    fprintf(fp_out, "%s      %06lf;\r\n", Indent, msMaterials[i].Shininess);
    fprintf(fp_out, "%s      %06lf;%06lf;%06lf;%06lf;;\r\n", Indent, msMaterials[i].Specular[0], msMaterials[i].Specular[1], msMaterials[i].Specular[2]);
    fprintf(fp_out, "%s      %06lf;%06lf;%06lf;%06lf;;\r\n", Indent, msMaterials[i].Emissive[0], msMaterials[i].Emissive[1], msMaterials[i].Emissive[2]);

    // Write texture filename
    if(msMaterials[i].Texture[0]) {
      fprintf(fp_out, "%s      TextureFileName {\r\n", Indent);

      // Only write out local filenames
      char *Ptr = strrchr(msMaterials[i].Texture, '\\');
      if(!Ptr)
        Ptr = msMaterials[i].Texture;
      else
        Ptr++;
      fprintf(fp_out, "%s        %c%s%c;\r\n", Indent, '"', Ptr, '"');
      fprintf(fp_out, "%s      }\r\n", Indent);
    }

    fprintf(fp_out, "%s    }\r\n", Indent);
  }
  fprintf(fp_out, "%s  }\r\n", Indent);

  // Write mesh texture coordinates
  fprintf(fp_out, "%s  MeshTextureCoords {\r\n", Indent);
  fprintf(fp_out, "%s    %lu;\r\n", Indent, NumMeshVertices);
  for(i=0;i<NumMeshVertices;i++) {
    fprintf(fp_out, "%s    %06lf;%06lf;", Indent, Vertices[i].u, Vertices[i].v);
    if(i < (NumMeshVertices-1))
      fprintf(fp_out, ",\r\n");
    else
      fprintf(fp_out, ";\r\n");
  }
  fprintf(fp_out, "%s  }\r\n", Indent);

  // Count the number of bones actually used
  DWORD NumBonesUsed = 0;
  for(i=0;i<msNumBones;i++) {
    for(j=0;j<NumMeshVertices;j++) {
      if(Vertices[j].BoneNum == i) {
        NumBonesUsed++;
        break;
      }
    }
  }

  // Write bone data (if any)
  if(NumBonesUsed) {

    // Write skin weight header
    fprintf(fp_out, "%s  XSkinMeshHeader {\r\n", Indent);
    fprintf(fp_out, "%s    2;\r\n", Indent);
    fprintf(fp_out, "%s    4;\r\n", Indent);
    fprintf(fp_out, "%s    %lu;\r\n", Indent, NumBonesUsed);
    fprintf(fp_out, "%s  }\r\n", Indent);

    // Write out skin weights
    for(i=0;i<msNumBones;i++) {

      // Count number of vertices attached
      DWORD Count = 0;
      for(j=0;j<NumMeshVertices;j++) {
        if(Vertices[j].BoneNum == i)
          Count++;
      }

      if(Count) {

        fprintf(fp_out, "%s  SkinWeights {\r\n", Indent);
        fprintf(fp_out, "%s    %c%s%c;\r\n", Indent, '"', Bones[i].Name, '"');
        fprintf(fp_out, "%s    %lu;\r\n", Indent, Count);
      
        // Write vertex indices
        DWORD Num=0;
        for(j=0;j<NumMeshVertices;j++) {
          if(Vertices[j].BoneNum == i) {
            fprintf(fp_out, "%s    %lu", Indent, j);
            if(Num < (Count-1))
              fprintf(fp_out, ",\r\n");
            else 
              fprintf(fp_out, ";\r\n");
            Num++;
          }
        }

        // Write weights
        for(j=0;j<Count;j++) {
          fprintf(fp_out, "%s    1.000000", Indent);
          if(j < (Count-1))
            fprintf(fp_out, ",\r\n");
          else 
            fprintf(fp_out, ";\r\n");
        }

        // Write inverse bone matrix
        fprintf(fp_out, "%s    %06lf,%06lf,%06lf,%06lf,\r\n",  Indent, Bones[i].matInvCombined._11, Bones[i].matInvCombined._12, Bones[i].matInvCombined._13, Bones[i].matInvCombined._14);
        fprintf(fp_out, "%s    %06lf,%06lf,%06lf,%06lf,\r\n",  Indent, Bones[i].matInvCombined._21, Bones[i].matInvCombined._22, Bones[i].matInvCombined._23, Bones[i].matInvCombined._24);
        fprintf(fp_out, "%s    %06lf,%06lf,%06lf,%06lf,\r\n",  Indent, Bones[i].matInvCombined._31, Bones[i].matInvCombined._32, Bones[i].matInvCombined._33, Bones[i].matInvCombined._34);
        fprintf(fp_out, "%s    %06lf,%06lf,%06lf,%06lf;;\r\n", Indent, Bones[i].matInvCombined._41, Bones[i].matInvCombined._42, Bones[i].matInvCombined._43, Bones[i].matInvCombined._44);

        // Clear data object
        fprintf(fp_out, "%s  }\r\n", Indent);
      }
    }
  }

  // Close mesh data object
  fprintf(fp_out, "%s}\r\n", Indent);

  // Close frame hierarchy (if any)
  if(msNumBones)
    fprintf(fp_out, "}\r\n");

  // Output keyframes (if any)
  if(msTotalFrames) {

    // Add a space to seperate frame/mesh data from animation data
    fprintf(fp_out, "\r\n");

    // Output animation set data object 
    fprintf(fp_out, "AnimationSet %s_Anim {\r\n", MeshName);

    // Go through each bone and look for ones that have keys
    for(i=0;i<msNumBones;i++) {
      
      // Write animation data object is bone has keyframes
      if(msBones[i].Header.NumRotFrames || msBones[i].Header.NumPosFrames) {

        // Write animation data object header
        fprintf(fp_out, "  Animation %s_Anim {\r\n", Bones[i].Name);
        fprintf(fp_out, "    {%s}\r\n", Bones[i].Name);

        // Write keyframes
        fprintf(fp_out, "    AnimationKey {\r\n");
        fprintf(fp_out, "      4;\r\n");
        fprintf(fp_out, "      %lu;\r\n", msBones[i].Header.NumRotFrames);

        for(j=0;j<msBones[i].Header.NumPosFrames;j++) {
          fprintf(fp_out, "      %lu;16;\r\n", (DWORD)(msAnimationFPS * msBones[i].RotKeyFrames[j].Time)-1);

          // Build a transformation matrix based off values
          D3DXMATRIX matAnim, matRotation, matTranslation;
          CreateYawPitchRollRotationMatrix(&matRotation,
                                           msBones[i].RotKeyFrames[j].Value[1],
                                           msBones[i].RotKeyFrames[j].Value[0],
                                           -msBones[i].RotKeyFrames[j].Value[2]);
          D3DXMatrixTranslation(&matTranslation,
                                msBones[i].PosKeyFrames[j].Value[0],
                                msBones[i].PosKeyFrames[j].Value[1],
                                -msBones[i].PosKeyFrames[j].Value[2]);
          matAnim = matRotation * matTranslation;

          // Combine animation transformation w/bone transformation
          matAnim *= Bones[i].matTransformation;

          // Write transformation matrix
          fprintf(fp_out, "      %06lf,%06lf,%06lf,%06lf,\r\n",  matAnim._11, matAnim._12, matAnim._13, matAnim._14);
          fprintf(fp_out, "      %06lf,%06lf,%06lf,%06lf,\r\n",  matAnim._21, matAnim._22, matAnim._23, matAnim._24);
          fprintf(fp_out, "      %06lf,%06lf,%06lf,%06lf,\r\n",  matAnim._31, matAnim._32, matAnim._33, matAnim._34);
          fprintf(fp_out, "      %06lf,%06lf,%06lf,%06lf;;\r\n", matAnim._41, matAnim._42, matAnim._43, matAnim._44);
        }

        // Close keyframe data object
        fprintf(fp_out, "    }\r\n");
      }

      // Close animation data object
      fprintf(fp_out, "  }\r\n");
    }

    // Close animation set data object
    fprintf(fp_out, "}\r\n");
  }

  // Close files
  fclose(fp_out);
  fclose(fp_in);

  // Release all used data
  delete [] Vertices;
  delete [] Faces;
  delete [] msVertices;
  delete [] msFaces;
  delete [] msGroups;
  delete [] msMaterials;
  delete [] msBones;

  // Return success
  return TRUE;
}

void WriteFrame(sMS3DBoneContainer *Bone, FILE *fp, DWORD Indent, BOOL Close)
{
  char IndentText[256];
  
  // Write siblings
  if(Bone->Sibling)
    WriteFrame(Bone->Sibling, fp, Indent, TRUE);

  // Create some bit of text to indent frame information
  memset(IndentText, 32, 256);
  IndentText[Indent] = 0;

  // Write frame data object
  fprintf(fp, "%sFrame %s {\r\n", IndentText, Bone->Name);
  fprintf(fp, "%s  FrameTransformMatrix {\r\n", IndentText);
  fprintf(fp, "%s    %06lf,%06lf,%06lf,%06lf,\r\n",  IndentText, Bone->matTransformation._11, Bone->matTransformation._12, Bone->matTransformation._13, Bone->matTransformation._14);
  fprintf(fp, "%s    %06lf,%06lf,%06lf,%06lf,\r\n",  IndentText, Bone->matTransformation._21, Bone->matTransformation._22, Bone->matTransformation._23, Bone->matTransformation._24);
  fprintf(fp, "%s    %06lf,%06lf,%06lf,%06lf,\r\n",  IndentText, Bone->matTransformation._31, Bone->matTransformation._32, Bone->matTransformation._33, Bone->matTransformation._34);
  fprintf(fp, "%s    %06lf,%06lf,%06lf,%06lf;;\r\n", IndentText, Bone->matTransformation._41, Bone->matTransformation._42, Bone->matTransformation._43, Bone->matTransformation._44);
  fprintf(fp, "%s  }\r\n", IndentText);

  // Write child objects
  if(Bone->Child)
    WriteFrame(Bone->Child, fp, Indent+2, TRUE);

  // Close data template (only if not first frame)
  if(Close == TRUE)
    fprintf(fp, "%s}\r\n", IndentText);
}

void CombineTransformation(sMS3DBoneContainer *Bone, D3DXMATRIX *Matrix)
{
  // Combine matrix
  Bone->matCombined = Bone->matTransformation * (*Matrix);

  // Compute inverse combined matrix
  D3DXMatrixInverse(&Bone->matInvCombined, NULL, &Bone->matCombined);

  // Combine child
  if(Bone->Child)
    CombineTransformation(Bone->Child, &Bone->matCombined);

  // Combine sibling
  if(Bone->Sibling)
    CombineTransformation(Bone->Sibling, Matrix);
}

void CreateYawPitchRollRotationMatrix(D3DXMATRIX *matRotation,
                                      float Yaw,
                                      float Pitch,
                                      float Roll)
{
  D3DXMATRIX matX, matY, matZ;

  D3DXMatrixRotationX(&matX, -Pitch);
  D3DXMatrixRotationY(&matY, -Yaw);
  D3DXMatrixRotationZ(&matZ, -Roll);

  (*matRotation) = matX * matY * matZ;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
黄页视频在线91| 欧美日韩国产高清一区二区三区 | 国产成人av电影在线| 在线精品视频免费播放| 国产视频一区在线播放| 五月开心婷婷久久| 97久久精品人人做人人爽50路| 欧美一级夜夜爽| 一区二区三区四区五区视频在线观看| 精品一区二区免费看| 欧美撒尿777hd撒尿| 国产精品免费看片| 国产一区二区三区四区在线观看| 欧美少妇性性性| 男女性色大片免费观看一区二区 | 欧美不卡视频一区| 亚洲大片免费看| 91久久精品网| 亚洲精品高清在线观看| 99天天综合性| 国产精品沙发午睡系列990531| 六月婷婷色综合| 欧美一区二区三区免费大片 | 91官网在线免费观看| 国产精品黄色在线观看| 国产精品综合av一区二区国产馆| 日韩三级.com| 麻豆传媒一区二区三区| 欧美男女性生活在线直播观看| 一区二区三区波多野结衣在线观看| www.日韩在线| 中文字幕亚洲精品在线观看| 丁香啪啪综合成人亚洲小说| 欧美经典一区二区三区| 国产91精品一区二区麻豆亚洲| 久久久久久9999| 高清国产午夜精品久久久久久| 国产日韩精品一区二区三区| 国产成人精品亚洲日本在线桃色| 日本一区二区免费在线观看视频| 国产成人在线视频免费播放| 亚洲国产高清在线观看视频| 成人免费观看av| 亚洲图片另类小说| 91电影在线观看| 亚洲123区在线观看| 555夜色666亚洲国产免| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美一区二区不卡视频| 精东粉嫩av免费一区二区三区| 337p日本欧洲亚洲大胆精品| 国产69精品一区二区亚洲孕妇| 国产精品国产三级国产aⅴ原创| 一本久道久久综合中文字幕| 亚洲午夜视频在线| 精品国产电影一区二区| 国产v综合v亚洲欧| 亚洲免费资源在线播放| 欧美久久久一区| 激情综合五月婷婷| 成人欧美一区二区三区1314| 欧美日韩中文字幕一区| 另类小说色综合网站| 国产精品国产自产拍高清av王其 | 国产人伦精品一区二区| 91蜜桃传媒精品久久久一区二区| 亚洲综合999| 2023国产精华国产精品| 91在线云播放| 精品一区二区三区影院在线午夜 | 国产美女视频一区| 一区二区三区四区中文字幕| 欧美一区二区播放| 91小视频在线免费看| 美女一区二区视频| 成人免费在线观看入口| 欧美一级理论性理论a| 99国产一区二区三精品乱码| 麻豆91在线观看| 亚洲欧美一区二区三区久本道91 | 久久精品日韩一区二区三区| 欧美视频在线一区二区三区 | 欧美一区三区四区| av不卡在线播放| 久久99精品久久只有精品| 亚洲女人的天堂| 久久精品视频一区二区三区| 678五月天丁香亚洲综合网| 不卡的看片网站| 韩国v欧美v亚洲v日本v| 天天综合色天天| 悠悠色在线精品| 中文字幕欧美激情| 久久色在线视频| 欧美一区二区精品久久911| 色猫猫国产区一区二在线视频| 国产成人精品在线看| 九九**精品视频免费播放| 午夜国产精品影院在线观看| 亚洲男人电影天堂| 国产精品久99| 国产精品女人毛片| 久久色在线视频| 欧美精品一区二区三区一线天视频| 欧美亚洲自拍偷拍| 色香色香欲天天天影视综合网| 成人妖精视频yjsp地址| 国产精品一区二区在线看| 日本欧美在线看| 日精品一区二区| 婷婷成人激情在线网| 亚洲成人激情自拍| 五月综合激情婷婷六月色窝| 亚洲图片自拍偷拍| 天天影视涩香欲综合网| 日韩—二三区免费观看av| 五月天视频一区| 奇米一区二区三区av| 免费日本视频一区| 国内成人精品2018免费看| 国产毛片精品一区| 东方欧美亚洲色图在线| 97精品电影院| 日本精品免费观看高清观看| 日本精品一级二级| 欧美亚洲动漫精品| 欧美一区二区三区四区久久| 欧美一卡二卡在线| 久久综合999| 日韩电影在线观看电影| 免费亚洲电影在线| 国模一区二区三区白浆 | 日本成人在线看| 国产自产v一区二区三区c| 国产精品白丝av| 94色蜜桃网一区二区三区| 欧美午夜免费电影| www国产精品av| 亚洲精品你懂的| 日韩和欧美的一区| 国产一区二区三区在线观看精品| 国产91精品一区二区麻豆网站 | 中文字幕免费不卡在线| 亚洲乱码中文字幕| 日本中文在线一区| 国产二区国产一区在线观看| 色婷婷综合久久| 日韩欧美久久一区| 国产精品欧美久久久久无广告| 亚洲高清久久久| 国产激情一区二区三区桃花岛亚洲| 91麻豆国产精品久久| 日韩亚洲欧美成人一区| 国产精品美女视频| 日本aⅴ亚洲精品中文乱码| 粉嫩蜜臀av国产精品网站| 欧美三级三级三级| 国产日韩视频一区二区三区| 一区二区三区免费看视频| 久久国产精品99久久久久久老狼| 99久久综合国产精品| 日韩一区二区在线免费观看| 国产精品久久久久久久久久久免费看| 午夜影院久久久| www.成人网.com| 日韩欧美中文字幕制服| 一区二区久久久久| 国产mv日韩mv欧美| 欧美一三区三区四区免费在线看 | 精品av综合导航| 亚洲与欧洲av电影| 国产69精品久久久久毛片| 日韩一区二区三区视频| 亚洲欧美福利一区二区| 国产美女精品人人做人人爽| 欧美日韩高清一区二区| 日韩美女视频一区二区| 国产精品一区在线观看乱码| 69精品人人人人| 亚洲成人午夜影院| 91黄视频在线观看| 中文字幕一区二区日韩精品绯色| 精品中文字幕一区二区小辣椒| 欧美三级中文字幕在线观看| 亚洲人123区| www.激情成人| 国产精品护士白丝一区av| 国产精品自拍三区| 亚洲精品一区二区三区福利 | 怡红院av一区二区三区| 99久久精品久久久久久清纯| 久久五月婷婷丁香社区| 狠狠色2019综合网| 欧美不卡一区二区三区| 麻豆精品国产91久久久久久| 91精品国产一区二区三区香蕉| 午夜精品免费在线观看| 欧美人成免费网站| 日本麻豆一区二区三区视频| 欧美成人精品二区三区99精品|