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

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

?? winmain.cpp

?? 用DirectX制作高級動(dòng)畫-[Advanced.Animation.with.DirectX]
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
/*
  Make sure you have the /J compiler switch in your project settings!
  The /J switch ensures chars are unsigned by default.
*/

#include <windows.h>
#include <stdio.h>
#include "d3d9.h"
#include "d3dx9.h"
#include "resource.h"
#include "MD2.h"
#include "MS3D.h"

// Window class
char g_szClass[] = "MESHCONV";

// Open/save filename structures and buffers
OPENFILENAME g_ofn, g_sfn;
char g_MD2Filename[MAX_PATH];
char g_MS3DFilename[MAX_PATH];
char g_XFilename[MAX_PATH];
char g_TextureFilename[MAX_PATH];

// Function prototypes
int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int nCmdShow);
long FAR PASCAL WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

BOOL ConvertMD2(char *SrcFilename, char *TextureFilename, char *DestFilename);
BOOL ConvertMS3D(char *SrcFilename, char *DestFilename);
void WriteFrame(sMS3DBoneContainer *Bone, FILE *fp, DWORD Indent, BOOL Close);
void CombineTransformation(sMS3DBoneContainer *Bone, D3DXMATRIX *Matrix);
void CreateYawPitchRollRotationMatrix(D3DXMATRIX *matRotation,
                                      float Yaw, float Pitch, float Roll);

// Application //////////////////////////////////////////////////////
int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int nCmdShow)
{
  WNDCLASS wc;
  MSG      Msg;

  // Register window class
  wc.style         = CS_HREDRAW | CS_VREDRAW;
  wc.lpfnWndProc   = WindowProc;
  wc.cbClsExtra    = 0;
  wc.cbWndExtra    = DLGWINDOWEXTRA;
  wc.hInstance     = hInst;
  wc.hIcon         = LoadIcon(hInst, IDI_APPLICATION);
  wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
  wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
  wc.lpszMenuName  = NULL;
  wc.lpszClassName = g_szClass;
  RegisterClass(&wc);

  // Create the dialog box window and show it
  HWND hWnd = CreateDialog(hInst, MAKEINTRESOURCE(IDD_CONVERSION), 0, NULL);
  UpdateWindow(hWnd);
  ShowWindow(hWnd, nCmdShow);

  // Setup open filename data structure
  ZeroMemory(&g_ofn, sizeof(OPENFILENAME));
  g_ofn.lStructSize   = sizeof(OPENFILENAME);
  g_ofn.hInstance     = hInst;
  g_ofn.hwndOwner     = hWnd;
  g_ofn.nMaxFile      = MAX_PATH;
  g_ofn.nMaxFileTitle = MAX_PATH;
  g_ofn.Flags         = OFN_HIDEREADONLY;

  // Setup save filename data structure
  ZeroMemory(&g_sfn, sizeof(OPENFILENAME));
  g_sfn.lStructSize   = sizeof(OPENFILENAME);
  g_sfn.hInstance     = hInst;
  g_sfn.hwndOwner     = hWnd;
  g_sfn.nMaxFile      = MAX_PATH;
  g_sfn.nMaxFileTitle = MAX_PATH;
  g_sfn.Flags         = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;
  g_sfn.lpstrDefExt   = "x";
  g_sfn.lpstrFile     = g_XFilename;
  g_sfn.lpstrTitle    = "Select .X file";
  g_sfn.lpstrFilter   = ".X files (*.X)\0*.x\0All files (*.*)\0*.*\0\0";

  // Clear filenames
  g_MD2Filename[0] = g_MS3DFilename[0] = g_XFilename[0] = 0;

  // Message loop
  while(GetMessage(&Msg, NULL, 0, 0)) {
    TranslateMessage(&Msg);
    DispatchMessage(&Msg);
  }

  // Clean up
  UnregisterClass(g_szClass, hInst);

  return 0;
}

LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
  switch(uMsg) {

    case WM_COMMAND:

      switch(LOWORD(wParam)) {

        // Convert .MD2 to .X
        case IDC_CONVERTMD2:

          // Get the source filename
          g_ofn.lpstrDefExt = "md2";
          g_ofn.lpstrFile   = g_MD2Filename;
          g_ofn.lpstrTitle  = "Select .MD2 file";
          g_ofn.lpstrFilter = ".MD2 files (*.MD2)\0*.md2\0All files (*.*)\0*.*\0\0";
          if(!GetOpenFileName(&g_ofn))
            break;

          // Get texture filename
          g_ofn.lpstrDefExt = "bmp";
          g_ofn.lpstrFile   = g_TextureFilename;
          g_ofn.lpstrTitle  = "Select texture file";
          g_ofn.lpstrFilter = ".bmp files (*.bmp)\0*.bmp\0All files (*.*)\0*.*\0\0";
          if(!GetOpenFileName(&g_ofn))
            break;

          // Get the destination filename
          if(!GetSaveFileName(&g_sfn))
            break;

          // Do file conversion
          if(ConvertMD2(g_MD2Filename, g_TextureFilename, g_XFilename) == TRUE)
            MessageBox(hWnd, "Conversion complete!", "Success", MB_OK);
          else
            MessageBox(hWnd, "Conversion failed!", "Failure", MB_OK);

          break;

        // Convert .MS3D to .X
        case IDC_CONVERTMS3D:

          // Get the source filename
          g_ofn.lpstrDefExt = "ms3d";
          g_ofn.lpstrFile   = g_MS3DFilename;
          g_ofn.lpstrTitle  = "Select .MS3D file";
          g_ofn.lpstrFilter = ".MS3D files (*.MS3D)\0*.ms3d\0All files (*.*)\0*.*\0\0";
          if(!GetOpenFileName(&g_ofn))
            break;

          // Get the destination filename
          if(!GetSaveFileName(&g_sfn))
            break;

          // Do file conversion
          if(ConvertMS3D(g_MS3DFilename, g_XFilename) == TRUE)
            MessageBox(hWnd, "Conversion complete!", "Success", MB_OK);
          else
            MessageBox(hWnd, "Conversion failed!", "Failure", MB_OK);

          break;

      }
      break;

    case WM_DESTROY:
      PostQuitMessage(0);
      break;

    default: return DefWindowProc(hWnd, uMsg, wParam, lParam);
  }

  return 0;
}

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

  sMD2Header        mdHeader;

  char             *mdFrame;
  sMD2Frame        *mdFramePtr;
  sMD2FrameVertex  *mdVertexPtr;

  sMD2TextureCoord *mdTextureCoords = NULL;
  sMD2Face         *mdFaces = NULL;

  char             *MeshNames = NULL;
  sMD2MeshVertex   *Vertices = NULL;
  unsigned short   *Indices = NULL;

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

  // Get pointer to local texture filename
  char *TextureFilenamePtr = strrchr(TextureFilename, '\\');
  if(!TextureFilenamePtr)
    TextureFilenamePtr = TextureFilename;
  else
    TextureFilenamePtr++;

  // 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 MorphAnimationKey\r\n");
  fprintf(fp_out, "{\r\n");
  fprintf(fp_out, "  <2746B58A-B375-4cc3-8D23-7D094D3C7C67>\r\n");
  fprintf(fp_out, "  DWORD  Time;        // Key's time\r\n");
  fprintf(fp_out, "  STRING MeshName;    // Mesh to use (name reference)\r\n");
  fprintf(fp_out, "}\r\n");
  fprintf(fp_out, "\r\n");
  fprintf(fp_out, "template MorphAnimationSet\r\n");
  fprintf(fp_out, "{\r\n");
  fprintf(fp_out, "  <0892DE81-915A-4f34-B503-F7C397CB9E06>\r\n");
  fprintf(fp_out, "  DWORD Loop;     // 0=don't loop, 1=loop\r\n");
  fprintf(fp_out, "  DWORD NumKeys;  // # keys in animation\r\n");
  fprintf(fp_out, "  array MorphAnimationKey Keys[NumKeys];\r\n");
  fprintf(fp_out, "}\r\n");
  fprintf(fp_out, "\r\n");

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

  // Read the .MD2 file header and make sure it's valid
  fread(&mdHeader, 1, sizeof(sMD2Header), fp_in);
  if(mdHeader.Signature != 0x32504449 || mdHeader.Version != 8) {
    fclose(fp_in);
    fclose(fp_out);
    return FALSE;
  }

  /////////////////////////////////////////
  //
  // Parse model data
  //
  /////////////////////////////////////////

  // Load texture coordinates /////////////////////////////
  if(mdHeader.NumTextureCoords) {
    mdTextureCoords = new sMD2TextureCoord[mdHeader.NumTextureCoords];
    fseek(fp_in, mdHeader.OffsetTextureCoords, SEEK_SET);
    fread(mdTextureCoords, 1, mdHeader.NumTextureCoords * sizeof(sMD2TextureCoord), fp_in);
  }

  // Load face data ///////////////////////////////////////
  if(mdHeader.NumFaces) {
    mdFaces = new sMD2Face[mdHeader.NumFaces];
    fseek(fp_in, mdHeader.OffsetFaces, SEEK_SET);
    fread(mdFaces, 1, mdHeader.NumFaces * sizeof(sMD2Face), fp_in);
  }

  // Allocate a temporary frame structure
  mdFrame = new char[mdHeader.FrameSize];
  mdFramePtr = (sMD2Frame*)mdFrame;

  // Store mesh values in local variables
  DWORD NumVertices  = mdHeader.NumFaces * 3;
  DWORD NumFaces     = mdHeader.NumFaces;

  // Allocate vertex and index buffers
  Vertices = new sMD2MeshVertex[NumVertices];
  Indices  = new unsigned short[NumFaces*3];

  // Allocate space for mesh names
  MeshNames = new char[16 * mdHeader.NumFrames];

  // Jump to frame data in file and begin reading in each frame
  fseek(fp_in, mdHeader.OffsetFrames, SEEK_SET);
  for(DWORD i=0;i<mdHeader.NumFrames;i++) {

    // Read in the frame (mesh)
    fread(mdFrame, 1, mdHeader.FrameSize, fp_in);

    // Assign a simple name if none already assigned (rarely happens)
    if(!mdFramePtr->Name[0])
      sprintf(mdFramePtr->Name, "NoName%02lu", i);

    // Copy name into mesh name buffer
    memcpy(&MeshNames[16*i], mdFramePtr->Name, 16);

    // Loop and build vertex/index data
    DWORD Num = 0;
    for(DWORD j=0;j<NumFaces;j++) {

      // Three vertices per face
      for(DWORD k=0;k<3;k++) {

        // Get a pointer to the frame vertex structure
        mdVertexPtr = &mdFramePtr->Vertices[mdFaces[j].Indices[k]];

        // Calculate coordinates (note ordering and reversal of x)
        Vertices[Num].x = -((float)mdVertexPtr->Vertex[1] * mdFramePtr->Scale[1] + mdFramePtr->Translate[1]);
        Vertices[Num].y =   (float)mdVertexPtr->Vertex[2] * mdFramePtr->Scale[2] + mdFramePtr->Translate[2];
        Vertices[Num].z =   (float)mdVertexPtr->Vertex[0] * mdFramePtr->Scale[0] + mdFramePtr->Translate[0];

        // Calculate normals
        Vertices[Num].nx = -g_Quake2Normals[mdVertexPtr->LightNormal][1];
        Vertices[Num].ny =  g_Quake2Normals[mdVertexPtr->LightNormal][2];
        Vertices[Num].nz =  g_Quake2Normals[mdVertexPtr->LightNormal][0];

        // Calculate texture coordinates
        Vertices[Num].u = (float)mdTextureCoords[mdFaces[j].TextureCoords[k]].u / (float)mdHeader.SkinWidth;
        Vertices[Num].v = (float)mdTextureCoords[mdFaces[j].TextureCoords[k]].v / (float)mdHeader.SkinHeight;

        // Store face order
        Indices[Num] = (unsigned short)Num;

        // Go to next vertex
        Num++;
      }
    }

    // Write out mesh header
    fprintf(fp_out, "Mesh %s {\r\n", mdFramePtr->Name);

    // Write out # vertices and write out vertex coordinates
    fprintf(fp_out, "  %lu;\r\n", NumVertices);
    for(j=0;j<NumVertices;j++) {
      fprintf(fp_out, "  %06lf;%06lf;%06lf;", Vertices[j].x, Vertices[j].y, Vertices[j].z);
      if(j < (NumVertices-1))
        fprintf(fp_out, ",\r\n");
      else
        fprintf(fp_out, ";\r\n");
    }

    // Write out # of faces and write out face data
    fprintf(fp_out, "  %lu;\r\n", NumFaces);
    for(j=0;j<NumFaces;j++) {
      fprintf(fp_out, "  3;%lu,%lu,%lu;", Indices[j*3], Indices[j*3+1], Indices[j*3+2]);
      if(j < (NumFaces-1))
        fprintf(fp_out, ",\r\n");
      else
        fprintf(fp_out, ";\r\n\r");
    }

    // Write normal data
    fprintf(fp_out, "  MeshNormals {\r\n");
    fprintf(fp_out, "    %lu;\r\n", NumVertices);
    for(j=0;j<NumVertices;j++) {
      fprintf(fp_out, "    %06lf;%06lf;%06lf;", Vertices[j].nx, Vertices[j].ny, Vertices[j].nz);
      if(j < (NumVertices-1))
        fprintf(fp_out, ",\r\n");
      else
        fprintf(fp_out, ";\r\n");
    }
    fprintf(fp_out, "    %lu;\r\n", NumFaces);
    for(j=0;j<NumFaces;j++) {
      fprintf(fp_out, "    3;%lu,%lu,%lu;", Indices[j*3], Indices[j*3+1], Indices[j*3+2]);
      if(j < (NumFaces-1))
        fprintf(fp_out, ",\r\n");
      else
        fprintf(fp_out, ";\r\n");
    }
    fprintf(fp_out, "  }\r\n");

    // Write texture coordinates
    fprintf(fp_out, "  MeshTextureCoords {\r\n");
    fprintf(fp_out, "    %lu;\r\n", NumVertices);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合色综合色综合色综合色综合| 另类专区欧美蜜桃臀第一页| 国产精品自拍三区| 精品剧情在线观看| 国产真实乱偷精品视频免| 久久精品无码一区二区三区| 国产精品一区二区久激情瑜伽 | 99re这里只有精品首页| 国产精品久久久久久久午夜片| 风间由美一区二区三区在线观看| 国产精品女同一区二区三区| 91在线观看免费视频| 亚洲综合在线第一页| 欧美一级理论性理论a| 国内精品自线一区二区三区视频| 久久久五月婷婷| av电影在线观看一区| 亚洲国产一二三| 欧美xingq一区二区| 成人午夜免费视频| 亚洲成人综合视频| 26uuu精品一区二区| 播五月开心婷婷综合| 一区二区三区日韩在线观看| 制服丝袜成人动漫| 处破女av一区二区| 天天操天天色综合| 日本一区二区三区久久久久久久久不| 色综合久久久久综合99| 免费成人在线网站| 1区2区3区国产精品| 亚洲一区二区三区美女| 精品国产91久久久久久久妲己 | 亚洲风情在线资源站| 精品88久久久久88久久久| 91蜜桃免费观看视频| 久久成人麻豆午夜电影| 亚洲日穴在线视频| 久久老女人爱爱| 欧美日韩精品欧美日韩精品一 | 亚洲成人av一区二区| 久久久精品国产免费观看同学| 色婷婷av一区| 国产 欧美在线| 婷婷六月综合亚洲| 综合激情成人伊人| 久久青草欧美一区二区三区| 欧美日韩三级一区| 99久久精品99国产精品 | 国产一区二区剧情av在线| 一区二区三区不卡视频在线观看| 久久免费精品国产久精品久久久久| 在线精品视频一区二区三四| 国产麻豆日韩欧美久久| 全部av―极品视觉盛宴亚洲| 亚洲美女视频一区| 国产精品蜜臀av| 亚洲精品在线电影| 91精品国产一区二区三区蜜臀| 一本一道久久a久久精品| 丁香五精品蜜臀久久久久99网站| 免费成人在线视频观看| 丝袜亚洲精品中文字幕一区| 亚洲精品少妇30p| 中文字幕一区二区三区色视频| 精品国产乱码久久久久久牛牛| 欧美蜜桃一区二区三区| 在线观看精品一区| 91精彩视频在线观看| 99精品欧美一区| 成人久久视频在线观看| 国产精品一二二区| 国产一区二区不卡老阿姨| 另类小说一区二区三区| 日韩av二区在线播放| 五月天亚洲精品| 亚洲成av人片一区二区| 亚洲国产日日夜夜| 午夜视频一区二区| 性做久久久久久久久| 午夜成人在线视频| 日韩电影在线一区| 人人爽香蕉精品| 精品在线视频一区| 国产美女一区二区| 成人午夜碰碰视频| 色综合久久66| 亚洲欧洲一区二区三区| 日韩伦理av电影| 一区二区成人在线观看| 亚洲国产欧美另类丝袜| 爽好久久久欧美精品| 日本不卡中文字幕| 国产一区二区三区四| 福利一区二区在线观看| 97精品国产97久久久久久久久久久久 | 欧美视频一二三区| 欧美一区二区在线观看| 精品久久久久久久人人人人传媒| www激情久久| 国产精品久久精品日日| 亚洲一区二区综合| 美女诱惑一区二区| 高清成人免费视频| 欧美亚洲动漫精品| 日韩精品一区二区三区中文精品| 久久久久久久久一| 亚洲老妇xxxxxx| 日韩高清在线一区| 国产精品一级黄| 欧洲国产伦久久久久久久| 日韩一区二区不卡| 国产精品色一区二区三区| 亚洲精品免费看| 免费观看在线综合色| 成人一道本在线| 欧美三级中文字幕在线观看| 精品国产乱码久久久久久闺蜜| 欧美韩国日本综合| 欧美自拍偷拍一区| 日韩欧美国产成人一区二区| 国产精品久久久久久户外露出 | 欧美亚洲国产一区二区三区va| 欧美一级二级三级蜜桃| 国产精品女人毛片| 免费看精品久久片| 91在线观看视频| 久久综合网色—综合色88| 亚洲靠逼com| 黑人精品欧美一区二区蜜桃| 91在线小视频| 欧美精品一区二区三区高清aⅴ| 亚洲欧洲制服丝袜| 国产在线视频不卡二| 欧美日韩黄视频| 亚洲欧美自拍偷拍| 国产一区二区视频在线播放| 欧美私模裸体表演在线观看| 国产日产精品一区| 麻豆91免费观看| 色婷婷综合激情| 国产精品三级电影| 久久不见久久见免费视频7| 欧美色手机在线观看| 国产精品青草久久| 国产精品亚洲一区二区三区妖精| 欧美日韩亚洲综合在线| 亚洲免费资源在线播放| 国产凹凸在线观看一区二区| 日韩视频一区二区在线观看| 亚洲午夜在线观看视频在线| 波多野结衣精品在线| 久久久99精品免费观看不卡| 全部av―极品视觉盛宴亚洲| 欧美日韩在线直播| 亚洲另类在线一区| 91啪九色porn原创视频在线观看| 国产欧美视频一区二区三区| 极品少妇xxxx精品少妇偷拍| 欧美一区二区三区啪啪| 五月综合激情婷婷六月色窝| 欧美日韩一区成人| 亚洲午夜在线电影| 欧美日韩国产美女| 亚洲国产成人tv| 在线视频亚洲一区| 亚洲影视在线播放| 欧美亚洲高清一区| 91农村精品一区二区在线| 国产精品视频免费| caoporm超碰国产精品| 国产精品乱码妇女bbbb| 成人黄色a**站在线观看| 国产欧美日韩精品a在线观看| 国产成人在线免费观看| 国产日韩精品一区| av高清久久久| 一区二区三区欧美日| 欧美在线观看视频一区二区| 亚洲午夜在线视频| 欧美一区二区在线免费观看| 日韩电影一区二区三区四区| 日韩免费高清视频| 国产精品一区免费在线观看| 国产日韩精品一区二区浪潮av | 欧美丰满一区二区免费视频| 视频一区二区不卡| 欧美成人免费网站| 国产一区二区毛片| 国产精品免费久久久久| 在线影院国内精品| 日本在线观看不卡视频| 精品国产乱码久久久久久浪潮| 国产suv精品一区二区6| 中文字幕一区av| 欧美欧美午夜aⅴ在线观看| 免费av网站大全久久| 久久久91精品国产一区二区精品| 成人av在线影院| 午夜成人免费电影|