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

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

?? automap.cpp

?? 3D游戲引擎 Programming Role-Playing Games with DirectX, 2nd Edition by Jim Adams
?? CPP
字號:
#include "Core_Global.h"
#include "Automap.h"

cAutomap::cAutomap()
{
  m_Graphics = NULL;

  // Set section data and vertex buffer
  m_NumSections = 0;
  m_Visible = NULL;
  m_MapVB = NULL;

  // Point the camera down
  m_Camera.Rotate(1.57f, 0.0f, 0.0f);

  // Set a default window for displaying map
  SetWindow(0,0,100,100);

  m_Scale = 1.0f;  // Set a default scale
}

cAutomap::~cAutomap()
{
  Free();
}

BOOL cAutomap::Create(cGraphics *Graphics,                    \
                      char *Filename, long Color)
{
  cMesh           Mesh;
  sMesh          *MeshPtr;
  ID3DXMesh      *IMeshPtr;
  sGenericVertex *GenVert;
  sVertex         Vertex, *VBPtr;
  long            i, j, Num;
  long            VertexSize, NumFaces;
  unsigned short *IndexPtr;
  char           *VertexPtr;
  float           Radius;
  sVertex         PointerVerts[3] = { 
        {   0.0f, 0.0f,  10.0f, D3DCOLOR_RGBA(128,64,0,255) },
        {   5.0f, 0.0f, -10.0f, D3DCOLOR_RGBA(128,64,0,255) },
        {  -5.0f, 0.0f, -10.0f, D3DCOLOR_RGBA(128,64,0,255) }
      };

  // Free a prior auto map
  Free();

  // Error checking
  if((m_Graphics = Graphics) == NULL)
    return FALSE;

  // Attempt to load the mesh
  if(Mesh.Load(Graphics, Filename) == FALSE)
    return FALSE;

  // Get mesh pointer {
  if((MeshPtr = Mesh.GetParentMesh()) == NULL) {
    Mesh.Free();
    return FALSE;
  }

  // Get size of vertices from source mesh
  VertexSize = D3DXGetFVFVertexSize(MeshPtr->m_Mesh->GetFVF());

  // Get a bounding radius to scale by
  Mesh.GetBounds(NULL,NULL,NULL,NULL,NULL,NULL,&Radius);
  m_Scale = 128.0f / Radius;

  // Get # of sections in map mesh
  if(!(m_NumSections = Mesh.GetNumMeshes())) {
    Mesh.Free();
    return FALSE;
  }

  // Allocate the visibility buffer and clear it
  m_Visible = new char[m_NumSections];
  ZeroMemory(m_Visible, m_NumSections);

  // Allocate the vertex buffers
  m_MapVB = new cVertexBuffer[m_NumSections]();

  // Go through each mesh in the cMesh object and
  // construct a matching vertex buffer. Make sure
  // to start with last section in map to compensate
  // for linked list ordering of meshes in cMesh.
  Num = m_NumSections - 1;
  while(MeshPtr != NULL) {
    // Get a pointer to the mesh
    IMeshPtr = MeshPtr->m_Mesh;

    // Lock index and vertex buffers
    IMeshPtr->LockIndexBuffer(D3DLOCK_READONLY,               \
                            (void**)&IndexPtr);
    IMeshPtr->LockVertexBuffer(D3DLOCK_READONLY,              \
                              (void**)&VertexPtr);

    // Create the vertex buffer
    NumFaces = IMeshPtr->GetNumFaces();
    m_MapVB[Num].Create(Graphics, NumFaces*3,                 \
                         AUTOMAPFVF, sizeof(sVertex));

    // Lock the vertex buffer
    m_MapVB[Num].Lock(0,0);
    VBPtr = (sVertex*)m_MapVB[Num].GetPtr();

    // Pull out vertices and construct vertex list
    for(i=0;i<NumFaces;i++) {
      for(j=0;j<3;j++) {
        // Get pointer to vertex
        GenVert=(sGenericVertex*)                             \
                &VertexPtr[VertexSize * (*IndexPtr++)];

        // Create new vertices
        Vertex.x = GenVert->x * m_Scale;
        Vertex.y = 0.0f;
        Vertex.z = GenVert->z * m_Scale;
        Vertex.Diffuse = Color;

        memcpy(VBPtr++, &Vertex, sizeof(sVertex));
      }
    }

    // Unlock the vertex buffer
    m_MapVB[Num].Unlock();

    // Unlock buffers
    IMeshPtr->UnlockVertexBuffer();
    IMeshPtr->UnlockIndexBuffer();

    // Go to next mesh
    Num--;
    MeshPtr = MeshPtr->m_Next;
  }

  // Create a character pointer vertex buffer
  m_PointerVB.Create(Graphics,3,AUTOMAPFVF, sizeof(sVertex));
  m_PointerVB.Set(0,3,&PointerVerts);

  Mesh.Free();  // Free loaded mesh

  return TRUE;
}

