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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? winmain.cpp

?? 用DirectX制作高級(jí)動(dòng)畫(huà)-[Advanced.Animation.with.DirectX]
?? CPP
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
    for(j=0;j<NumVertices;j++) {
      fprintf(fp_out, "    %06lf;%06lf;", Vertices[j].u, Vertices[j].v);
      if(j < (NumVertices-1))
        fprintf(fp_out, ",\r\n");
      else
        fprintf(fp_out, ";\r\n");
    }
    fprintf(fp_out, "  }\r\n");

    // Write mesh material list
    fprintf(fp_out, "  MeshMaterialList {\r\n");
    fprintf(fp_out, "    1;\r\n    %lu;\r\n", NumFaces);
    for(j=0;j<NumFaces;j++) {
      fprintf(fp_out, "    0");
      if(j < (NumFaces-1))
        fprintf(fp_out, ",\r\n");
      else
        fprintf(fp_out, ";\r\n");
    }

    // Write material
    fprintf(fp_out, "    Material {\r\n");
    fprintf(fp_out, "      1.000000;1.000000;1.000000;1.000000;;\r\n");
    fprintf(fp_out, "      0.000000;\r\n");
    fprintf(fp_out, "      1.000000;1.000000;1.000000;;\r\n");
    fprintf(fp_out, "      1.000000;1.000000;1.000000;;\r\n");
    fprintf(fp_out, "      TextureFilename {\r\n");
    fprintf(fp_out, "        %c%s%c;\r\n", '"', TextureFilenamePtr, '"');
    fprintf(fp_out, "      }\r\n");
    fprintf(fp_out, "    }\r\n");

    // Close mesh materal list
    fprintf(fp_out, "  }\r\n");

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

  // Close the input file
  fclose(fp_in);

  // Free used resource
  delete [] Vertices;
  delete [] Indices;
  delete [] mdFrame;
  delete [] mdTextureCoords;
  delete [] mdFaces;

  /////////////////////////////////////////////////
  //
  // Write the animation sets
  //
  /////////////////////////////////////////////////

  // Clear out a buffer for last known mesh sequence's name
  char LastName[16];
  for(DWORD j=0;j<16;j++)
    LastName[j] = (isdigit(MeshNames[j]) && j >= strlen(&MeshNames[0])-2) ? 0:MeshNames[j];

  // Reset # of frames count
  DWORD NumFrames = 0;

  // Go through each mesh (starting at 2nd mesh since 1st already counted)
  for(i=0;i<mdHeader.NumFrames;i++) {

    // Get name of mesh (clean sequence numbers)
    char CleanName[16];
    for(DWORD j=0;j<16;j++)
      CleanName[j] = (isdigit(MeshNames[16*i+j]) && j >= strlen(&MeshNames[16*i])-2) ? 0:MeshNames[16*i+j];

    // Compare names and increase count if matched last name
    if(!strcmp(LastName, CleanName)) {
      NumFrames++;
    } else {

      // Output animation template
      fprintf(fp_out, "MorphAnimationSet %s {\r\n", LastName);
      fprintf(fp_out, "  1;\r\n");  // Always loop
      fprintf(fp_out, "  %lu;\r\n", NumFrames+1);
      for(DWORD k=0;k<NumFrames;k++)
        fprintf(fp_out, "  %lu; %c%s%c;,\r\n", k*MD2FPS, '"', &MeshNames[16*(i-NumFrames+k)], '"');
      fprintf(fp_out, "  %lu; %c%s%c;;\r\n", k*MD2FPS, '"', &MeshNames[16*(i-NumFrames)], '"');
      fprintf(fp_out, "}\r\n");

      // Record last name and go to next animation
      strcpy(LastName, CleanName);
      NumFrames = 1;
    }
  }

  // Check if any frames left to output
  if(NumFrames) {
    // Output animation template
    fprintf(fp_out, "MorphAnimationSet %s {\r\n", LastName);
    fprintf(fp_out, "  1;\r\n");  // Always loop
    fprintf(fp_out, "  %lu;\r\n", NumFrames+1);
    for(DWORD k=0;k<NumFrames;k++)
      fprintf(fp_out, "  %lu; %c%s%c;,\r\n", k*MD2FPS, '"', &MeshNames[16*(i-NumFrames+k)], '"');
    fprintf(fp_out, "  %lu; %c%s%c;;\r\n", k*MD2FPS, '"', &MeshNames[16*(i-NumFrames)], '"');
    fprintf(fp_out, "}\r\n");
  }

  // Close the output file
  fclose(fp_out);

  // Free mesh names 
  delete [] MeshNames;

  // Return success
  return TRUE;
}

