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

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

?? winmain.cpp

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

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

// A generic coordinate vertex structure
typedef struct {
  D3DXVECTOR3 vecPos;
} sVertex;

// Structure to contain a morphing mesh
typedef struct sMorphMesh {

  // Mesh containers (along w/resulting morphed mesh)
  D3DXMESHCONTAINER_EX *SourceMesh;
  D3DXMESHCONTAINER_EX *TargetMesh;
  D3DXMESHCONTAINER_EX *ResultMesh;

  // Normal offset in vertex structure and vertex pitch
  long                  NormalOffset;
  DWORD                 VertexPitch;

  sMorphMesh() { 
    SourceMesh = NULL;
    TargetMesh = NULL;
    ResultMesh = NULL; 
  }

  ~sMorphMesh() {
    delete SourceMesh; SourceMesh = NULL;
    delete TargetMesh; TargetMesh = NULL;
    delete ResultMesh; ResultMesh = NULL; 
  }
} sMorphMesh;

// Instance morphing meshes (for the water and the dolphin)
sMorphMesh *g_Water   = NULL;
sMorphMesh *g_Dolphin = 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[]   = "MorphClass";
char g_szCaption[] = "Morphing 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();

// Function to load a group of meshes for morphing
void LoadMorphingMesh(sMorphMesh *Mesh,
                      char *SourceMesh, 
                      char *TargetMesh,
                      char *TexturePath);

// Function to build a resulting morphed mesh
void BuildMorphMesh(sMorphMesh *Mesh, float Scalar);

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 = NULL;
  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 morphing water meshes
  g_Water = new sMorphMesh();
  LoadMorphingMesh(g_Water,
                   "..\\Data\\Water1.x",
                   "..\\Data\\Water2.x",
                   "..\\Data\\");

  // Load the morphing dolphin meshes
  g_Dolphin = new sMorphMesh();
  LoadMorphingMesh(g_Dolphin, 
                   "..\\Data\\Dolphin1.x",
                   "..\\Data\\Dolphin3.x",
                   "..\\Data\\");

  // 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\\Sky.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;
  Light.Direction = D3DXVECTOR3(0.0f, -1.0f, 0.0f);
  g_pD3DDevice->SetLight(0, &Light);
  g_pD3DDevice->LightEnable(0, TRUE);

  // Start playing an ocean sound
  PlaySound("..\\Data\\Ocean.wav", NULL, SND_ASYNC | SND_LOOP);

  return TRUE;
}

void DoShutdown()
{
  // Stop playing an ocean sound
  PlaySound(NULL, NULL, 0);

  // Release Backdrop data
  ReleaseCOM(g_BackdropVB);
  ReleaseCOM(g_BackdropTexture);

  // Delete meshes
  delete g_Water;   g_Water   = NULL;
  delete g_Dolphin; g_Dolphin = NULL;

  // Release D3D objects
  ReleaseCOM(g_pD3DDevice);
  ReleaseCOM(g_pD3D);
}

