Необходима помощь в освоении азов создания игр 
				  
redinard Дата: Четверг, 29 Марта 2012, 22:57 | Сообщение # 81   
 
постоянный участник
Сейчас нет на сайте 
 
 народ,вот такой вопрос,у меня есть прога:
#include <windows.h>//заголовочный файл windows     #include "d3d9.h"//заголовочный файл DirectX   #pragma comment (lib, "d3d9.lib")//вызов библиотеки   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////   WNDCLASSEX wcex; //моздаём класс   HWND hwnd; //создаём дискриптор окна   MSG msg; //идентификатор сообщения     LPDIRECT3D9 pDirect3D = NULL; //главный обект Direct3D.это указатель на главный интерфейс IDirect3D9 для таботы с графикой.   LPDIRECT3DDEVICE9 pDirect3DDevice = NULL; //устройство   LPDIRECT3DVERTEXBUFFER9 pBufferVershin = NULL;//буфер вершин       struct CUSTOMVERTEX//структура определяющая формат вершин   {   float x, y, z, rhw;//координаты вершины   DWORD color; //цвет вершыны   };     #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)//формат содержания вершин     HINSTANCE hInst;     LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);     HRESULT IntialDirect3D(HWND hwnd);//инециалезация Direct3D     void RenderingDirect3D();//обявление рендера     void DeleteDirect3D();//обявление функции освобождения ресурсов     HRESULT InitialBufferVershin();   // Главная функция     int WINAPI WinMain(HINSTANCE hInstance,   HINSTANCE hPrevInstance,   LPSTR lpCmdLine,   int nCmdShow)   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////   {     wcex.cbSize = sizeof(WNDCLASSEX); // Размер всей структуры   wcex.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW;//Задание стиля окна   wcex.lpfnWndProc = WndProc; //Наша функция обработки событий   wcex.cbClsExtra = 0;   wcex.cbWndExtra = 0;   wcex.hInstance = hInstance;//Экземпляр приложения   wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));   wcex.hCursor = LoadCursor(NULL, IDC_ARROW);   wcex.hbrBackground = (HBRUSH) GetStockObject(GRAY_BRUSH);//цвет фона   wcex.lpszMenuName = NULL; //имя меню   wcex.lpszClassName = L"WINDOWSCLASS"; //Имя класса окна   wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION));// Иконка в заголовке окна     if (!RegisterClassEx(&wcex))   return (0);     if (!(hwnd = CreateWindow(   		L"windowsclass",	//Имя класса окна   		L"ДиректХ",		// Заголовок окна   		WS_OVERLAPPEDWINDOW|WS_VISIBLE,	//Стиль окна   		100, 100,		// Координаты левого верхнего угла   		600,			// Ширина окна   		600,			// Высота окна   		NULL,			// Дескриптор родительского окна   		NULL,			// Дескриптор меню   		hInstance,		// Экземпляр   		NULL)))		// Дополнительные параметры   return (0);     if (SUCCEEDED (IntialDirect3D(hwnd)))   {   if (SUCCEEDED (InitialBufferVershin() ))   {   ShowWindow (hwnd, SW_SHOWDEFAULT);   UpdateWindow (hwnd);   ZeroMemory (&msg, sizeof(msg));     while(msg.message != WM_QUIT)   {   if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))   {   TranslateMessage(&msg);   DispatchMessage(&msg);   }   else   RenderingDirect3D();//рендер   }   }   }   return 0;   }   ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////       LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)//здесь происходит обработка сообщений   {     switch (msg)   {   case WM_DESTROY:   {   DeleteDirect3D();   PostQuitMessage(0);   return (0);   }   }   return DefWindowProc(hwnd, msg, wparam, lparam);     }   ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////   //   //   // ИНИЦИАЛИЗАЦИЯ Direct3D   //   //   ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////     HRESULT IntialDirect3D(HWND hwnd)   {   if(NULL == (pDirect3D = Direct3DCreate9(D3D_SDK_VERSION)))//создаётся основной указатель на интерфейс IDirect3D9   return E_FAIL;   D3DDISPLAYMODE Display;//структура для соответствия текущих установок дисплея     if(FAILED(pDirect3D -> GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &Display)))//получаем текущий формат дисплея   return E_FAIL;     D3DPRESENT_PARAMETERS Direct3DParametr;//обект параметров представления Direct3DParametr   ZeroMemory(&Direct3DParametr, sizeof(Direct3DParametr));//очищает создаваемую структуру от мусора   Direct3DParametr.Windowed = TRUE;//видеорежим используемый нашим приложением   Direct3DParametr.SwapEffect = D3DSWAPEFFECT_DISCARD;//параметр опредиления размеров буфера   Direct3DParametr.BackBufferFormat = D3DFMT_UNKNOWN;//формат поверхности заднего буфера     if (FAILED(pDirect3D -> CreateDevice(D3DADAPTER_DEFAULT,   D3DDEVTYPE_HAL, hwnd,   D3DCREATE_SOFTWARE_VERTEXPROCESSING,   &Direct3DParametr, &pDirect3DDevice)))//обект интерфейса устройства   return E_FAIL;   return S_OK;   }   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////     void RenderingDirect3D()   {   if (pDirect3DDevice == NULL) //проверяем ошибки   return;     pDirect3DDevice -> Clear(0,NULL,D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,255,0), 1.0f, 0);   pDirect3DDevice -> BeginScene();//начало сцены   //здесь происходит отрисовка сцены   pDirect3DDevice -> SetStreamSource(0,pBufferVershin, 0, sizeof(CUSTOMVERTEX));   pDirect3DDevice -> SetFVF(D3DFVF_CUSTOMVERTEX);   pDirect3DDevice -> DrawPrimitive (D3DPT_TRIANGLELIST, 0, 1);     pDirect3DDevice -> EndScene();     pDirect3DDevice -> Present(NULL, NULL, NULL, NULL);   }     void DeleteDirect3D()//функция освобождает захваченные ресурсы   {   if (pBufferVershin != NULL)   pBufferVershin -> Release();     if (pDirect3DDevice != NULL)   pDirect3DDevice -> Release();     if (pDirect3D != NULL)   pDirect3D -> Release();   }     HRESULT InitialBufferVershin()   {   CUSTOMVERTEX Vershin[] =   {   {300.0f, 300.0f, 0.5f, 1.0f, 0x00000fff,},   {150.0f, 300.0f, 0.5f, 1.0f, 0x00000fff,},   {150.0f, 150.0f, 0.5f, 1.0f, 0x00000fff,},   		//x y z цвет   };     if (FAILED (pDirect3DDevice -> CreateVertexBuffer(   3 * sizeof(CUSTOMVERTEX),   0, D3DFVF_CUSTOMVERTEX,   D3DPOOL_DEFAULT,   &pBufferVershin, NULL)))     return E_FAIL;     void* pBV;     if (FAILED(pBufferVershin ->   Lock(0, sizeof(Vershin),(void**)&pBV,0)))   return E_FAIL;     memcpy(pBV, Vershin, sizeof(Vershin));//копирование   pBufferVershin -> Unlock();//разблокирование   return S_OK;   }
    как мне её разбить чтобы часть кода отвечающая непосредственно за инициализацию была в этом же файле,а рендер в отдельном файле ? 
