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

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

?? bsploader.cpp

?? 一個(gè)DXD制作的讀取QUAKE的BSP結(jié)構(gòu)的Demo可以參考
?? CPP
?? 第 1 頁 / 共 2 頁
字號(hào):
   Present_Parameters.BackBufferFormat = DisplayMode.Format;// Render to the area of the screen.
   Present_Parameters.BackBufferCount = 1;                  // Number of back buffers.
   Present_Parameters.EnableAutoDepthStencil = TRUE;        // Check documentation.
   Present_Parameters.AutoDepthStencilFormat = D3DFMT_D16;  // Check documentation.

   // Now we must create the rendering device.
   if(FAILED(Direct3D_Object->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd,
                        VertexProcessing, &Present_Parameters, &D3D_Device)))
      {
         MessageBox(NULL, "CreateDevice() failed!  Make sure you have DirectX 9.",
                    "Error!", MB_OK);
         return false;
      }

   // One last check to be sure.
   if(D3D_Device == NULL)
      {
         MessageBox(NULL, "D3D_Device is equal to NULL!?!", "Error!", MB_OK);
         return false;
      }

   D3D_Device->SetRenderState(D3DRS_LIGHTING, FALSE);
	D3D_Device->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
   D3D_Device->SetRenderState(D3DRS_ZENABLE, TRUE);

   // Here we set up the object this demo will render (for example a polygon).
   if(!InitializeObject()) return false;

   // Set the projection.
   D3DXMATRIXA16 Projection;
   D3DXMatrixPerspectiveFovLH(&Projection, 45.0f, 640/480, 0.1f, 1000.0f);
   D3D_Device->SetTransform(D3DTS_PROJECTION, &Projection);

   return true;
}


bool InitializeObject()
{
   // Load the .bsp level.
   if(!BspLevel.LoadLevel("maps//ugpTestMap.bsp")) return false;
   BspLevel.SwapAxis();

   Texture = new LPDIRECT3DTEXTURE9[BspLevel.m_totalTextures];
   LightMaps = new LPDIRECT3DTEXTURE9[BspLevel.m_totalLightMaps];

   // Load the textures we will need.
   for(int i = 0; i < BspLevel.m_totalTextures; i++) 
	   {
	      if(strcmp("noshader", BspLevel.m_textures[i].file) == 0) continue;
         strcat(BspLevel.m_textures[i].file, ".tga");

         // Here we load the texture into the texture object.
         if(D3DXCreateTextureFromFile(D3D_Device, BspLevel.m_textures[i].file,
            &Texture[i]) != D3D_OK) return false;
	   }

	// Load the lightmaps we will need.
   for(int i = 0; i < BspLevel.m_totalLightMaps; i++) 
	   {
	      ApplyGamma(&BspLevel.m_lightMaps[i].lightMap[0][0][0],
	                 128 * 128 * 3, 3, 10);

         if(FAILED(D3DXCreateTexture(D3D_Device, 128, 128, 1, 0, 
             D3DFMT_R8G8B8, D3DPOOL_MANAGED, &LightMaps[i]))) return false;

         D3DLOCKED_RECT lr;
         LightMaps[i]->LockRect(0, &lr, NULL, 0);

         DWORD *tempImg = (DWORD*)lr.pBits;
         if(!tempImg) continue;
         int index = 0;
         for(int k = 0; k < 128; k++)
            {
               for(int j = 0; j < 128; j++)
                  {
                     tempImg[index++] = (BspLevel.m_lightMaps[i].lightMap[j][k][0] << 16) |
                        (BspLevel.m_lightMaps[i].lightMap[j][k][1] << 8) |
                        BspLevel.m_lightMaps[i].lightMap[j][k][2];
                  }
            }

         LightMaps[i]->UnlockRect(0);
	   }

   // Set the camera's default position.
   Camera.SetCamera(0, 150, -150, 0, 150, -149, 0, 1, 0);

   // Create the vertex buffer that will hold the square.
	if(FAILED(D3D_Device->CreateVertexBuffer(sizeof(stQ3Vertex) *
	   BspLevel.m_totalVertices, 0, 0, D3DPOOL_DEFAULT, &Vertex_Buffer, NULL)))
      return false;

   // Pointer to the buffer.
   stQ3Vertex* Vertices;

   // Lock the buffer we can write to it.
   if(FAILED(Vertex_Buffer->Lock(0, sizeof(stQ3Vertex) *
      BspLevel.m_totalVertices, (void**)&Vertices, 0))) return false;

   // Here we copy the square's data into the vertex buffer.
   memcpy(Vertices, BspLevel.m_vertices, sizeof(stQ3Vertex) * BspLevel.m_totalVertices);
   Vertex_Buffer->Unlock();

   // Set description.
   D3DVERTEXELEMENT9 Declaration[] = 
	   {
	      {0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0},
		   {0, 12, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0},
		   {0, 20, D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 1},
		   {0, 28, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_NORMAL, 0},
		   {0, 40, D3DDECLTYPE_UBYTE4, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 0},
		   D3DDECL_END()
	   };

   D3D_Device->CreateVertexDeclaration(Declaration, &VertexDeclaration);

   return true;
}