BOOL cAutomap::Free()
{
  long i;
  
  // Free map vertex buffers
  if(m_MapVB != NULL) {
    for(i=0;i<m_NumSections;i++)
      m_MapVB[i].Free();
    delete [] m_MapVB;
    m_MapVB = NULL;
  }
  
  m_NumSections = 0;    // Reset # of sections

  delete [] m_Visible;  // Release visibility array
  m_Visible = NULL;

  m_PointerVB.Free();   // Free pointer vertex buffer

  return TRUE;
}

BOOL cAutomap::Load(char *Filename)
{
  FILE *fp;
  long Num;
  BOOL ReturnVal = FALSE;

  // Open the file
  if((fp=fopen(Filename, "rb"))==NULL)
    return FALSE;

  // Get the number of sections in file
  fread(&Num, 1, sizeof(long), fp);

  // Make sure they match and load in visible flags
  if(m_NumSections == Num && m_Visible != NULL) {
    fread(m_Visible, 1, Num, fp);
    ReturnVal = TRUE;
  }

  fclose(fp);

  return ReturnVal;
}

BOOL cAutomap::Save(char *Filename)
{
  FILE *fp;

  // Error checking
  if(m_NumSections && m_Visible == NULL)
    return FALSE;

  // Create the file
  if((fp=fopen(Filename, "wb"))==NULL)
    return FALSE;

  // Write out number of sections
  fwrite(&m_NumSections, 1, sizeof(long), fp);

  // Write out visible flags
  fwrite(m_Visible, 1, m_NumSections, fp);

  fclose(fp);  // Close file

  return TRUE;  // Return success
}

long cAutomap::GetNumSections()
{
  return m_NumSections;
}

BOOL cAutomap::EnableSection(long Section, BOOL Enable)
{
  if(Section >= m_NumSections || m_Visible == NULL)
    return FALSE;
  
  m_Visible[Section] = (Enable==TRUE) ? 1 : 0;

  return TRUE;
}

BOOL cAutomap::SetWindow(long XPos, long YPos,                \
                         long Width, long Height)
{
  m_Viewport.X = XPos;
  m_Viewport.Y = YPos;
  m_Viewport.Width  = Width;
  m_Viewport.Height = Height;
  m_Viewport.MinZ = 0.0f;
  m_Viewport.MaxZ = 1.0f;

  return TRUE;
}