Я белый и пушистый но имею когти и зубы 
 
 
 
zodiak Дата: Пятница, 30 Марта 2012, 10:41 | Сообщение # 82   
 
постоянный участник
Сейчас нет на сайте 
 
 Кидаешь функцию рендеринга в отдельные cpp и h файлы. А чтоб не заморачиваться с глобальными переменными делаешь их аргументами функции.   Типа так:   Code
void RenderingDirect3D(LPDIRECT3DDEVICE9 pDirect3DDevice, LPDIRECT3DVERTEXBUFFER9 pBufferVershin)
    зыЖ Горнаков и его BufferVershin рулят) 
Точка зору окремо взятого індивіда завжди суб'єктивна!   Взломщик    Battle City.Net  
 
 
 
redinard Дата: Пятница, 30 Марта 2012, 15:57 | Сообщение # 83   
 
постоянный участник
Сейчас нет на сайте 
 
 можешь пожалуйста показать на примере рабочего кода,принцып разбиения я знаю,но реализовать мне так и не удалось 
Я белый и пушистый но имею когти и зубы 
 
 
 
DonKorleone Дата: Пятница, 30 Марта 2012, 16:42 | Сообщение # 84   
частый гость
Сейчас нет на сайте 
 
 
  Code
   #pragma comment(lib, "d3d9.lib")   #include <windows.h>   #include "d3d9.h"   //***********************************************************   //объявление главного объекта   LPDIRECT3D9 g_pD3D = NULL;   //объявление девайса   LPDIRECT3DDEVICE9 pDevice;   //объявление вертекс буффера   LPDIRECT3DVERTEXBUFFER9 pVertBuff = NULL;   struct CUSTOMVERTEX   {   float X, Y, Z, rhw;   DWORD color;   };   #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)   //***********************************************************   //ф-ция инициализации DirectX9   HRESULT InitD3D(HWND hwnd)   {   if(NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))   return E_FAIL;   D3DDISPLAYMODE Disp;   if(FAILED(g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &Disp)))   return E_FAIL;   //параметры показа   D3DPRESENT_PARAMETERS d3dpp;   ZeroMemory(&d3dpp, sizeof(d3dpp));   d3dpp.Windowed = true;   d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;   d3dpp.BackBufferFormat = Disp.Format;   //создание девайса   if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &pDevice))) return E_FAIL;   return S_OK;   }   void RenderD3D()   {   pDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0), 1.0f, 0);   pDevice->BeginScene();   //Binding with data stream   pDevice->SetStreamSource(0, pVertBuff, 0, sizeof(CUSTOMVERTEX));   //Установка формата вершин   pDevice->SetFVF(D3DFVF_CUSTOMVERTEX);   pDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 2);   pDevice->EndScene();   pDevice->Present(NULL, NULL, NULL, NULL); //показать все   }   HRESULT InitVertBuff()   {   //проектируем вертексный буфер   CUSTOMVERTEX Vertex[] =   {   {300.0f, 300.0f, 0.5f, 1.0f, 0x66FFFF}, //A   {150.0f, 300.0f, 0.5f, 1.0f, 0x0033FF}, //B   {150.0f, 150.0f, 0.5f, 1.0f, 0xFF3300}, //C   //X Y Z   {150.0f, 150.0f, 0.5f, 1.0f, 0xFF3300}, //C   {300.0f, 150.0f, 0.5f, 1.0f, 0x009933}, //D   {300.0f, 300.0f, 0.5f, 1.0f, 0x66FFFF}, //A   };   // | - кол-во вершин прямо пропорционально числу перед sizeof   if(FAILED(pDevice->CreateVertexBuffer(6*sizeof(CUSTOMVERTEX), 0,   D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &pVertBuff, NULL)))   return E_FAIL;   void *pVB; //временный указатель на указатель вертекс буфера   //Блоктровка буфера   if(FAILED(pVertBuff->Lock(0, sizeof(Vertex), (void**)&pVB, 0)))   return E_FAIL;   memcpy(pVB, Vertex, sizeof(Vertex)); //копирование данных   //Разблокировка буфера   pVertBuff->Unlock();   return S_OK;   }   void FreeD3D()   {   if(pVertBuff != NULL) pVertBuff->Release();   if(pDevice != NULL) pDevice->Release();   if(g_pD3D != NULL) g_pD3D->Release();   }   LRESULT CALLBACK WndProc(HWND hwnd, UINT msg,   WPARAM wparam, LPARAM lparam)   {   switch(msg)   {   case WM_DESTROY:   FreeD3D();   PostQuitMessage(0);   break;   }   return (DefWindowProc(hwnd, msg, wparam, lparam));   }   
        
  Code
   #include "stdafx.h"   int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,   LPSTR lpCmdLine, int nCmdShow)   {   //создание класса окна   WNDCLASSEX wc;   //Главный обработчик событий   MSG msg;   wc.cbSize = sizeof(WNDCLASSEX);   wc.style = CS_VREDRAW | CS_HREDRAW | CS_OWNDC | CS_DBLCLKS;   wc.lpfnWndProc = WndProc;   wc.cbClsExtra = 0;   wc.cbWndExtra = 0;   wc.hInstance = hInstance;   wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);   wc.hCursor = LoadCursor(NULL, IDC_ARROW);   wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);   wc.lpszMenuName = NULL;   wc.lpszClassName = L"TEST_WIN32";   wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);   //Регистрация созданного класса   RegisterClassEx(&wc);   HWND hwnd; //handle окна   //Создание окна   if(!(hwnd = CreateWindowEx(NULL, L"TEST_WIN32", L"База для DirectX", WS_OVERLAPPEDWINDOW | WS_VISIBLE,   CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL, NULL, hInstance, NULL)))   return 0;   //********   if(SUCCEEDED(InitD3D(hwnd)))   {   if(SUCCEEDED(InitVertBuff()))   {   ShowWindow(hwnd, nCmdShow); // Вывод окна   UpdateWindow(hwnd); // Апдейт окна   ZeroMemory(&msg, sizeof(msg));   while(msg.message != WM_QUIT)   {   if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))   {   TranslateMessage(&msg); // преобразование клав. ввода   DispatchMessage(&msg); // обработка и пересылка сообщ. в WinProc   }   else   RenderD3D();   }   }   }   //*********   return (int)(msg.wParam);   }   
        Как то так... 
