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

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

?? winmain.cpp

?? 用DirectX制作高級動畫-[Advanced.Animation.with.DirectX]
?? CPP
字號:
#include <stdio.h>
#include <windows.h>

#include "d3d9.h"
#include "d3dx9.h"
#include "Direct3D.h"
#include "Cloth.h"
#include "softbody.h"

// Karate master's meshes and softbody object
D3DXMESHCONTAINER_EX *g_Master = NULL;
D3DXMESHCONTAINER_EX *g_Chest  = NULL;
cSoftbodyMesh         g_Softbody;
D3DXVECTOR3           g_vecPosition = D3DXVECTOR3(0.0f, 0.0f, 0.0f);
D3DXVECTOR3           g_vecOrientation = D3DXVECTOR3(0.0f, 0.0f, 0.0f);

// Direct3D objects
IDirect3D9       *g_pD3D       = NULL;
IDirect3DDevice9 *g_pD3DDevice = NULL;

// Background vertex structure, fvf, vertex buffer, and texture
typedef struct {
  float x, y, z, rhw;
  float u, v;
} sBackdropVertex;
#define BACKDROPFVF (D3DFVF_XYZRHW | D3DFVF_TEX1)
IDirect3DVertexBuffer9 *g_BackdropVB = NULL;
IDirect3DTexture9      *g_BackdropTexture = NULL;

// Window class and caption text
char g_szClass[]   = "SoftbodyClass";
char g_szCaption[] = "Softbody Demo by Jim Adams";

// 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 DoInit(HWND hWnd);
void DoShutdown();
void DoFrame();

int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int nCmdShow)
{
  WNDCLASSEX wcex;
  MSG        Msg;
  HWND       hWnd;

  // Initialize the COM system
  CoInitialize(NULL);

  // Create the window class here and register it
  wcex.cbSize        = sizeof(wcex);
  wcex.style         = CS_CLASSDC;
  wcex.lpfnWndProc   = WindowProc;
  wcex.cbClsExtra    = 0;
  wcex.cbWndExtra    = 0;
  wcex.hInstance     = hInst;
  wcex.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
  wcex.hCursor       = LoadCursor(NULL, IDC_ARROW);
  wcex.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
  wcex.lpszMenuName  = NULL;
  wcex.lpszClassName = g_szClass;
  wcex.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);
  if(!RegisterClassEx(&wcex))
    return FALSE;

  // Create the main window
  hWnd = CreateWindow(g_szClass, g_szCaption,
              WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,
              0, 0, 640, 480,
              NULL, NULL, hInst, NULL);
  if(!hWnd)
    return FALSE;
  ShowWindow(hWnd, SW_NORMAL);
  UpdateWindow(hWnd);

  // Call init function and enter message pump
  if(DoInit(hWnd) == TRUE) {

    // Start message pump, waiting for user to exit
    ZeroMemory(&Msg, sizeof(MSG));
    while(Msg.message != WM_QUIT) {
      if(PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE)) {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
      }

      // Render a single frame
      DoFrame();
    }
  }

  // Call shutdown
  DoShutdown();

  // Unregister the window class
  UnregisterClass(g_szClass, hInst);

  // Shut down the COM system
  CoUninitialize();

  return 0;
}