BOOL cAutomap::Render(cCamera *OldCamera,                     \
                float MXPos, float MYPos, float MZPos,        \
                float NumPositions,                           \
                float *XPos, float *ZPos, float *Angle)
{
  cWorldPosition Pos;
  D3DVIEWPORT9 OldViewport;
  long i;

  // Error checking
  if(m_Graphics == NULL || !m_NumSections || 
     m_MapVB == NULL    || m_Visible == NULL)
    return FALSE;

  // Move camera
  m_Camera.Move(MXPos*m_Scale, MYPos, MZPos*m_Scale);
  m_Graphics->SetCamera(&m_Camera);

  // Get old viewport and set new viewport
  m_Graphics->GetDeviceCOM()->GetViewport(&OldViewport);
  m_Graphics->GetDeviceCOM()->SetViewport(&m_Viewport);

  // Set rendering states and texture
  m_Graphics->EnableZBuffer(FALSE);
  m_Graphics->SetTexture(0, NULL);

  // Render vertex buffers
  m_Graphics->SetWorldPosition(&Pos);
  for(i=0;i<m_NumSections;i++) {
    if(m_Visible[i])
      m_MapVB[i].Render(0, m_MapVB[i].GetNumVertices()/3,     \
                        D3DPT_TRIANGLELIST);
  }

  // Display alpha blending to render pointer
  m_Graphics->EnableAlphaBlending(FALSE);

  // Draw the character positions
  if(NumPositions) {
    for(i=0;i<NumPositions;i++) {
      Pos.Move(XPos[i] * m_Scale, 0.0f, ZPos[i] * m_Scale);
      Pos.Rotate(0.0f, Angle[i], 0.0f);
      m_Graphics->SetWorldPosition(&Pos);
      m_PointerVB.Render(0, 1, D3DPT_TRIANGLELIST);
    }
  }

  // Restore old camera if passed
  if(OldCamera != NULL)
    m_Graphics->SetCamera(OldCamera);

  // Restore old viewport
  m_Graphics->GetDeviceCOM()->SetViewport(&OldViewport);

  return TRUE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本高清成人免费播放| 日韩美女天天操| 日韩欧美一二区| 中文字幕中文在线不卡住| 亚洲成av人综合在线观看| 不卡视频一二三| 久久久精品国产99久久精品芒果| 亚洲一级电影视频| 粉嫩欧美一区二区三区高清影视| 欧美一区二区三级| 亚洲资源在线观看| 91麻豆精品在线观看| 久久精品亚洲精品国产欧美kt∨ | 亚洲成人黄色影院| www.爱久久.com| 国产午夜精品一区二区三区视频 | 青青草伊人久久| 欧美性猛片xxxx免费看久爱| 国产精品无码永久免费888| 精品一区二区三区影院在线午夜| 欧美日韩亚洲不卡| 亚洲免费伊人电影| 色94色欧美sute亚洲13| 亚洲欧美日韩国产另类专区| 国产aⅴ综合色| 久久久久亚洲蜜桃| 精品一区二区在线免费观看| 日韩女优av电影| 久久99精品久久只有精品| 717成人午夜免费福利电影| 亚洲香肠在线观看| 欧美日韩国产影片| 视频一区二区三区在线| 6080yy午夜一二三区久久| 五月天亚洲婷婷| 欧美一区二区三区免费观看视频| 日韩vs国产vs欧美| 精品免费国产一区二区三区四区| 美日韩黄色大片| 久久亚洲一区二区三区明星换脸| 久草精品在线观看| 久久精品日产第一区二区三区高清版| 国产在线精品不卡| 国产精品护士白丝一区av| 一本色道久久综合亚洲精品按摩| 一区二区在线观看免费视频播放| 欧美视频一区二区三区在线观看 | 亚洲色欲色欲www| 在线观看亚洲成人| 日本aⅴ亚洲精品中文乱码| 日韩一区二区麻豆国产| 国产一区二区精品久久| 日韩毛片一二三区| 欧美日韩视频在线一区二区| 美女一区二区三区在线观看| 国产精品美女久久久久久| 欧洲激情一区二区| 精油按摩中文字幕久久| 国产精品美女一区二区| 欧美日韩免费视频| 国产精品自拍网站| 一区二区在线观看视频| 精品国产成人在线影院| av动漫一区二区| 日韩精品91亚洲二区在线观看| 久久综合久久综合亚洲| 色婷婷av一区二区三区gif | 奇米色777欧美一区二区| 久久久亚洲精华液精华液精华液| caoporm超碰国产精品| 亚洲成人av一区二区三区| 精品少妇一区二区三区在线视频 | 美女在线一区二区| 亚洲女人****多毛耸耸8| 欧美第一区第二区| 91碰在线视频| 免费成人av在线播放| 亚洲欧美综合网| 日韩欧美电影一二三| 日本乱人伦一区| 精品视频一区二区三区免费| 美女视频一区在线观看| 亚洲精品成人天堂一二三| 欧美va亚洲va| 欧美丰满一区二区免费视频| 成人av电影免费在线播放| 奇米777欧美一区二区| 亚洲国产一区在线观看| 国产精品国产三级国产aⅴ中文 | 1024国产精品| 久久久久99精品国产片| 欧美酷刑日本凌虐凌虐| 99久久精品免费| 国产经典欧美精品| 蜜桃av噜噜一区二区三区小说| 亚洲国产中文字幕| 一区二区三区视频在线看| 欧美韩日一区二区三区| 337p日本欧洲亚洲大胆精品| 欧美一区二区成人| 欧美日韩国产综合草草| 欧美中文字幕一区二区三区| 波多野结衣亚洲| 国产成人精品亚洲777人妖 | 麻豆91在线播放免费| 亚洲免费观看高清在线观看| 18欧美亚洲精品| 日韩电影在线免费观看| 亚洲午夜在线视频| 亚洲国产另类精品专区| 亚洲线精品一区二区三区| 亚洲一级在线观看| 午夜精彩视频在线观看不卡| 天天操天天综合网| 蜜芽一区二区三区| 麻豆国产欧美日韩综合精品二区 | 欧美在线视频不卡| 91黄色激情网站| 91国模大尺度私拍在线视频| 在线观看日韩毛片| 欧美日韩国产高清一区二区 | 久久久久久久综合色一本| 26uuu亚洲综合色欧美| 国产亚洲成aⅴ人片在线观看 | 精品国产凹凸成av人网站| 日韩欧美一区二区三区在线| 欧美电视剧在线看免费| 久久久精品人体av艺术| 国产精品精品国产色婷婷| 亚洲人成亚洲人成在线观看图片 | 亚洲视频在线观看一区| 夜夜嗨av一区二区三区中文字幕| 亚洲国产综合人成综合网站| 日本视频免费一区| 国产乱淫av一区二区三区| 成人综合在线视频| 欧美午夜宅男影院| 精品免费视频一区二区| 国产精品美女www爽爽爽| 亚洲日韩欧美一区二区在线| 亚洲综合无码一区二区| 蜜臂av日日欢夜夜爽一区| 大桥未久av一区二区三区中文| 91九色02白丝porn| 日韩精品中文字幕一区| 亚洲少妇最新在线视频| 视频一区中文字幕| www.一区二区| 在线91免费看| 国产精品短视频| 日本美女一区二区三区| 成人高清视频在线观看| 欧美美女bb生活片| 国产精品全国免费观看高清 | 久久久久久久国产精品影院| 综合激情网...| 久久精品国产亚洲aⅴ| 91一区二区在线| 欧美一区国产二区| 亚洲精品中文字幕乱码三区| 久久草av在线| 欧美日韩一区三区| 国产精品无遮挡| 精品一区二区三区久久| 在线观看亚洲精品| 中国av一区二区三区| 久久丁香综合五月国产三级网站| 91视频在线观看免费| 久久综合狠狠综合久久综合88 | 日韩精品一级二级| 99精品视频在线播放观看| 欧美v国产在线一区二区三区| 一区二区三区在线观看网站| 国产精品一色哟哟哟| 日韩欧美在线1卡| 亚洲电影在线免费观看| 99re66热这里只有精品3直播| 精品噜噜噜噜久久久久久久久试看 | 亚洲美女在线一区| 懂色av噜噜一区二区三区av| 欧美va亚洲va国产综合| 日本在线不卡视频| 欧美日本一道本| 亚洲一区二区影院| 91精彩视频在线观看| 成人免费在线播放视频| 国产不卡高清在线观看视频| 精品处破学生在线二十三| 日韩激情av在线| 欧美日韩国产综合视频在线观看| 亚洲人成网站色在线观看| 成人av免费网站| 国产精品色呦呦| 成人精品鲁一区一区二区| 久久久影视传媒| 国产丶欧美丶日本不卡视频| 久久综合色播五月| 丁香婷婷综合色啪| 国产精品不卡在线| 在线精品视频一区二区|