Сообщение отредактировал DonKorleone  - Пятница, 30 Марта 2012, 16:56 
 
 
 
redinard Дата: Среда, 04 Апреля 2012, 23:18 | Сообщение # 85   
 
постоянный участник
Сейчас нет на сайте 
 
 Огромное спасибо, но мог бы кто нибудь помочь сделать код примерно так :   основную часть программы оставить в одном файле   
#include <windows.h>//заголовочный файл windows   #include "d3d9.h"//заголовочный файл DirectX   #pragma comment (lib, "d3d9.lib")//вызов библиотеки   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////   WNDCLASSEX wcex; //моздаём класс   HWND hwnd; //создаём дискриптор окна   MSG msg; //идентификатор сообщения   LPDIRECT3D9 pDirect3D = NULL; //главный обект Direct3D.это указатель на главный интерфейс IDirect3D9 для таботы с графикой.   LPDIRECT3DDEVICE9 pDirect3DDevice = NULL; //устройство   LPDIRECT3DVERTEXBUFFER9 pBufferVershin = NULL;//буфер вершин   struct CUSTOMVERTEX//структура определяющая формат вершин   {   float x, y, z, rhw;//координаты вершины   DWORD color; //цвет вершыны   };   #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)//формат содержания вершин   HINSTANCE hInst;   LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);   HRESULT IntialDirect3D(HWND hwnd);//инециалезация Direct3D   void RenderingDirect3D();//обявление рендера   void DeleteDirect3D();//обявление функции освобождения ресурсов   HRESULT InitialBufferVershin();   // Главная функция   int WINAPI WinMain(HINSTANCE hInstance,   HINSTANCE hPrevInstance,   LPSTR lpCmdLine,   int nCmdShow)   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////   {   wcex.cbSize = sizeof(WNDCLASSEX); // Размер всей структуры   wcex.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW;//Задание стиля окна   wcex.lpfnWndProc = WndProc; //Наша функция обработки событий   wcex.cbClsExtra = 0;   wcex.cbWndExtra = 0;   wcex.hInstance = hInstance;//Экземпляр приложения   wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));   wcex.hCursor = LoadCursor(NULL, IDC_ARROW);   wcex.hbrBackground = (HBRUSH) GetStockObject(GRAY_BRUSH);//цвет фона   wcex.lpszMenuName = NULL; //имя меню   wcex.lpszClassName = L"WINDOWSCLASS"; //Имя класса окна   wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION));// Иконка в заголовке окна   if (!RegisterClassEx(&wcex))   return (0);   if (!(hwnd = CreateWindow(   L"windowsclass", //Имя класса окна   L"ДиректХ", // Заголовок окна   WS_OVERLAPPEDWINDOW|WS_VISIBLE, //Стиль окна   100, 100, // Координаты левого верхнего угла   600, // Ширина окна   600, // Высота окна   NULL, // Дескриптор родительского окна   NULL, // Дескриптор меню   hInstance, // Экземпляр   NULL))) // Дополнительные параметры   return (0);   if (SUCCEEDED (IntialDirect3D(hwnd)))   {   if (SUCCEEDED (InitialBufferVershin() ))   {   ShowWindow (hwnd, SW_SHOWDEFAULT);   UpdateWindow (hwnd);   ZeroMemory (&msg, sizeof(msg));   while(msg.message != WM_QUIT)   {   if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))   {   TranslateMessage(&msg);   DispatchMessage(&msg);   }   else   RenderingDirect3D();//рендер   }   }   }   return 0;   }   ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////   LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)//здесь происходит обработка сообщений   {   switch (msg)   {   case WM_DESTROY:   {   DeleteDirect3D();   PostQuitMessage(0);   return (0);   }   }   return DefWindowProc(hwnd, msg, wparam, lparam);   }   ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////   //   //   // ИНИЦИАЛИЗАЦИЯ Direct3D   //   //   ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////   HRESULT IntialDirect3D(HWND hwnd)   {   if(NULL == (pDirect3D = Direct3DCreate9(D3D_SDK_VERSION)))//создаётся основной указатель на интерфейс IDirect3D9   return E_FAIL;   D3DDISPLAYMODE Display;//структура для соответствия текущих установок дисплея   if(FAILED(pDirect3D -> GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &Display)))//получаем текущий формат дисплея   return E_FAIL;   D3DPRESENT_PARAMETERS Direct3DParametr;//обект параметров представления Direct3DParametr   ZeroMemory(&Direct3DParametr, sizeof(Direct3DParametr));//очищает создаваемую структуру от мусора   Direct3DParametr.Windowed = TRUE;//видеорежим используемый нашим приложением   Direct3DParametr.SwapEffect = D3DSWAPEFFECT_DISCARD;//параметр опредиления размеров буфера   Direct3DParametr.BackBufferFormat = D3DFMT_UNKNOWN;//формат поверхности заднего буфера   if (FAILED(pDirect3D -> CreateDevice(D3DADAPTER_DEFAULT,   D3DDEVTYPE_HAL, hwnd,   D3DCREATE_SOFTWARE_VERTEXPROCESSING,   &Direct3DParametr, &pDirect3DDevice)))//обект интерфейса устройства   return E_FAIL;   return S_OK;   }   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    а рендер запилить в другой файл   
void RenderingDirect3D()   {   if (pDirect3DDevice == NULL) //проверяем ошибки   return;   pDirect3DDevice -> Clear(0,NULL,D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,255,0), 1.0f, 0);   pDirect3DDevice -> BeginScene();//начало сцены   //здесь происходит отрисовка сцены   pDirect3DDevice -> SetStreamSource(0,pBufferVershin, 0, sizeof(CUSTOMVERTEX));   pDirect3DDevice -> SetFVF(D3DFVF_CUSTOMVERTEX);   pDirect3DDevice -> DrawPrimitive (D3DPT_TRIANGLELIST, 0, 1);   pDirect3DDevice -> EndScene();   pDirect3DDevice -> Present(NULL, NULL, NULL, NULL);   }   void DeleteDirect3D()//функция освобождает захваченные ресурсы   {   if (pBufferVershin != NULL)   pBufferVershin -> Release();   if (pDirect3DDevice != NULL)   pDirect3DDevice -> Release();   if (pDirect3D != NULL)   pDirect3D -> Release();   }   HRESULT InitialBufferVershin()   {   CUSTOMVERTEX Vershin[] =   {   {300.0f, 300.0f, 0.5f, 1.0f, 0x00000fff,},   {150.0f, 300.0f, 0.5f, 1.0f, 0x00000fff,},   {150.0f, 150.0f, 0.5f, 1.0f, 0x00000fff,},   //x y z цвет   };   if (FAILED (pDirect3DDevice -> CreateVertexBuffer(   3 * sizeof(CUSTOMVERTEX),   0, D3DFVF_CUSTOMVERTEX,   D3DPOOL_DEFAULT,   &pBufferVershin, NULL)))   return E_FAIL;   void* pBV;   if (FAILED(pBufferVershin ->   Lock(0, sizeof(Vershin),(void**)&pBV,0)))   return E_FAIL;   memcpy(pBV, Vershin, sizeof(Vershin));//копирование   pBufferVershin -> Unlock();//разблокирование   return S_OK;   }
    я понимаю что мне это уже показали,но хотелось бы чтобы код был примерно в таком оформлении (мне так легче его воспринимать)Добавлено  (01.04.2012, 23:09) --------------------------------------------- извиняюсь,просмотрел бегло программу,пересмотрел её ещё раз оказывается всё так как надо и предельно понятно )