void RenderScene()
{
   // Clear the screen.
   D3D_Device->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
                     D3DCOLOR_XRGB(0,0,0), 1.0f, 0);
    
   // Tell Direct 3D we are now going to start drawing.
   D3D_Device->BeginScene();

      // Set the view positions matrix releated info.
      D3DXMATRIXA16 View;

      D3DXMatrixIdentity(&View);
      D3DXVECTOR3 Eye(Camera.mPos.x, Camera.mPos.y, Camera.mPos.z);
      D3DXVECTOR3 LookAt(Camera.mView.x, Camera.mView.y, Camera.mView.z);
      D3DXVECTOR3 Up(Camera.mUp.x, Camera.mUp.y, Camera.mUp.z);

      // Set view.
      D3DXMatrixLookAtLH(&View, &Eye, &LookAt, &Up);
      D3D_Device->SetTransform(D3DTS_VIEW, &View);

      for(int i = 0; i < BspLevel.m_totalFaces; i++)
         {
            if(BspLevel.m_faces[i].type != 1) continue;
            stQ3Face *pFace = &BspLevel.m_faces[i];

		      // Set texture image.
            D3D_Device->SetTexture(0, Texture[pFace->texID]);
            D3D_Device->SetTexture(1, LightMaps[pFace->lightmapID]);

            // Set up data stream.
            D3D_Device->SetVertexDeclaration(VertexDeclaration);
            D3D_Device->SetStreamSource(0, Vertex_Buffer, 0, sizeof(stQ3Vertex));

            // Draw.
            D3D_Device->DrawPrimitive(D3DPT_TRIANGLEFAN, pFace->startVertexIndex,
                                     pFace->totalVertices / 2);
         }

      // Checking for input.  We move the camera based on the button(s) that were pressed.
      if(GetKeyState(VK_UP) & 0x80) Camera.MoveCamera(FORWARD);
      if(GetKeyState(VK_DOWN) & 0x80) Camera.MoveCamera(BACKWARD);
      if(GetKeyState(VK_LEFT) & 0x80) Camera.StrafeCam(STRAFE_LEFT);
      if(GetKeyState(VK_RIGHT) & 0x80) Camera.StrafeCam(STRAFE_RIGHT);

      // Rotate camera
      POINT mousePos;
	   GetCursorPos(&mousePos);

      Camera.RotateByMouse(mousePos.x, mousePos.y, (640 >> 1), (480 >> 1));

	   SetCursorPos((640 >> 1), (480 >> 1));

   // We are done drawing for this scene.
   D3D_Device->EndScene();
    
   // Swap the old frame with the new one.
   D3D_Device->Present(NULL, NULL, NULL, NULL);
}