void DoFrame()
{
  static float DolphinXPos = 0.0f, DolphinZPos = 256.0f;

  // Build the water morphing mesh using a time-based sine-wave scalar value
  float WaterTimeFactor = (float)(timeGetTime()) * 0.001f;
  float WaterScalar = ((float)sin(WaterTimeFactor) + 1.0f) * 0.5f;
  BuildMorphMesh(g_Water, WaterScalar);

  // Build the dolphin morphing mesh using a time-based scalar value
  float DolphinTimeFactor = (float)(timeGetTime() % 501) / 250.0f;
  float DolphinScalar = (DolphinTimeFactor<=1.0f)?DolphinTimeFactor:(2.0f-DolphinTimeFactor);
  BuildMorphMesh(g_Dolphin, DolphinScalar);

  // Calculate the angle of the dolphin's movement and
  // reposition the dolphin if it's far enough underwater
  float DolphinAngle = (float)(timeGetTime() % 6280) / 1000.0f * 3.0f;
  if(sin(DolphinAngle) < -0.7f) {
    DolphinXPos = (float)(rand()%1400) - 700.0f;
    DolphinZPos = (float)(rand()%1500);
  }

  // Create and set the view transformation
  D3DXMATRIX matView;
  D3DXMatrixLookAtLH(&matView, &D3DXVECTOR3(0.0f, 170.0f, -1000.0f), 
                               &D3DXVECTOR3(0.0f, 150.0f, 0.0f), 
                               &D3DXVECTOR3(0.0f, 1.0f, 0.0f));
  g_pD3DDevice->SetTransform(D3DTS_VIEW, &matView);

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

    // Set identity matrix for world transformation
    D3DXMATRIX matWorld;
    D3DXMatrixIdentity(&matWorld);
    g_pD3DDevice->SetTransform(D3DTS_WORLD, &matWorld);

    // Enable lighting to draw water and dolpin
    g_pD3DDevice->SetRenderState(D3DRS_LIGHTING, TRUE);

    // Draw the water morphing mesh
    DrawMesh(g_Water->ResultMesh);

    // Draw the jumping dolphin
    D3DXMatrixRotationZ(&matWorld, DolphinAngle - 1.57f);
    matWorld._41 = DolphinXPos + (float)cos(DolphinAngle) * 256.0f;
    matWorld._42 = (float)sin(DolphinAngle) * 512.0f;
    matWorld._43 = DolphinZPos;
    g_pD3DDevice->SetTransform(D3DTS_WORLD, &matWorld);
    DrawMesh(g_Dolphin->ResultMesh);
  
    // 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);
}

void LoadMorphingMesh(sMorphMesh *Mesh,
                      char *SourceMesh, 
                      char *TargetMesh,
                      char *TexturePath)
{
  // Load the source and target meshes
  LoadMesh(&Mesh->SourceMesh, g_pD3DDevice, SourceMesh, TexturePath);
  LoadMesh(&Mesh->TargetMesh, g_pD3DDevice, TargetMesh, TexturePath);

  // Reload the source mesh as a resulting morphed mesh container
  LoadMesh(&Mesh->ResultMesh, g_pD3DDevice, SourceMesh, TexturePath);

  // Determine if source mesh uses normals and calculate offset
  if(Mesh->SourceMesh->MeshData.pMesh->GetFVF() & D3DFVF_NORMAL)
    Mesh->NormalOffset = 3 * sizeof(float);
  else Mesh->NormalOffset = 0;

  // Get vertex buffer pitch
  Mesh->VertexPitch = D3DXGetFVFVertexSize(Mesh->SourceMesh->MeshData.pMesh->GetFVF());
}