Добавлено  (04.04.2012, 23:18) --------------------------------------------- народ подскажите в чём ошибка ?   
   //render.h   #pragma comment(lib, "d3d9.lib")   #pragma comment(lib, "d3dx9.lib")   #include <windows.h>   #include "d3d9.h"   #include <d3dx9.h>   #include <mmsystem.h>//заголовочный файл для работы с системными функциями   //***********************************************************     LPDIRECT3D9 g_pD3D = NULL; //объявление главного объекта   LPDIRECT3DDEVICE9 pDirect3DDevice; //объявление девайса   LPDIRECT3DVERTEXBUFFER9 pVertBuff = NULL; //объявление вертекс буффера   struct CUSTOMVERTEX//структура определяющая формат вершин   {   float x, y, z, rhw;//координаты вершины   DWORD color; //цвет вершыны   };   #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)//формат содержания вершин   ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////   //   //   // ИНИЦИАЛИЗАЦИЯ Direct3D   //   //   ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////   HRESULT InitD3D(HWND hwnd)   {   if(NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION))) //создаётся основной указатель на интерфейс IDirect3D9   return E_FAIL;   D3DDISPLAYMODE Disp; //структура для соответствия текущих установок дисплея   if(FAILED(g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &Disp))) //получаем текущий формат дисплея   return E_FAIL;   //параметры показа   D3DPRESENT_PARAMETERS d3dpp; //обект параметров представления Direct3DParametr   ZeroMemory(&d3dpp, sizeof(d3dpp)); //очищает создаваемую структуру от мусора   d3dpp.Windowed = true; //видеорежим используемый нашим приложением   d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; //параметр опредиления размеров буфера   d3dpp.BackBufferFormat = Disp.Format; //формат поверхности заднего буфера   //создание девайса   if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &pDirect3DDevice)))//обект интерфейса устройства   	 return E_FAIL;   pDirect3DDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE);   pDirect3DDevice->SetRenderState(D3DRS_LIGHTING,FALSE);   return S_OK;   }   ///////////////////////////////////////////////////////////////////////////////////////////////////           void RenderD3D()   {   if(pDirect3DDevice==NULL)   	 return;   pDirect3DDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,0), 1.0f, 0);   pDirect3DDevice->BeginScene(); //начало сцены   //здесь происходит отрисовка сцены   pDirect3DDevice->SetStreamSource(0, pVertBuff, 0, sizeof(CUSTOMVERTEX));   //Установка формата вершин   pDirect3DDevice->SetFVF(D3DFVF_CUSTOMVERTEX);   pDirect3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 2);   pDirect3DDevice->EndScene(); //конец сцены   pDirect3DDevice->Present(NULL, NULL, NULL, NULL); //показать все   }   ///////////////////////////////////////////////////////////////////////////////////////////////////////////////   HRESULT InitVertBuff()   {   //проектируем вертексный буфер   CUSTOMVERTEX Vertex[] =   {   {1.0f, -1.0f, 0.0f, 0x00000fff}, //A   {-1.0f, -1.0f, 0.0f, 0xff000ff}, //B   {-1.0f, 1.0f, 0.0f, 0x00000ff}, //C   //X Y Z   {-1.0f, 1.0f, 0.0f, 0x00000fff}, //C   {1.0f, 1.0f, 0.0f, 0xff000fff}, //D   {1.0f, -1.0f, 0.0f, 0x00000fff}, //A   };   // | - кол-во вершин прямо пропорционально числу перед sizeof   if(FAILED(pDirect3DDevice->CreateVertexBuffer(   	 6*sizeof(CUSTOMVERTEX),   	 0, D3DFVF_CUSTOMVERTEX,   	 D3DPOOL_DEFAULT, &pVertBuff, NULL)))   return E_FAIL;   void *pVB; //временный указатель на указатель вертекс буфера     if(FAILED(pVertBuff->Lock(0, sizeof(Vertex), (void**)&pVB, 0))) //Блоктровка буфера   return E_FAIL;   memcpy(pVB, Vertex, sizeof(Vertex)); //копирование данных     pVertBuff->Unlock(); //Разблокировка буфера   return S_OK;   }   /////////////////////////////////////////////////   VOID Matrix()   {   	D3DXMATRIX MatrixWorld;   D3DXMATRIX MatrixView;   D3DXMATRIX MatrixProjection;   UINT Time = timeGetTime()% 5000;   	FLOAT Angle = Time*(2.0*D3DX_PI)/5000.0f;   	D3DXMatrixRotationY(&MatrixWorld,Angle);   	pDirect3DDevice->SetTransform(D3DTS_WORLD,&MatrixWorld);     D3DXMatrixLookAtLH(&MatrixView,&D3DXVECTOR3(0.0f,0.0f,-8.f),   		&D3DXVECTOR3(0.0f,0.0f,0.0f),   		&D3DXVECTOR3(0.0f,0.0f,0.0f));   	D3DXMatrixPerspectiveFovLH(&MatrixProjection,   		D3DX_PI/4,1.0f,1.0f,100.0f);   pDirect3DDevice->SetTransform(D3DTS_PROJECTION,&MatrixProjection);   }
    
   #include "render.h"   int WINAPI WinMain(HINSTANCE hInstance,   HINSTANCE hPrevInstance,   LPSTR lpCmdLine,   int nCmdShow)//ГЛАВНАЯ ФУНКЦИЯ   {     WNDCLASSEX wc; //создание класса окна   HWND hwnd; //создаём дискриптор окна   MSG msg; //идентификатор сообщения   //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////   wc.cbSize = sizeof(WNDCLASSEX); // Размер всей структуры   wc.style = CS_VREDRAW | CS_HREDRAW | CS_OWNDC | CS_DBLCLKS; //Задание стиля окн   		 wc.lpfnWndProc = WndProc; //Наша функция обработки событий   wc.cbClsExtra = 0;   wc.cbWndExtra = 0;   wc.hInstance = hInstance; //Экземпляр приложения   wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);   wc.hCursor = LoadCursor(NULL, IDC_ARROW);   wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); //цвет фона   wc.lpszMenuName = NULL; //имя меню   wc.lpszClassName = L"TEST_WIN32"; //Имя класса окна   wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);     //Регистрация созданного класса   RegisterClassEx(&wc); // Иконка в заголовке окна     /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////   //Создание окна   if(!(hwnd = CreateWindowEx(   NULL,   L"TEST_WIN32", //Имя класса окна   L"База для DirectX", // Заголовок окна   WS_OVERLAPPEDWINDOW | WS_VISIBLE,   CW_USEDEFAULT, CW_USEDEFAULT, // Координаты левого верхнего угла   800, // Ширина окна   600, // Высота окна   NULL, // Дескриптор родительского окна   NULL, // Дескриптор меню   hInstance, // Экземпляр   NULL))) // Дополнительные параметры   return 0;   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////   if(SUCCEEDED(InitD3D(hwnd)))   {   if(SUCCEEDED(InitVertBuff()))   {   ShowWindow(hwnd, nCmdShow); // Вывод окна   UpdateWindow(hwnd); // Апдейт окна   ZeroMemory(&msg, sizeof(msg));   while(msg.message != WM_QUIT)   {   if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))   {   TranslateMessage(&msg); // преобразование клав. ввода   DispatchMessage(&msg); // обработка и пересылка сообщ. в WinProc   }   else   RenderD3D(); //РЕНДЕР   }   }   }   return 0; //(int)(msg.wParam);   }   ////////////////////////////////////////////////////////////////////////////////////////////////////////////   
     