void ShutdownDirect3D()
{
   // Here we release the Direct3D objects.
   BspLevel.Shutdown();

   for(int i = 0; i < BspLevel.m_totalTextures; i++)
      {
         if(Texture[i] != NULL) 
            {
               Texture[i]->Release();
               Texture[i] = NULL;
            }
      }

   for(int i = 0; i < BspLevel.m_totalLightMaps; i++)
      {
         if(LightMaps[i] != NULL) 
            {
               LightMaps[i]->Release();
               LightMaps[i] = NULL;
            }
      }

   delete[] Texture;
   delete[] LightMaps;
   Texture = NULL;
   LightMaps = NULL;

   if(D3D_Device != NULL)
      {
         D3D_Device->Release();
         D3D_Device = NULL;
      }

   if(Direct3D_Object != NULL)
      {
         Direct3D_Object->Release();
         Direct3D_Object = NULL;
      }

   if(Vertex_Buffer != NULL)
      {
	      Vertex_Buffer->Release();
         Vertex_Buffer = NULL;
      }

   if(VertexDeclaration != NULL)
      {
         VertexDeclaration->Release();
         VertexDeclaration = NULL;
      }
}


// Recap:

// Loading and rendering a Quake 3 level is pretty easy.  Loading is nothing
// more than reading in each section of data into its allocated array then
// drawing everything out each frame.  In the next demo we'll add a PVS system.