void BuildMorphMesh(sMorphMesh *Mesh, float Scalar)
{
  // Lock mesh vertex buffers
  char *SourcePtr, *TargetPtr, *ResultPtr;
  Mesh->SourceMesh->MeshData.pMesh->LockVertexBuffer(D3DLOCK_READONLY, (void**)&SourcePtr);
  Mesh->TargetMesh->MeshData.pMesh->LockVertexBuffer(D3DLOCK_READONLY, (void**)&TargetPtr);
  Mesh->ResultMesh->MeshData.pMesh->LockVertexBuffer(0,  (void**)&ResultPtr);

  // Go through each vertex and interpolate coordinates
  for(DWORD i=0;i<Mesh->SourceMesh->MeshData.pMesh->GetNumVertices();i++) {

    // Get pointers to vertex data
    sVertex *SourceVert = (sVertex*)SourcePtr;
    sVertex *TargetVert = (sVertex*)TargetPtr;
    sVertex *ResultVert = (sVertex*)ResultPtr;

    // Get source coordinates and scale them
    D3DXVECTOR3 vecSource = SourceVert->vecPos;
    vecSource *= (1.0f - Scalar);

    // Get target coordinates and scale them
    D3DXVECTOR3 vecTarget = TargetVert->vecPos;
    vecTarget *= Scalar;

    // Store morphed coordinates
    ResultVert->vecPos = vecSource + vecTarget;

    // Handle interpolation of normals
    if(Mesh->NormalOffset) {
      SourceVert = (sVertex*)&SourcePtr[Mesh->NormalOffset];
      TargetVert = (sVertex*)&TargetPtr[Mesh->NormalOffset];
      ResultVert = (sVertex*)&ResultPtr[Mesh->NormalOffset];

      // Get source coordinates and scale them
      D3DXVECTOR3 vecSource = SourceVert->vecPos;
      vecSource *= (1.0f - Scalar);

      // Get target coordinates and scale them
      D3DXVECTOR3 vecTarget = TargetVert->vecPos;
      vecTarget *= Scalar;

      // Store morphed coordinates
      ResultVert->vecPos = vecSource + vecTarget;
    }

    // Go to next vertex
    SourcePtr += Mesh->VertexPitch;
    TargetPtr += Mesh->VertexPitch;
    ResultPtr += Mesh->VertexPitch;
  }

  // Unlock buffers
  Mesh->SourceMesh->MeshData.pMesh->UnlockVertexBuffer();
  Mesh->TargetMesh->MeshData.pMesh->UnlockVertexBuffer();
  Mesh->ResultMesh->MeshData.pMesh->UnlockVertexBuffer();
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久91精品久久久久久秒播| 亚洲激情在线播放| 欧美日韩国产精品成人| 99久久er热在这里只有精品15| 国内精品伊人久久久久av一坑| 免费成人小视频| 久久国产免费看| 韩国女主播一区二区三区| 国内精品在线播放| 国产不卡高清在线观看视频| 成人美女在线观看| 99国产精品久久久久久久久久| 波多野结衣精品在线| 91精品欧美一区二区三区综合在| 欧美日韩一区二区电影| 777xxx欧美| 欧美不卡一二三| 国产精品情趣视频| 亚洲精品日韩专区silk| 亚洲va韩国va欧美va精品| 视频一区视频二区在线观看| 麻豆成人av在线| 丁香激情综合五月| 99久久精品费精品国产一区二区| 在线看国产一区| 欧美一区二区三区在| 久久中文字幕电影| 国产精品三级视频| 亚洲18影院在线观看| 九一九一国产精品| 99re亚洲国产精品| 制服丝袜亚洲色图| 日本一区二区免费在线观看视频| 亚洲免费毛片网站| 韩国av一区二区| 91福利在线播放| 久久色中文字幕| 亚洲韩国一区二区三区| 国产一区二区主播在线| 欧美在线视频全部完| www成人在线观看| 一区二区三区四区在线播放| 成人av手机在线观看| 日本高清视频一区二区| 欧美精品一区二区精品网| 一区二区理论电影在线观看| 激情都市一区二区| 欧美女孩性生活视频| 国产精品久久久久影视| 精彩视频一区二区三区| 欧美日韩一区在线| 中文字幕在线观看不卡视频| 久久国产剧场电影| 欧美性受xxxx黑人xyx性爽| 日本一区二区不卡视频| 日韩不卡一二三区| 欧美三级视频在线观看| 亚洲色图欧美在线| 成人av在线影院| 久久蜜桃av一区精品变态类天堂| 天天做天天摸天天爽国产一区| eeuss国产一区二区三区| 国产亚洲1区2区3区| 久久福利资源站| 日韩一区二区三区四区| 日日夜夜精品视频免费| 欧美日免费三级在线| 一区二区国产视频| 一本到不卡免费一区二区| 国产精品国产三级国产aⅴ原创 | 99久久婷婷国产精品综合| 亚洲乱码国产乱码精品精可以看| 韩国女主播一区| 欧美成人官网二区| 国产在线播放一区三区四| 日韩精品一区二区三区在线播放| 日韩成人精品在线观看| 91精品国产手机| 日本亚洲天堂网| 日韩精品一区二区三区四区视频 | 韩国中文字幕2020精品| 日韩亚洲欧美高清| 韩国av一区二区| 久久久99免费| 成人黄色软件下载| 亚洲人吸女人奶水| 欧美综合天天夜夜久久| 亚洲成a人v欧美综合天堂| 欧美日韩精品免费观看视频| 亚洲一区二区三区四区在线免费观看 | 欧美另类久久久品| 奇米精品一区二区三区在线观看 | 欧美日韩在线不卡| 国产在线精品一区二区不卡了| 精品88久久久久88久久久| 国产在线精品一区二区| 国产精品免费看片| 欧美三片在线视频观看| 久久精品噜噜噜成人88aⅴ| 久久久精品综合| 91美女片黄在线观看91美女| 亚洲一区二区三区自拍| 日韩精品自拍偷拍| 成人激情动漫在线观看| 亚洲一二三四在线观看| www成人在线观看| 色女孩综合影院| 精品一区二区免费看| 一区视频在线播放| 欧美一区二区久久久| 成人av资源在线观看| 日本成人在线看| 国产精品高潮呻吟久久| 这里只有精品电影| 不卡的av电影| 另类小说图片综合网| 亚洲人成网站在线| 久久婷婷综合激情| 欧美日韩免费一区二区三区视频| 精品一区二区精品| 亚洲制服丝袜一区| 欧美国产精品中文字幕| 51精品秘密在线观看| 91亚洲精华国产精华精华液| 久久精品国产99国产| 亚洲一区在线观看视频| 国产欧美精品一区aⅴ影院| 在线播放欧美女士性生活| 99精品国产热久久91蜜凸| 国产一区二区三区高清播放| 午夜不卡av在线| 亚洲女女做受ⅹxx高潮| 国产日韩欧美综合在线| 欧美xxxxx牲另类人与| 欧美午夜寂寞影院| 色婷婷综合久久久中文一区二区| 国产美女视频一区| 91免费精品国自产拍在线不卡| 麻豆高清免费国产一区| 五月综合激情日本mⅴ| 亚洲黄色av一区| 日韩一区欧美一区| 欧美国产日本韩| 欧美国产日韩一二三区| 久久久久国产精品人| 日韩欧美的一区二区| 欧美一区二区久久| 欧美一区三区四区| 欧美二区三区的天堂| 欧美性色欧美a在线播放| 一本久道中文字幕精品亚洲嫩| 成人app在线| av爱爱亚洲一区| 91在线视频播放地址| voyeur盗摄精品| 一本大道久久精品懂色aⅴ| 99r精品视频| 日本丰满少妇一区二区三区| 色综合久久综合网欧美综合网| 91麻豆成人久久精品二区三区| 白白色 亚洲乱淫| 色综合一区二区| 欧美在线播放高清精品| 欧美肥妇free| 日韩精品一区二区在线| 久久日一线二线三线suv| 久久精品一区二区三区四区| 国产欧美一区二区精品性色超碰| 国产欧美综合色| 亚洲色图另类专区| 爽好久久久欧美精品| 美女一区二区视频| 国产在线观看免费一区| 波多野结衣中文字幕一区| 色一情一乱一乱一91av| 欧美狂野另类xxxxoooo| 欧美成人r级一区二区三区| 欧美高清在线一区| 一个色妞综合视频在线观看| 日本少妇一区二区| 国产乱人伦偷精品视频免下载| 成人高清免费在线播放| 欧美影院午夜播放| 久久久美女毛片| 一区二区三区四区不卡在线| 免费成人性网站| 国产91丝袜在线18| 欧美三级在线播放| 精品国产免费人成电影在线观看四季 | 久久综合九色综合欧美亚洲| 国产精品黄色在线观看| 天堂va蜜桃一区二区三区| 国产精品 欧美精品| 欧美亚洲日本一区| 国产欧美日韩卡一| 日韩主播视频在线| 91在线视频播放地址| 26uuu国产在线精品一区二区| 亚洲蜜桃精久久久久久久| 国产在线视频精品一区|