Я белый и пушистый но имею когти и зубы 
 
 
 
Zweifx Дата: Среда, 04 Апреля 2012, 23:42 | Сообщение # 86   
 
был не раз
Сейчас нет на сайте 
 
 redinard ,   Похоже библиотека winmm отсутствует, добавь ее. 
Если никто не знает, это то же самое, как если бы этого не было вовсе. 
 
 
 
redinard Дата: Четверг, 05 Апреля 2012, 00:02 | Сообщение # 87   
 
постоянный участник
Сейчас нет на сайте 
 
 да спасибо я это уже сам понялДобавлено  (05.04.2012, 00:02) --------------------------------------------- вот только для меня остаётся загадкой то что вместо вращающегося синего квадрата у меня чёрный экран
 
Я белый и пушистый но имею когти и зубы 
 
 
 
Zweifx Дата: Четверг, 05 Апреля 2012, 00:15 | Сообщение # 88   
 
был не раз
Сейчас нет на сайте 
 
 redinard ,   Ты не перевел формат вершин из D3DFVF_XYZRHW в D3DFVF_XYZ во первых, во вторых ты не применил функцию матриц, в третьих у тебя допущена ошибка в самой функции матрицы( Ты не написал SetTransform( D3DTS_VIEW, &MatrixView ) Установку матрицы вида).   В общем я исправил твои ошибки, вот код:   
  Code
   #pragma comment(lib, "d3d9.lib")   #pragma comment(lib, "d3dx9.lib")   #include <windows.h>   #include "d3d9.h"   #include <d3dx9.h>   #include <mmsystem.h>//заголовочный файл для работы с системными функциями   //***********************************************************   LPDIRECT3D9 g_pD3D = NULL; //объявление главного объекта   LPDIRECT3DDEVICE9 pDirect3DDevice; //объявление девайса   LPDIRECT3DVERTEXBUFFER9 pVertBuff = NULL; //объявление вертекс буффера   VOID Matrix();   struct CUSTOMVERTEX//структура определяющая формат вершин   {       float x, y, z; //координаты вершины       DWORD color; //цвет вершыны   };   #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ | D3DFVF_DIFFUSE)//формат содержания вершин   // ИНИЦИАЛИЗАЦИЯ Direct3D   HRESULT InitD3D(HWND hwnd)   {       if(NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION))) //создаётся основной указатель на интерфейс IDirect3D9       return E_FAIL;       D3DDISPLAYMODE Disp; //структура для соответствия текущих установок дисплея       if(FAILED(g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &Disp))) //получаем текущий формат дисплея           return E_FAIL;       //параметры показа       D3DPRESENT_PARAMETERS d3dpp; //обект параметров представления Direct3DParametr       ZeroMemory(&d3dpp, sizeof(d3dpp)); //очищает создаваемую структуру от мусора       d3dpp.Windowed = true; //видеорежим используемый нашим приложением       d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; //параметр опредиления размеров буфера       d3dpp.BackBufferFormat = Disp.Format; //формат поверхности заднего буфера       //создание девайса       if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd,                      D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &pDirect3DDevice)))//обект интерфейса устройства           return E_FAIL;       pDirect3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);       pDirect3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE);   return S_OK;   }   ///////////////////////////////////////////////////////////////////////////////////////////////////   void RenderD3D()   {       if(pDirect3DDevice==NULL)           return;       pDirect3DDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(100,100,100), 1.0f, 0);       pDirect3DDevice->BeginScene(); //начало сцены       Matrix();       //здесь происходит отрисовка сцены       pDirect3DDevice->SetStreamSource(0, pVertBuff, 0, sizeof(CUSTOMVERTEX));       //Установка формата вершин       pDirect3DDevice->SetFVF(D3DFVF_CUSTOMVERTEX);       pDirect3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 2);       pDirect3DDevice->EndScene(); //конец сцены       pDirect3DDevice->Present(NULL, NULL, NULL, NULL); //показать все   }   ///////////////////////////////////////////////////////////////////////////////////////////////////////////////   HRESULT InitVertBuff()   {       //проектируем вертексный буфер       CUSTOMVERTEX Vertex[] =       {           {1.0f, -1.0f, 0.0f,  0x00000ff}, //A           {-1.0f, -1.0f, 0.0f, 0xff000ff}, //B           {-1.0f, 1.0f, 0.0f,  0x00000ff}, //C           //X Y Z           {-1.0f, 1.0f, 0.0f, 0x00000ff}, //C           {1.0f, 1.0f, 0.0f,  0xff000ff}, //D           {1.0f, -1.0f, 0.0f, 0x00000ff}, //A       };       // | - кол-во вершин прямо пропорционально числу перед sizeof       if(FAILED(pDirect3DDevice->CreateVertexBuffer(6*sizeof(CUSTOMVERTEX), 0,                      D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &pVertBuff, NULL)))           return E_FAIL;       void *pVB; //временный указатель на указатель вертекс буфера       if(FAILED(pVertBuff->Lock(0, sizeof(Vertex), (void**)&pVB, 0))) //Блоктровка буфера           return E_FAIL;       memcpy(pVB, Vertex, sizeof(Vertex)); //копирование данных       pVertBuff->Unlock(); //Разблокировка буфера   return S_OK;   }   /////////////////////////////////////////////////   VOID Matrix()   {       D3DXMATRIX MatrixWorld;       D3DXMATRIX MatrixView;       D3DXMATRIX MatrixProjection;       UINT Time = timeGetTime() % 5000;       FLOAT Angle = Time*(2.0*D3DX_PI)/5000.0f;       D3DXMatrixRotationY(&MatrixWorld, Angle);       pDirect3DDevice->SetTransform(D3DTS_WORLD, &MatrixWorld);       D3DXMatrixLookAtLH(&MatrixView,&D3DXVECTOR3(0.0f,0.0f,-8.0f), &D3DXVECTOR3(0.0f,0.0f,0.0f), &D3DXVECTOR3(0.0f,1.0f,0.0f));       pDirect3DDevice->SetTransform( D3DTS_VIEW, &MatrixView );       D3DXMatrixPerspectiveFovLH(&MatrixProjection, D3DX_PI/4, 1.0f, 1.0f, 100.0f);       pDirect3DDevice->SetTransform(D3DTS_PROJECTION,&MatrixProjection);   }   
        
  Code
   #include "render.h"   LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)//здесь происходит обработка сообщений   {       switch (msg)       {           case WM_DESTROY:           {               PostQuitMessage(0);               return 0;           }       }       return DefWindowProc(hwnd, msg, wparam, lparam);   }   int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)//ГЛАВНАЯ ФУНКЦИЯ   {       WNDCLASSEX wc; //создание класса окна       HWND hwnd; //создаём дискриптор окна       MSG msg; //идентификатор сообщения   //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////       wc.cbSize = sizeof(WNDCLASSEX); // Размер всей структуры       wc.style = CS_VREDRAW | CS_HREDRAW | CS_OWNDC | CS_DBLCLKS; //Задание стиля окн       wc.lpfnWndProc = WndProc; //Наша функция обработки событий       wc.cbClsExtra = 0;       wc.cbWndExtra = 0;       wc.hInstance = hInstance; //Экземпляр приложения       wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);       wc.hCursor = LoadCursor(NULL, IDC_ARROW);       wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); //цвет фона       wc.lpszMenuName = NULL; //имя меню       wc.lpszClassName = "TEST_WIN32"; //Имя класса окна       wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);       //Регистрация созданного класса       RegisterClassEx(&wc); // Иконка в заголовке окна   /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////       //Создание окна       if(!(hwnd = CreateWindowEx(NULL, "TEST_WIN32", "База для DirectX", WS_OVERLAPPEDWINDOW | WS_VISIBLE,                      CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL, NULL, hInstance, NULL)))                      return 0;   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////       if(SUCCEEDED(InitD3D(hwnd)))       {           if(SUCCEEDED(InitVertBuff()))           {           ShowWindow(hwnd, nCmdShow); // Вывод окна           UpdateWindow(hwnd); // Апдейт окна           ZeroMemory(&msg, sizeof(msg));               while(msg.message != WM_QUIT)               {                   if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))                   {                   TranslateMessage(&msg); // преобразование клав. ввода                   DispatchMessage(&msg); // обработка и пересылка сообщ. в WinProc                   }                   else                   RenderD3D(); //РЕНДЕР               }           }       }       return 0;   }   ////////////////////////////////////////////////////////////////////////////////////////////////////////////   
     
Если никто не знает, это то же самое, как если бы этого не было вовсе. 
 
 
 
redinard Дата: Четверг, 05 Апреля 2012, 00:47 | Сообщение # 89   
 
постоянный участник
Сейчас нет на сайте 
 
 огромное спасибо 
Я белый и пушистый но имею когти и зубы 
 
 
 
Тритон Дата: Понедельник, 16 Апреля 2012, 08:22 | Сообщение # 90   
постоянный участник
Сейчас нет на сайте 
 
 Quote  (LQarum )
*(GameBoard+h*HEIGHT+w)=X; 
 Перепутаны размеры: если без умножения у тебя w. то имеешь номер ряда в w и номер ряда в h, то есть размер ряда - диапазон по w. то есть WIDTH. 
Не всё так плохо, как оно есть на самом деле.