// Copyright December 2004
// All Rights Reserved!
// Allen Sherrod
// ProgrammingAce@UltimateGameProgramming.com
// www.UltimateGameProgramming.com

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久一区二区三区 | 色婷婷av一区二区| heyzo一本久久综合| 91美女视频网站| 欧美日韩国产一级片| 丝袜亚洲另类丝袜在线| 日本不卡免费在线视频| 国产电影一区在线| 欧美自拍偷拍午夜视频| 日韩美女在线视频 | 免费观看一级欧美片| 国产精品1区二区.| 制服视频三区第一页精品| 国产精品国产馆在线真实露脸| 亚洲图片欧美视频| 精品无人码麻豆乱码1区2区| 9色porny自拍视频一区二区| 精品欧美一区二区三区精品久久| 亚洲国产成人在线| 精品影视av免费| 欧美日韩不卡一区二区| 国产精品女主播av| 麻豆成人久久精品二区三区小说| 91在线精品一区二区三区| 国产日产欧美一区| 国产又黄又大久久| 久久奇米777| 懂色av中文一区二区三区| 精品国产三级电影在线观看| 裸体歌舞表演一区二区| 欧美一区二区在线不卡| 午夜精品久久久久久久久久久 | 欧美一区二区三区在线视频| 亚洲综合丝袜美腿| 日本二三区不卡| 亚洲午夜电影在线| 91精品国产综合久久久久久久久久| 91首页免费视频| 久久精品亚洲国产奇米99 | 欧美不卡一区二区三区四区| 免费欧美日韩国产三级电影| 欧美精品亚洲一区二区在线播放| 亚洲国产三级在线| 日韩欧美国产午夜精品| 国产精品夜夜嗨| 一区二区三区视频在线看| 欧美日韩不卡在线| 成人免费视频视频| 日韩精品免费专区| 中文字幕一区不卡| 欧美r级在线观看| av一区二区三区黑人| 奇米一区二区三区av| 亚洲欧洲三级电影| 精品国产乱码久久久久久1区2区| 99re这里都是精品| 国产美女av一区二区三区| 亚洲成人7777| 中文字幕日韩欧美一区二区三区| 欧美性大战久久久久久久蜜臀| 黑人巨大精品欧美一区| 久久狠狠亚洲综合| 五月综合激情婷婷六月色窝| 亚洲精品视频在线看| 国产亚洲午夜高清国产拍精品 | 免费三级欧美电影| 亚洲电影中文字幕在线观看| 久久蜜桃一区二区| 日韩亚洲欧美综合| 欧美精品xxxxbbbb| 国产清纯美女被跳蛋高潮一区二区久久w| 国产精品综合网| 日本丶国产丶欧美色综合| 粉嫩aⅴ一区二区三区四区五区| 久久99热这里只有精品| 日韩成人伦理电影在线观看| 亚洲a一区二区| 日韩精品乱码av一区二区| 午夜成人免费电影| 天天色 色综合| 奇米精品一区二区三区在线观看一| 亚洲一区二区3| 亚洲 欧美综合在线网络| 亚洲福利一二三区| 免费观看成人av| 国产九九视频一区二区三区| 国产精品主播直播| 97aⅴ精品视频一二三区| 欧美在线观看禁18| 日韩西西人体444www| 久久久国产一区二区三区四区小说 | 日韩欧美一区二区免费| 视频在线观看一区二区三区| 日韩午夜电影在线观看| 国内精品国产三级国产a久久| 亚洲成a人v欧美综合天堂下载| 亚洲欧美激情小说另类| 亚洲激情在线激情| 亚洲图片欧美色图| 男女男精品网站| 精品一区二区免费| 国产不卡视频在线观看| 成人激情文学综合网| 久久不见久久见中文字幕免费| 亚洲一区二区三区四区五区黄| 亚洲国产精品精华液网站| 欧美伊人久久大香线蕉综合69| 91亚洲精品久久久蜜桃网站| 99国产一区二区三精品乱码| 在线看日韩精品电影| 欧美日韩免费观看一区二区三区| 国产**成人网毛片九色 | 色综合天天综合色综合av| 激情综合色播激情啊| 国产成人精品在线看| gogogo免费视频观看亚洲一| 欧美性xxxxxx少妇| 久久久久国产成人精品亚洲午夜| 亚洲精品免费看| 久久精品国产精品亚洲红杏 | 久久人人97超碰com| 亚洲欧美国产三级| 美女免费视频一区| 日本久久精品电影| 久久一区二区视频| 天天射综合影视| av亚洲精华国产精华| 欧美一卡2卡3卡4卡| 中文字幕一区二区三| 韩国精品主播一区二区在线观看| 91小视频在线观看| 久久麻豆一区二区| 肉肉av福利一精品导航| 99视频超级精品| 欧美变态tickling挠脚心| 亚洲夂夂婷婷色拍ww47| 国产一区999| 日韩一区二区三区在线| 亚洲日韩欧美一区二区在线| 激情久久五月天| 欧美丰满少妇xxxbbb| 亚洲色图欧洲色图婷婷| 国产精品一品视频| 欧美一级淫片007| 亚洲成年人网站在线观看| 91小视频免费观看| 中文字幕不卡三区| 国产一区二区三区四区在线观看| 欧美日韩一区二区三区四区五区| 欧美国产日本视频| 韩国精品主播一区二区在线观看| 在线成人免费观看| 一区2区3区在线看| 99精品一区二区三区| 国产精品久线在线观看| 国内精品在线播放| www国产成人| 久久精品国产精品青草| 欧美一区二区三区啪啪| 亚洲成人激情av| 色八戒一区二区三区| 亚洲婷婷综合久久一本伊一区| 高清成人在线观看| 国产精品天美传媒沈樵| 日本aⅴ免费视频一区二区三区| 日本一区二区久久| 一本到不卡精品视频在线观看| 972aa.com艺术欧美| 欧美性生活久久| 久久精品国产99久久6| 一区二区中文字幕在线| 欧美午夜宅男影院| 懂色av噜噜一区二区三区av| 日韩久久一区二区| 91精品欧美久久久久久动漫| 九一九一国产精品| 亚洲永久精品大片| 国产无人区一区二区三区| 91精品国产一区二区| 成人毛片老司机大片| 欧美精品一区二区三区四区 | 99精品欧美一区| 国产精品国产三级国产aⅴ中文| 成人免费看黄yyy456| 国产精品午夜久久| 91麻豆国产福利在线观看| 亚洲精品国产精华液| 欧美性猛交xxxxxx富婆| 日韩av中文在线观看| 日韩你懂的在线观看| 国产丶欧美丶日本不卡视频| 日韩毛片高清在线播放| 欧美伊人久久久久久久久影院| 丝袜脚交一区二区| 国产午夜精品福利| 91精品福利视频| 另类的小说在线视频另类成人小视频在线 | 欧美人成免费网站| 蜜桃视频一区二区三区| 国产精品久久三|