long FAR PASCAL WindowProc(HWND hWnd, UINT uMsg,              \
                           WPARAM wParam, LPARAM lParam)
{
  // Only handle window destruction messages
  switch(uMsg) {
    case WM_DESTROY:
      PostQuitMessage(0);
      break;

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

  return 0;
}

BOOL DoInit(HWND hWnd)
{
  // Initialize Direct3D
  InitD3D(&g_pD3D, &g_pD3DDevice, hWnd);

  // Load the master's mesh
  LoadMesh(&g_Master, g_pD3DDevice, "..\\Data\\karatemaster.x", "..\\Data\\");

  // Load the chest mesh
  LoadMesh(&g_Chest, g_pD3DDevice, "..\\Data\\chest.x", "..\\Data\\");

  // Create softbody mesh data
  g_Softbody.Create(g_Chest->MeshData.pMesh, "..\\Data\\chest.x");

  // Create the backdrop
  sBackdropVertex BackdropVerts[4] = {
    {   0.0f,   0.0, 1.0, 1.0f, 0.0f, 0.0f },
    { 640.0f,   0.0, 1.0, 1.0f, 1.0f, 0.0f },
    {   0.0f, 480.0, 1.0, 1.0f, 0.0f, 1.0f },
    { 640.0f, 480.0, 1.0, 1.0f, 1.0f, 1.0f }
  };
  g_pD3DDevice->CreateVertexBuffer(sizeof(BackdropVerts), D3DUSAGE_WRITEONLY, BACKDROPFVF, D3DPOOL_DEFAULT, &g_BackdropVB, NULL);
  char *Ptr;
  g_BackdropVB->Lock(0,0, (void**)&Ptr, 0);
  memcpy(Ptr, BackdropVerts, sizeof(BackdropVerts));
  g_BackdropVB->Unlock();
  D3DXCreateTextureFromFile(g_pD3DDevice, "..\\Data\\dojo.bmp", &g_BackdropTexture);

  // Create and enable a directional light
  D3DLIGHT9 Light;
  ZeroMemory(&Light, sizeof(Light));
  Light.Type = D3DLIGHT_DIRECTIONAL;
  Light.Diffuse.r = Light.Diffuse.g = Light.Diffuse.b = Light.Diffuse.a = 1.0f;
  D3DXVECTOR3 vecLight = D3DXVECTOR3(0.0f, -0.5f, 1.0f);
  D3DXVec3Normalize(&vecLight, &vecLight);
  Light.Direction = vecLight;
  g_pD3DDevice->SetLight(0, &Light);
  g_pD3DDevice->LightEnable(0, TRUE);

  return TRUE;
}

void DoShutdown()
{
  // Release Backdrop data
  ReleaseCOM(g_BackdropVB);
  ReleaseCOM(g_BackdropTexture);

  // Free the softbody mesh
  g_Softbody.Free();

  // Free meshes
  delete g_Chest;
  delete g_Master;

  // Shutdown Direct3D
  ReleaseCOM(g_pD3DDevice);
  ReleaseCOM(g_pD3D);
}

void DoFrame()
{
  static DWORD LastTime = timeGetTime()-1;
  DWORD ThisTime = timeGetTime();
  BOOL DontResolve;
  D3DXMATRIX matWorld;
  D3DXVECTOR3 vecGravity = D3DXVECTOR3(0.0f, 0.0f, 0.0f);
  static DWORD Cycle = 0;
  static BOOL PlayYAHSound = FALSE;  // Flag to play a YAH! sound
  static BOOL PlayHitSound = FALSE;  // Flag to play a hit sound
  
  // Calculate elapsed time
  DWORD Elapsed = ThisTime - LastTime;
  LastTime = ThisTime;

  // The following bit of code is a little sloppy. Basically it 
  // calculates the position and orientation of the meshes based
  // on the amount of time elapsed (kept count in Cycle). The
  // Cycle value is used to keyframe the position and orientations,
  // as well as set a flag to transform the softbody mesh and
  // apply a bit of gravity.

  // Position and orient meshes based on cycled time
  
  // 0 to 999 milliseconds
  if(Cycle < 1000) {

    // Reset the softbody mesh at start of cycle animation
    if(!Cycle)
      g_Softbody.Reset();

    // Stand still - don't move or rotate
    // Make sure softbody mesh transforms with mesh
    g_vecPosition.z = 10.0f;
    g_vecOrientation.y = -1.57f;
    DontResolve = TRUE;

    // Clear flag to play sound coming up
    PlayYAHSound = FALSE;
    PlayHitSound = FALSE;

  } else

  // 1000 to 1499 milliseconds
  if(Cycle < 1500) {
    
    // Play a sound the first time this cycle is processed
    if(PlayYAHSound == FALSE) {
      PlayYAHSound = TRUE;
      PlaySound("..\\Data\\YAH.wav", NULL, SND_FILENAME | SND_ASYNC);
    }

    // Come towards camera - move and rotation
    // Make sure softbody mesh transforms with mesh
    // Apply a small bit of gravity to help softbody animation
    g_vecPosition.z = 10.0f - (((float)Cycle - 1000.0f) / 50.0f);
    g_vecOrientation.y = -1.57f + (float)(Cycle-1000) * 0.00314f;
    DontResolve = TRUE;
    vecGravity = D3DXVECTOR3(0.0f, -0.1f, 0.0f);

  } else

  // 1500 to 2999 milliseconds
  if(Cycle < 3000) {

    // Play a sound the first time this cycle is processed
    if(PlayHitSound == FALSE) {
      PlayHitSound = TRUE;
      PlaySound("..\\Data\\Hit.wav", NULL, SND_FILENAME | SND_ASYNC);
    }
    // Stand still - don't move or rotate
    // Make sure softbody mesh transform on its own
    g_vecPosition.z = 0.0f;
    g_vecOrientation.y = 0.0f;
    DontResolve = FALSE;

  } else

  // 3000 to 3999 milliseconds
  if(Cycle < 4000) {

    // Move back to starting position - move and rotate
    // Make sure softbody mesh transforms with mesh
    g_vecPosition.z = (((float)Cycle - 3000.0f) / 100.0f);
    g_vecOrientation.y = -(float)(Cycle-3000) * 0.00157f;
    DontResolve = TRUE;

  } 

  // Increase cycle time elased
  Cycle += Elapsed;

  // Reset animation cycle if past 4000 ms
  if(Cycle >= 4000)
    Cycle = 0;

  // Calculate a view transformation matrix
  D3DXMATRIX matView;
  D3DXMatrixLookAtLH(&matView,
                     &D3DXVECTOR3(0.0f, 6.0f, -8.0f),
                     &D3DXVECTOR3(0.0f, 6.0f, 0.0f),
                     &D3DXVECTOR3(0.0f, 1.0f, 0.0f));
  g_pD3DDevice->SetTransform(D3DTS_VIEW, &matView);

  // Set the Softbody's forces for simulation (during last cycle)
  // Only use rotation here and draw it later on using only translation
  D3DXMatrixRotationYawPitchRoll(&matWorld, g_vecOrientation.y, g_vecOrientation.x, g_vecOrientation.z);
  g_Softbody.SetForces(-0.05f, &vecGravity, NULL, &matWorld, DontResolve);

  // Revert the softbody mesh
  g_Softbody.Revert(0.3f, &matWorld);

  // Process the forces
  g_Softbody.ProcessForces((float)Elapsed / 1000.0f * 4.0f);

  // Rebuild the Softbody mesh
  g_Softbody.RebuildMesh(g_Chest->MeshData.pMesh);

  // Clear the device and start drawing the scene
  g_pD3DDevice->Clear(NULL, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_RGBA(0,0,64,255), 1.0, 0);
  if(SUCCEEDED(g_pD3DDevice->BeginScene())) {

    // Draw the backdrop
    g_pD3DDevice->SetFVF(BACKDROPFVF);
    g_pD3DDevice->SetStreamSource(0, g_BackdropVB, 0, sizeof(sBackdropVertex));
    g_pD3DDevice->SetTexture(0, g_BackdropTexture);
    g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);

    // Turn on lighting
    g_pD3DDevice->SetRenderState(D3DRS_LIGHTING, TRUE);

    // Render the master
    D3DXMatrixRotationYawPitchRoll(&matWorld, g_vecOrientation.y, g_vecOrientation.x, g_vecOrientation.z);
    matWorld._41 = g_vecPosition.x;
    matWorld._42 = g_vecPosition.y;
    matWorld._43 = g_vecPosition.z;
    g_pD3DDevice->SetTransform(D3DTS_WORLD, &matWorld);
    DrawMesh(g_Master);

    // Draw the softbody mesh (chest)
    D3DXMatrixTranslation(&matWorld, g_vecPosition.x, g_vecPosition.y, g_vecPosition.z);
    g_pD3DDevice->SetTransform(D3DTS_WORLD, &matWorld);
    DrawMesh(g_Chest);

    // Turn off lighting
    g_pD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE);

    // End the scene
    g_pD3DDevice->EndScene();
  }

  // Present the scene to the user
  g_pD3DDevice->Present(NULL, NULL, NULL, NULL);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品日韩在线一区| 国产午夜精品福利| 激情文学综合网| 亚洲三级在线看| 欧美va在线播放| 91麻豆自制传媒国产之光| 日韩av一区二| 亚洲欧美日韩电影| 欧美精品一区二区三区四区| 色94色欧美sute亚洲线路二| 国产精品中文字幕一区二区三区| 亚洲一区视频在线| 国产精品国产a| 欧美不卡一区二区| 欧美猛男超大videosgay| 成人91在线观看| 国产在线视频一区二区三区| 亚洲成va人在线观看| 国产精品福利一区二区| 久久久久久亚洲综合| 欧美情侣在线播放| 欧美亚洲禁片免费| av成人免费在线| 国产白丝网站精品污在线入口| 石原莉奈在线亚洲三区| 亚洲精品国产第一综合99久久| 国产午夜亚洲精品不卡| 欧美一卡二卡三卡| 欧美日韩一区二区三区免费看 | av影院午夜一区| 国产精品一卡二卡在线观看| 久久激五月天综合精品| 视频一区在线视频| 午夜一区二区三区视频| 亚洲伦理在线免费看| 中文字幕中文字幕一区| 国产精品福利一区二区| 国产精品免费视频一区| 国产日本欧美一区二区| 久久久久久免费网| 久久精品夜色噜噜亚洲aⅴ| 欧美成人在线直播| 精品日产卡一卡二卡麻豆| 亚洲一区二区偷拍精品| 亚洲一区二区四区蜜桃| 亚洲国产精品久久久男人的天堂| 一区二区三区在线观看欧美 | 亚洲人成在线播放网站岛国| 国产精品无遮挡| 欧美高清在线一区| 中文字幕一区二区三区在线观看| 久久九九久久九九| 久久精品人人爽人人爽| 国产日韩欧美制服另类| 国产精品欧美经典| 国产精品嫩草影院av蜜臀| 成人欧美一区二区三区1314| 亚洲日本电影在线| 亚洲最新视频在线观看| 天天色天天爱天天射综合| 污片在线观看一区二区| 麻豆国产精品一区二区三区 | 精品粉嫩aⅴ一区二区三区四区| 26uuu另类欧美| 国产精品久久久久久久久免费相片 | 激情久久久久久久久久久久久久久久| 看电视剧不卡顿的网站| 国产精品亚洲专一区二区三区| 福利电影一区二区三区| 99视频热这里只有精品免费| 欧美在线视频你懂得| 欧美久久久久免费| 久久综合色天天久久综合图片| 亚洲国产精品国自产拍av| 国产黑丝在线一区二区三区| 波多野结衣中文字幕一区二区三区| 在线亚洲精品福利网址导航| 6080午夜不卡| 欧美激情一区二区三区蜜桃视频| 亚洲欧美成人一区二区三区| 青青青爽久久午夜综合久久午夜| 国产原创一区二区| 91久久精品一区二区二区| 欧美一区中文字幕| 成人免费在线播放视频| 日韩一区精品视频| 成人午夜av影视| 在线播放欧美女士性生活| 国产日韩欧美在线一区| 一区二区三区国产精华| 韩国av一区二区三区在线观看| 91视频国产资源| 日韩欧美专区在线| 18成人在线视频| 另类综合日韩欧美亚洲| 91国产视频在线观看| 2021国产精品久久精品| 亚洲精品免费看| 国产高清成人在线| 欧美女孩性生活视频| 国产精品国产三级国产aⅴ入口| 欧美一区二区在线看| 国产精品电影一区二区三区| 免费日本视频一区| 91成人在线精品| 欧美国产精品一区二区三区| 日韩综合在线视频| 日本高清成人免费播放| 久久丝袜美腿综合| 日本不卡中文字幕| 色噜噜狠狠成人网p站| 亚洲国产精品传媒在线观看| 人人爽香蕉精品| 欧美撒尿777hd撒尿| 亚洲欧洲99久久| 国产91精品免费| 精品国产乱码久久久久久久久| 五月综合激情网| 在线观看亚洲精品视频| 国产精品污网站| 国产精品一卡二卡| 精品久久一区二区三区| 免费人成精品欧美精品| 欧美人伦禁忌dvd放荡欲情| 亚洲精品videosex极品| av亚洲精华国产精华精华| 久久这里都是精品| 蜜桃久久久久久久| 日韩欧美aaaaaa| 日韩高清一区在线| 欧美一级午夜免费电影| 午夜久久久久久| 欧美乱熟臀69xxxxxx| 亚洲高清免费在线| 欧美最猛性xxxxx直播| 一区二区三区久久| 日本韩国欧美一区| 亚洲一卡二卡三卡四卡无卡久久| 91视频观看免费| 一区二区三区精品| 精品视频1区2区| 首页综合国产亚洲丝袜| 欧美一区在线视频| 蜜桃在线一区二区三区| 精品av综合导航| 韩国欧美国产1区| 久久理论电影网| 成人av网站在线观看免费| 国产精品色呦呦| 色狠狠综合天天综合综合| 亚洲专区一二三| 欧美一区二视频| 国产裸体歌舞团一区二区| 国产女人aaa级久久久级| 成人久久久精品乱码一区二区三区| 成人欧美一区二区三区在线播放| 91视频精品在这里| 午夜欧美一区二区三区在线播放| 欧美久久一二三四区| 黄色精品一二区| 中文字幕精品一区| 色老综合老女人久久久| 日韩高清国产一区在线| 久久久久久亚洲综合影院红桃| 成人动漫视频在线| 亚洲图片自拍偷拍| 欧美一区二区三区啪啪| 国产精品自拍一区| 日韩美女精品在线| 在线不卡的av| 国产一区欧美二区| 亚洲免费观看视频| 亚洲福利视频一区| 日韩一二三区视频| 成人午夜免费电影| 日日摸夜夜添夜夜添国产精品 | 国产精品久久久久久户外露出 | 男人的天堂久久精品| 久久久久国色av免费看影院| 99re成人在线| 日本一不卡视频| 综合激情成人伊人| 91精品国产综合久久国产大片| 国产精品亚洲一区二区三区在线| 亚洲欧洲制服丝袜| 欧美精品一区视频| 在线日韩一区二区| 国产很黄免费观看久久| 亚洲午夜私人影院| 国产女人18毛片水真多成人如厕 | 中文字幕av一区二区三区免费看| 日本韩国欧美在线| 国产成人一区在线| 视频一区二区欧美| 亚洲色大成网站www久久九九| 精品国产免费一区二区三区香蕉| 91电影在线观看| 国产98色在线|日韩| 美女视频第一区二区三区免费观看网站| 国产精品视频一区二区三区不卡|