BOOL ConvertMS3D(char *SrcFilename, char *DestFilename)
{
  FILE           *fp_in, *fp_out;

  DWORD           i, j, k, Num;
  
  sMS3DHeader     msHeader;

  unsigned short  msNumVertices;
  sMS3DVertex    *msVertices = NULL;

  sMS3DMeshVertex *Vertices;
  unsigned short  *Faces;

  unsigned short  msNumFaces;
  sMS3DFace      *msFaces = NULL;
  unsigned short *Indices = NULL;

  unsigned short  msNumGroups;
  sMS3DGroup     *msGroups = NULL;

  unsigned short  msNumMaterials;
  sMS3DMaterial  *msMaterials = NULL;

  unsigned short  msNumBones;
  sMS3DBone      *msBones = NULL;
  sMS3DBoneContainer *Bones = NULL;

  float           msAnimationFPS;
  float           msCurrentTime;
  int             msTotalFrames;

  // Error checking
  if(!SrcFilename || !DestFilename)
    return FALSE;

  // Open the source file
  if((fp_in = fopen(SrcFilename, "rb"))==NULL)
    return FALSE;

  // Read in the header and make sure it's valid
  fread(&msHeader, 1, sizeof(sMS3DHeader), fp_in);
  if(memcmp(msHeader.Signature, "MS3D000000", 10)) {
    fclose(fp_in);
    return FALSE;
  }

  ///////////////////////////////////////////////
  //
  // Read data into some temporary buffers
  //
  ///////////////////////////////////////////////

  // Read vertex data
  fread(&msNumVertices, 1, sizeof(short), fp_in);
  if(msNumVertices) {
    msVertices = new sMS3DVertex[msNumVertices];
    for(i=0;i<msNumVertices;i++) {
      fread(&msVertices[i], 1, sizeof(sMS3DVertex), fp_in);
    }
  }

  // Read face data
  fread(&msNumFaces, 1, sizeof(short), fp_in);
  if(msNumFaces) {
    msFaces = new sMS3DFace[msNumFaces];
    for(i=0;i<msNumFaces;i++)
      fread(&msFaces[i], 1, sizeof(sMS3DFace), fp_in);
  }

  // Read groups
  fread(&msNumGroups, 1, sizeof(short), fp_in);
  if(msNumGroups) {
    msGroups = new sMS3DGroup[msNumGroups];
    for(i=0;i<msNumGroups;i++) {
      fread(&msGroups[i], 1, sizeof(msGroups[i].Header), fp_in);
      if((Num = msGroups[i].Header.NumFaces)) {
        msGroups[i].Indices = new unsigned short[Num];
        for(j=0;j<Num;j++)
          fread(&msGroups[i].Indices[j], 1, sizeof(short), fp_in);
      }
      fread(&msGroups[i].Material, 1, sizeof(char), fp_in);

      // Change group material to 0 if none assigned (-1)
      if(msGroups[i].Material == -1)
        msGroups[i].Material = 0;
    }
  }

  // Read materials, creating a default one if none in file
  fread(&msNumMaterials, 1, sizeof(short), fp_in);
  if(!msNumMaterials) {
    // Create a single material and color it white
    msNumMaterials = 1;
    msMaterials = new sMS3DMaterial[1];
    ZeroMemory(&msMaterials[0], sizeof(sMS3DMaterial));
    msMaterials[0].Diffuse[0] = msMaterials[0].Diffuse[1] = msMaterials[0].Diffuse[2] = 1.0f;

    // Set all groups to use material #0
    // If there are no materials, set all groups to 
    // use material #0
    if(msNumGroups) {
      for(i=0;i<msNumGroups;i++)
        msGroups[i].Material = 0;
    }
  } else {
    // Read in all materials from file
    msMaterials = new sMS3DMaterial[msNumMaterials];
    for(i=0;i<msNumMaterials;i++)
      fread(&msMaterials[i], 1, sizeof(sMS3DMaterial), fp_in);
  }

  // Read in FPS, current editor time, and # frames
  fread(&msAnimationFPS, 1, sizeof(float), fp_in);
  fread(&msCurrentTime, 1, sizeof(float), fp_in);
  fread(&msTotalFrames, 1, sizeof(int), fp_in);

  // Read in bones, skipping keyframe data
  fread(&msNumBones, 1, sizeof(short), fp_in);
  if(msNumBones) {
    msBones = new sMS3DBone[msNumBones];
    for(i=0;i<msNumBones;i++) {
      fread(&msBones[i], 1, sizeof(msBones[i].Header), fp_in);

      // Allocate key frames (if any)
      if((Num = msBones[i].Header.NumRotFrames)) {
        msBones[i].RotKeyFrames = new sMS3DKeyFrame[Num]();
        for(j=0;j<Num;j++)
          fread(&msBones[i].RotKeyFrames[j], 1, sizeof(sMS3DKeyFrame), fp_in);
      }

      if((Num=msBones[i].Header.NumPosFrames)) {
        msBones[i].PosKeyFrames = new sMS3DKeyFrame[Num]();
        for(j=0;j<Num;j++)
          fread(&msBones[i].PosKeyFrames[j], 1, sizeof(sMS3DKeyFrame), fp_in);
      }
    }
  }

  // Compile a new vertex list based on vertex information from faces
  // Clip out duplicates and build a face list.
  DWORD NumMeshVertices = 0;
  Vertices = new sMS3DMeshVertex[msNumFaces*3]();
  Faces    = new unsigned short[msNumFaces*3];

  // Clear vertex list data
  for(i=0;i<(DWORD)msNumFaces*3;i++) {
    ZeroMemory(&Vertices[i], sizeof(sMS3DMeshVertex));
    Vertices[i].BoneNum = -2;
  }

  for(i=0;i<msNumFaces;i++) {
    for(j=0;j<3;j++) {
      unsigned short Index = msFaces[i].Indices[j];

      // Allocate a vertex structure and fill it w/data
      sMS3DMeshVertex NewVertex;
      NewVertex.x  = msVertices[Index].Pos[0];
      NewVertex.y  = msVertices[Index].Pos[1];
      NewVertex.z  = -msVertices[Index].Pos[2];
      NewVertex.nx = msFaces[i].Normal[j][0];
      NewVertex.ny = msFaces[i].Normal[j][1];
      NewVertex.nz = -msFaces[i].Normal[j][2];
      NewVertex.u  = msFaces[i].u[j];
      NewVertex.v  = msFaces[i].v[j];
      NewVertex.BoneNum = msVertices[Index].Bone;

      // Search existing list and look for match
      DWORD Match = -1;
      for(k=0;k<(DWORD)msNumFaces*3;k++) {
        if(!memcmp(&Vertices[k], &NewVertex, sizeof(sMS3DMeshVertex))) {
          Match = k;
          break;
        }
      }

      // If no match, then find an empty slot to use and reset index
      if(Match == -1) {
        for(k=0;k<(DWORD)msNumFaces*3;k++) {
          if(Vertices[k].BoneNum == -2) {
            Index = (unsigned short)k;
            memcpy(&Vertices[Index], &NewVertex, sizeof(sMS3DMeshVertex));
            NumMeshVertices++;
            break;
          }
        }
      } else {
        // Use matching index number
        Index = (unsigned short)Match;
      }

      // Store index number in face list
      Faces[i*3+j] = Index;
    }
  }

  // Build the frame hierarchy and combine the transformations
  if(msNumBones) {

    // Allocate array for bone data
    Bones = new sMS3DBoneContainer[msNumBones];

    // Store bone data
    for(i=0;i<msNumBones;i++) {

      // Copy over name and clean it of spaces
      strcpy(Bones[i].Name, msBones[i].Header.Name);
      for(j=0;j<strlen(Bones[i].Name);j++) { 
       if(Bones[i].Name[j] == ' ')
         Bones[i].Name[j] = '_';
      }

      // Create transformation matrix
      CreateYawPitchRollRotationMatrix(&Bones[i].matRotation,
                                       msBones[i].Header.Rotation[1],
                                       msBones[i].Header.Rotation[0],
                                       -msBones[i].Header.Rotation[2]);

      D3DXMatrixTranslation(&Bones[i].matTranslation, 
                            msBones[i].Header.Position[0],
                            msBones[i].Header.Position[1],
                            -msBones[i].Header.Position[2]);
      Bones[i].matTransformation = Bones[i].matRotation * Bones[i].matTranslation;
    }

    // Build hierarchy
    for(i=0;i<msNumBones;i++) {
      
      // Match parent
      if(msBones[i].Header.Parent[0]) {

        // Search for parent
        for(j=0;j<msNumBones;j++) {

          // i = current bone, j = searching bone

          // Compare bone names
          if(!stricmp(msBones[i].Header.Parent, msBones[j].Header.Name)) {
            
            // Link sibling
            Bones[i].Sibling = Bones[j].Child;

            // Link child
            Bones[j].Child = &Bones[i];
          }
        }
      }
    }

    // Calculate combined and inverse combined transformations
    D3DXMATRIX matIdentity;
    D3DXMatrixIdentity(&matIdentity);

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩av不卡在线观看| 亚洲gay无套男同| 免费成人结看片| 欧美另类videos死尸| 亚洲国产日韩一级| 欧美精品色一区二区三区| 成人综合激情网| 国产三级一区二区三区| 国产精品123区| 国产精品久久久久一区| 99久久久无码国产精品| 亚洲精品久久嫩草网站秘色| 在线一区二区三区四区五区| 亚洲妇熟xx妇色黄| 《视频一区视频二区| 欧美天天综合网| 免费成人小视频| 亚洲香肠在线观看| 国产精品成人免费| 国产欧美日韩久久| 欧洲在线/亚洲| 精品一区二区三区视频在线观看| 久久亚洲捆绑美女| www.视频一区| 日本亚洲最大的色成网站www| 亚洲精品国产a| 亚洲色图欧美激情| 91精品国产麻豆国产自产在线| 乱一区二区av| 中文字幕一区免费在线观看| 久久精品日韩一区二区三区| 欧美mv日韩mv亚洲| 97se亚洲国产综合自在线不卡| 国产成人午夜高潮毛片| 国产一区二区三区黄视频 | 欧美性xxxxxxxx| 精品国产免费人成电影在线观看四季| 懂色av一区二区三区免费看| 亚洲一区在线电影| 久久久久综合网| 欧美另类高清zo欧美| 欧美日韩免费在线视频| 风间由美一区二区av101| 国产成人av电影免费在线观看| 国产精品一卡二卡在线观看| 亚洲大型综合色站| 无码av中文一区二区三区桃花岛| 亚洲国产高清在线| 91精品国产乱码久久蜜臀| 制服丝袜日韩国产| 91天堂素人约啪| 国产在线播放一区二区三区 | a在线播放不卡| 成人av电影在线网| 国产精品中文字幕日韩精品| 国产黄色精品视频| 99国产精品一区| 在线欧美日韩国产| 91精品国产综合久久婷婷香蕉| 欧美一级一区二区| 国产欧美日韩视频一区二区| 136国产福利精品导航| 亚洲高清免费在线| 免费一级片91| 粉嫩av一区二区三区| 91麻豆精品一区二区三区| 欧美在线视频日韩| 日韩欧美电影一二三| 欧美视频你懂的| 日韩精品一区二区三区四区| 国产亚洲欧美日韩在线一区| 亚洲精品日韩综合观看成人91| 午夜精品123| 国模少妇一区二区三区| 麻豆精品一区二区| 日本不卡的三区四区五区| 国产麻豆91精品| 中文无字幕一区二区三区| 欧美日韩亚洲另类| 欧美精品一区二区三区在线播放| 中文字幕av一区二区三区免费看 | 亚洲天堂av一区| 石原莉奈在线亚洲三区| 亚洲国产精品一区二区久久| 日本成人在线视频网站| 成人免费观看视频| 在线播放国产精品二区一二区四区 | 一区二区三区不卡在线观看| 综合久久综合久久| 蜜桃91丨九色丨蝌蚪91桃色| av中文字幕不卡| 欧美一区二区免费观在线| 国产精品卡一卡二| 蜜桃av一区二区在线观看| 91视频一区二区三区| 精品卡一卡二卡三卡四在线| 一区二区三区在线免费播放| 国产精品影音先锋| 欧美日韩成人综合天天影院| 制服.丝袜.亚洲.中文.综合| 亚洲天堂免费看| 狠狠色狠狠色合久久伊人| 在线观看日韩电影| 国产精品免费av| 激情综合网激情| 亚洲色图欧美偷拍| 韩国视频一区二区| 欧美美女网站色| 亚洲伦理在线精品| 成人亚洲一区二区一| 日韩美女主播在线视频一区二区三区 | 成人在线一区二区三区| 欧美一区二区三区的| 亚洲精品日产精品乱码不卡| 国产v综合v亚洲欧| 26uuu国产在线精品一区二区| 日韩中文欧美在线| 欧美三级在线视频| 亚洲精品国久久99热| 99国产精品国产精品久久| 久久久久久久久97黄色工厂| 久久精品国产亚洲a| 欧美人狂配大交3d怪物一区| 一区二区三区中文字幕| 99久久婷婷国产综合精品 | 精品国产乱码久久久久久久| 日韩制服丝袜先锋影音| 欧美三级韩国三级日本一级| 一区二区三区四区在线播放| 99riav久久精品riav| 国产精品欧美精品| 波波电影院一区二区三区| 国产欧美中文在线| 国产成人精品亚洲日本在线桃色| 欧美tk丨vk视频| 欧美日韩国产a| 五月婷婷激情综合网| 欧美喷潮久久久xxxxx| 日韩综合一区二区| 日韩一区二区三区免费观看 | 天天综合日日夜夜精品| 在线观看免费视频综合| 亚洲综合在线视频| 欧美综合色免费| 午夜亚洲国产au精品一区二区| 欧美精品日韩一区| 久久国产精品一区二区| 久久久精品国产免费观看同学| 国产精品亚洲第一区在线暖暖韩国| 久久久九九九九| 成人av网址在线| 成人免费在线视频| 欧美视频第二页| 男女视频一区二区| 久久久久久久久97黄色工厂| 成人动漫视频在线| 一区二区三区精品在线观看| 欧美喷潮久久久xxxxx| 久久精品国产成人一区二区三区| 久久久综合九色合综国产精品| 成人免费视频视频| 亚洲国产aⅴ成人精品无吗| 91精品国产高清一区二区三区蜜臀| 久久超碰97人人做人人爱| 久久久精品国产免大香伊| 99综合电影在线视频| 日韩中文字幕1| 国产三级精品三级| 欧美亚洲国产一卡| 精品一区二区三区在线观看| 国产精品欧美经典| 欧美日韩国产免费一区二区| 国产美女精品人人做人人爽| 一区二区三区四区中文字幕| 欧美r级电影在线观看| 91视频在线观看| 麻豆国产欧美日韩综合精品二区| 欧美国产日韩在线观看| 精品污污网站免费看| 国产精品一区二区久久不卡 | 韩国成人在线视频| 一区二区三区加勒比av| 精品日韩成人av| 91成人网在线| 国产成人免费视频网站| 午夜av电影一区| 中文字幕一区av| 日韩欧美中文字幕制服| 91麻豆免费看片| 国产成人午夜电影网| 五月婷婷综合网| |精品福利一区二区三区| 精品少妇一区二区三区免费观看| 色综合天天综合网天天看片| 成人免费一区二区三区在线观看| 欧美大片在线观看一区二区| 日本黄色一区二区| 国产 日韩 欧美大片| 另类欧美日韩国产在线| 亚洲va韩国va欧美va精品|