Результаты поиска
redinard Дата: Вторник, 09 Октября 2012, 15:26 | Сообщение # 301 | Тема: помощь в разработке движка
постоянный участник
Сейчас нет на сайте
да действительно я сейчас копирую код,но попутно в нём пытаюсь разобратся,когда я доберусь до конца книги,я буду преобразовывать этот код в движок,но пока что мне надо хотябы переписать его и убедится что он работаетДобавлено (09.10.2012, 15:26) --------------------------------------------- никак не могу найти корректное решение это проблеммы
Я белый и пушистый но имею когти и зубы
redinard Дата: Вторник, 09 Октября 2012, 13:51 | Сообщение # 302 | Тема: помощь в разработке движка
постоянный участник
Сейчас нет на сайте
ОГРОМНОЕ СПАСИБО !!!Добавлено (09.10.2012, 13:51) --------------------------------------------- народ,помогите исправить ошибки,я всю пару пропарился и несмог понять как их исправить
Code
#pragma comment(lib, "winmm.lib") #pragma comment(lib, "d3d9.lib") #pragma comment(lib, "d3dx9.lib") #include <windows.h> #include "d3d9.h" #include <d3dx9.h> #include <d3dx9core.h> #include <mmsystem.h>//заголовочный файл для работы с системными функциями //*********************************************************** LPDIRECT3D9 g_pD3D = NULL; //объявление главного объекта LPDIRECT3DDEVICE9 pDirect3DDevice; //объявление девайса LPDIRECT3DVERTEXBUFFER9 pVertBuff = NULL; //объявление вертекс буффера LPDIRECT3DINDEXBUFFER9 pBufferIndex = NULL; // Индексный буфер LPD3DXFONT pFont = NULL; RECT Rec; HFONT hFont; void LightMaterial(); void Matrix(); struct CUSTOMVERTEX//структура определяющая формат вершин { float x, y, z;//координаты вершины float nx,ny,nz; //нормали }; #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_NORMAL)//формат содержания вершин /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // // // ИНИЦИАЛИЗАЦИЯ 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 = false; //видеорежим используемый нашим приложением d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; //параметр опредиления размеров буфера d3dpp.BackBufferFormat = Disp.Format; //формат поверхности заднего буфера d3dpp.EnableAutoDepthStencil = true;//значение показывающее возможность создания Z буфера d3dpp.AutoDepthStencilFormat = D3DFMT_D16;//формат поверхности Z буфера d3dpp.BackBufferWidth = GetSystemMetrics(SM_CXSCREEN);//берём размер разрешения экрана и передаём параметрам d3dpp.BackBufferHeight = GetSystemMetrics(SM_CYSCREEN);// d3dpp.BackBufferCount = 3;// кол-во заданных буферов d3dpp.FullScreen_RefreshRateInHz = Disp.RefreshRate;//частта обновления экрана //создание девайса if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &pDirect3DDevice)))//обект интерфейса устройства return E_FAIL; pDirect3DDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW);//отключить отсечение pDirect3DDevice->SetRenderState(D3DRS_LIGHTING,FALSE);//отключить освещение Direct3D pDirect3DDevice->SetRenderState(D3DRS_ZENABLE,D3DZB_TRUE);//включаем Z буфер return S_OK; } /////////////////////////////////////////////////////////////////////////////////////////////////// void RenderD3D() { if(pDirect3DDevice==NULL) return; pDirect3DDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(60,100,150), 1.0f, 0); //цвет фона pDirect3DDevice->BeginScene(); //начало сцены //здесь происходит отрисовка сцены Matrix(); LightMaterial(); //здесь происходит отрисовка сцены pDirect3DDevice->SetStreamSource(0, pVertBuff, 0, sizeof(CUSTOMVERTEX)); //Установка формата вершин pDirect3DDevice->SetFVF(D3DFVF_CUSTOMVERTEX); pDirect3DDevice->SetIndices(pBufferIndex); pDirect3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 12); //вывод обекта //вывод текаста DrawMyText(pDirect3DDevice, hFont, "Текст в DirectX", 10,10,500,700,D3DCOLOR_ARGB(250,250,250,50)); pDirect3DDevice->EndScene(); //конец сцены pDirect3DDevice->Present(NULL, NULL, NULL, NULL); //показать все } /////////////////////////////////////////////////////////////////////////////////////////////////////////////// HRESULT InitVertBuff() //internalObject { //проектируем вертексный буфер CUSTOMVERTEX Vertex[] = { { 1.0f,-1.0f, 1.0f, 0.0f,0.0f,-1.0f }, //А { -1.0f, 1.0f, 1.0f, 0.0f,0.0f,-1.0f }, //С { -1.0f,-1.0f, 1.0f, 0.0f,0.0f,-1.0f }, //В { -1.0f, 1.0f, 1.0f, 0.0f,0.0f,-1.0f}, //C { 1.0f,-1.0f, 1.0f, 0.0f,0.0f,-1.0f }, //A { 1.0f, 1.0f, 1.0f, 0.0f,0.0f,-1.0f }, //D { -1.0f,-1.0f, 1.0f, -1.0f,0.0f,0.0f }, //А2 { -1.0f, 1.0f,-1.0f, -1.0f,0.0f,0.0f }, //С2 { -1.0f,-1.0f,-1.0f, -1.0f,0.0f,0.0f }, //В2 { -1.0f, 1.0f,-1.0f, -1.0f,0.0f,0.0f }, //C2 { -1.0f,-1.0f, 1.0f, -1.0f,0.0f,0.0f }, //A2 { -1.0f, 1.0f, 1.0f, -1.0f,0.0f,0.0f }, //D2 { 1.0f,-1.0f,-1.0f, 0.0f,0.0f,1.0f }, //А3 { -1.0f,-1.0f,-1.0f, 0.0f,0.0f,1.0f }, //В3 { -1.0f, 1.0f,-1.0f, 0.0f,0.0f,1.0f}, //С3 { -1.0f, 1.0f,-1.0f, 0.0f,0.0f,1.0f }, //C3 { 1.0f, 1.0f,-1.0f, 0.0f,0.0f,1.0f }, //D3 { 1.0f,-1.0f,-1.0f, 0.0f,0.0f,1.0f }, //A3 { 1.0f,-1.0f,-1.0f, 1.0f,0.0f,0.0f }, //А4 { 1.0f, 1.0f, 1.0f, 1.0f,0.0f,0.0f }, //С4 { 1.0f,-1.0f, 1.0f, 1.0f,0.0f,0.0f }, //В4 { 1.0f, 1.0f, 1.0f, 1.0f,0.0f,0.0f}, //C4 { 1.0f,-1.0f,-1.0f, 1.0f,0.0f,0.0f }, //A4 { 1.0f, 1.0f,-1.0f, 1.0f,0.0f,0.0f}, //D4 { 1.0f, 1.0f, 1.0f, 0.0f,-1.0f,0.0f }, //А5 { -1.0f, 1.0f,-1.0f, 0.0f,-1.0f,0.0f }, //С5 { -1.0f, 1.0f, 1.0f, 0.0f,-1.0f,0.0f}, //В5 { -1.0f, 1.0f,-1.0f, 0.0f,-1.0f,0.0f }, //C5 { 1.0f, 1.0f, 1.0f, 0.0f,-1.0f,0.0f }, //A5 { 1.0f, 1.0f,-1.0f, 0.0f,-1.0f,0.0f}, //D5 { 1.0f,-1.0f, 1.0f, 0.0f,1.0f,0.0f }, //А6 { -1.0f,-1.0f, 1.0f, 0.0f,1.0f,0.0f}, //В6 { -1.0f,-1.0f,-1.0f, 0.0f,1.0f,0.0f}, //С6 { -1.0f,-1.0f,-1.0f, 0.0f,1.0f,0.0f }, //C6 { 1.0f,-1.0f,-1.0f, 0.0f,1.0f,0.0f }, //D6 { 1.0f,-1.0f, 1.0f, 0.0f,1.0f,0.0f }, //A6 }; const unsigned short Index[]={ 0,1,2, 2,3,0, 4,5,6, 6,7,4, 8,9,10, 10,11,8, 12,13,14, 14,15,12, 16,17,18, 18,19,16, 20,21,22, 22,23,20, }; // | - кол-во вершин прямо пропорционально числу перед sizeof if(FAILED(pDirect3DDevice->CreateVertexBuffer( 36*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,MatrixWorldX;//мировая матрица D3DXMATRIX MatrixWorldY,MatrixWorldZ; D3DXMATRIX MatrixView;//матрица вида D3DXMATRIX MatrixProjection;//матрица прекции //мировая матрица UINT Time = timeGetTime()% 5000; FLOAT Angle = Time*(2.0f * D3DX_PI)/5000.0f; D3DXMatrixRotationY(&MatrixWorldY,Angle); D3DXMatrixRotationX(&MatrixWorldX,Angle); D3DXMatrixMultiply(&MatrixWorld,&MatrixWorldX,&MatrixWorldY); pDirect3DDevice->SetTransform(D3DTS_WORLD,&MatrixWorld); //матрица вида D3DXMatrixLookAtLH(&MatrixView,&D3DXVECTOR3(0.0f,0.0f,-8.f), &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); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // // // функция DrawMyText() // вывод текста на экран // // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// VOID DrawMyText(LPDIRECT3DDEVICE9 pDirect3DDevice,HFONT hFont, char* StrokaTexta,int x,int y,int x1, int y1,D3DCOLOR MyColor) { //создаём шрифт hFont = CreateFont(30, 10, 0, 0,FW_NORMAL,FALSE,FALSE,0,1,0, 0, 0, DEFAULT_PITCH|FF_MODERN, "Arial"); //координаты прямоугольника Rec.left = x; Rec.top = y; Rec.right = x1; Rec.bottom = y1; //инициализируем шрифт D3DXCreateFont(pDirect3DDevice, hFont, &pFont); //начало pFont -> Begin(); //вывод текста pFont -> DrawText(StrokaTexta, -1, &Rec, DT_WORDBREAK, MyColor); //конец pFont ->End(); } VOID LightMaterial() { D3DMATERIAL9 Material; //материал D3DLIGHT9 Light; //свет //установим материал ZeroMemory(&Material,sizeof(D3DMATERIAL9)); Material.Diffuse.r = Material.Ambient.r = 1.0f; Material.Diffuse.g = Material.Ambient.g = 1.0f; Material.Diffuse.b = Material.Ambient.b = 0.0f; Material.Diffuse.a = Material.Ambient.a = 1.0f; pDirect3DDevice-> SetMaterial(&Material); D3DXVECTOR3 VectorDir; //установим свет ZeroMemory(&Light,sizeof(D3DLIGHT9)); Light.Type = D3DLIGHT_DIRECTIONAL; Light.Diffuse.r = 1.0f; Light.Diffuse.g = 1.0f; Light.Diffuse.b = 1.0f; Light.Range = 1000.f; //установим нормаль VectorDir = D3DXVECTOR3(0.0f,0.0f,1.0f), D3DXVec3Normalize((D3DXVECTOR3*)&Light.Direction,&VectorDir); pDirect3DDevice -> SetLight(0,&Light); pDirect3DDevice -> LightEnable(0,TRUE); pDirect3DDevice -> SetRenderState(D3DRS_LIGHTING,TRUE); pDirect3DDevice -> SetRenderState(D3DRS_AMBIENT,0); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void FreeD3D()//функция освобождает захваченные ресурсы { if(pVertBuff != NULL) pVertBuff->Release(); if(pDirect3DDevice != NULL) pDirect3DDevice->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; } case WM_KEYDOWN: { if(wparam == VK_ESCAPE) PostQuitMessage(0); return 0; } } return (DefWindowProc(hwnd, msg, wparam, lparam)); }
Я белый и пушистый но имею когти и зубы
redinard Дата: Четверг, 04 Октября 2012, 13:18 | Сообщение # 303 | Тема: помощь в разработке движка
постоянный участник
Сейчас нет на сайте
можите пожалуйста показать как это правильно сделать,потому что я делаю практичесски 1 в 1 как в книге Горнакова,но вот результатДобавлено (04.10.2012, 13:18) --------------------------------------------- хотя я сам приметив писал не так как в книге,пожскажите правельный индекс буфер к нему,так как проект я начал давно и на лето забросил,а теперь толком не помню что к чему
Я белый и пушистый но имею когти и зубы
redinard Дата: Четверг, 04 Октября 2012, 12:29 | Сообщение # 304 | Тема: помощь в разработке движка
постоянный участник
Сейчас нет на сайте
так я просто отключу отсечение,а уменя проблемма заключается в том что осекаются лицевые грани вместо тыльных
Я белый и пушистый но имею когти и зубы
redinard Дата: Четверг, 04 Октября 2012, 01:02 | Сообщение # 305 | Тема: помощь в разработке движка
постоянный участник
Сейчас нет на сайте
Всем привет,я начал разработку собственного движка для написания курсовой работы и для дальнейшего его развития,всё ишло гладко до недавна пока я не нарвался на такую проблемму,которую можете увидеть сами,вот код: render.h Code
#pragma comment(lib, "winmm.lib") #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; //объявление вертекс буффера LPDIRECT3DINDEXBUFFER9 pBufferIndex = NULL; // Индексный буфер void Matrix(); struct CUSTOMVERTEX//структура определяющая формат вершин { float x, y, z, rhw;//координаты вершины 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; //формат поверхности заднего буфера d3dpp.EnableAutoDepthStencil = true;//значение показывающее возможность создания Z буфера d3dpp.AutoDepthStencilFormat = D3DFMT_D16;//формат поверхности Z буфера //создание девайса if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &pDirect3DDevice)))//обект интерфейса устройства return E_FAIL; pDirect3DDevice->SetRenderState(D3DRS_CULLMODE,D3DCULL_CCW);//отключить отсечение pDirect3DDevice->SetRenderState(D3DRS_LIGHTING,FALSE);//отключить освещение Direct3D pDirect3DDevice->SetRenderState(D3DRS_ZENABLE,D3DZB_TRUE);//включаем Z буфер return S_OK; } /////////////////////////////////////////////////////////////////////////////////////////////////// void RenderD3D() { if(pDirect3DDevice==NULL) return; pDirect3DDevice->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(60,100,150), 1.0f, 0); //цвет фона pDirect3DDevice->BeginScene(); //начало сцены Matrix(); //здесь происходит отрисовка сцены pDirect3DDevice->SetStreamSource(0, pVertBuff, 0, sizeof(CUSTOMVERTEX)); //Установка формата вершин pDirect3DDevice->SetFVF(D3DFVF_CUSTOMVERTEX); pDirect3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 12); pDirect3DDevice->EndScene(); //конец сцены pDirect3DDevice->Present(NULL, NULL, NULL, NULL); //показать все } /////////////////////////////////////////////////////////////////////////////////////////////////////////////// HRESULT InitVertBuff() { //проектируем вертексный буфер CUSTOMVERTEX Vertex[] = { { 1.0f,-1.0f, 1.0f, 0x00000fff, }, //А { -1.0f,-1.0f, 1.0f, 0xff000fff, }, //В { -1.0f, 1.0f, 1.0f, 0x00000fff, }, //С { -1.0f, 1.0f, 1.0f, 0x00000fff, }, //C { 1.0f, 1.0f, 1.0f, 0xff000fff, }, //D { 1.0f,-1.0f, 1.0f, 0x00000fff, }, //A { -1.0f,-1.0f, 1.0f, 0x00000fff, }, //А2 { -1.0f,-1.0f,-1.0f, 0x00000fff, }, //В2 { -1.0f, 1.0f,-1.0f, 0x00000fff, }, //С2 { -1.0f, 1.0f,-1.0f, 0x00000fff, }, //C2 { -1.0f, 1.0f, 1.0f, 0x00000fff, }, //D2 { -1.0f,-1.0f, 1.0f, 0x00000fff, }, //A2 { 1.0f,-1.0f,-1.0f, 0xfff00000, }, //А3 { -1.0f,-1.0f,-1.0f, 0xfff00000, }, //В3 { -1.0f, 1.0f,-1.0f, 0xfff00000, }, //С3 { -1.0f, 1.0f,-1.0f, 0xfff00000, }, //C3 { 1.0f, 1.0f,-1.0f, 0xfff00000, }, //D3 { 1.0f,-1.0f,-1.0f, 0xfff00000, }, //A3 { 1.0f,-1.0f,-1.0f, 0x0000ffff, }, //А4 { 1.0f,-1.0f, 1.0f, 0x0000ffff, }, //В4 { 1.0f, 1.0f, 1.0f, 0x0000ffff, }, //С4 { 1.0f, 1.0f, 1.0f, 0x0000ffff, }, //C4 { 1.0f, 1.0f,-1.0f, 0x0000ffff, }, //D4 { 1.0f,-1.0f,-1.0f, 0x0000ffff, }, //A4 { 1.0f, 1.0f, 1.0f, 0x00000fff, }, //А5 { -1.0f, 1.0f, 1.0f, 0x00000fff, }, //В5 { -1.0f, 1.0f,-1.0f, 0x00000fff, }, //С5 { -1.0f, 1.0f,-1.0f, 0x00000fff, }, //C5 { 1.0f, 1.0f,-1.0f, 0x00000fff, }, //D5 { 1.0f, 1.0f, 1.0f, 0x00000fff, }, //A5 { 1.0f,-1.0f, 1.0f, 0x00000fff, }, //А6 { -1.0f,-1.0f, 1.0f, 0x00000fff, }, //В6 { -1.0f,-1.0f,-1.0f, 0x00000fff, }, //С6 { -1.0f,-1.0f,-1.0f, 0x00000fff, }, //C6 { 1.0f,-1.0f,-1.0f, 0x00000fff, }, //D6 { 1.0f,-1.0f, 1.0f, 0x00000fff, }, //A6 }; const unsigned short Index[]={ 0,1,2, 2,3,0, 4,5,6, 6,7,4, 8,9,10, 10,11,8, 12,13,14, 14,15,12, 16,17,18, 18,19,16, 20,21,22, 22,23,20, }; // | - кол-во вершин прямо пропорционально числу перед sizeof if(FAILED(pDirect3DDevice->CreateVertexBuffer( 36*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,MatrixWorldX;//мировая матрица D3DXMATRIX MatrixWorldY,MatrixWorldZ; D3DXMATRIX MatrixView;//матрица вида D3DXMATRIX MatrixProjection;//матрица прекции //мировая матрица UINT Time = timeGetTime()% 5000; FLOAT Angle = Time*(2.0f * D3DX_PI)/5000.0f; D3DXMatrixRotationY(&MatrixWorldY,Angle); D3DXMatrixRotationX(&MatrixWorldX,Angle); D3DXMatrixMultiply(&MatrixWorld,&MatrixWorldX,&MatrixWorldY); pDirect3DDevice->SetTransform(D3DTS_WORLD,&MatrixWorld); //матрица вида D3DXMatrixLookAtLH(&MatrixView,&D3DXVECTOR3(0.0f,0.0f,-8.f), &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); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void FreeD3D()//функция освобождает захваченные ресурсы { if(pVertBuff != NULL) pVertBuff->Release(); if(pDirect3DDevice != NULL) pDirect3DDevice->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)); }
window.cpp Code
#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); } ////////////////////////////////////////////////////////////////////////////////////////////////////////////
подскажите где я допустил ошибку
Я белый и пушистый но имею когти и зубы
redinard Дата: Понедельник, 09 Апреля 2012, 02:22 | Сообщение # 306 | Тема: вопросы по книге
постоянный участник
Сейчас нет на сайте
спасибо Добавлено (09.04.2012, 02:22) --------------------------------------------- народ востанавливаю эту давно забытую тему (так как наконец то разрешили размещение книги),для того чтобы посмотреть вашу критику по поводу следующей книги:книга
Я белый и пушистый но имею когти и зубы
Сообщение отредактировал redinard - Понедельник, 09 Апреля 2012, 02:24
redinard Дата: Четверг, 05 Апреля 2012, 18:46 | Сообщение # 307 | Тема: [2D] Just RPG
постоянный участник
Сейчас нет на сайте
прикольно,мне нравится )
Я белый и пушистый но имею когти и зубы
redinard Дата: Четверг, 05 Апреля 2012, 00:47 | Сообщение # 308 | Тема: Необходима помощь в освоении азов создания игр
постоянный участник
Сейчас нет на сайте
огромное спасибо
Я белый и пушистый но имею когти и зубы
redinard Дата: Четверг, 05 Апреля 2012, 00:02 | Сообщение # 309 | Тема: Необходима помощь в освоении азов создания игр
постоянный участник
Сейчас нет на сайте
да спасибо я это уже сам понялДобавлено (05.04.2012, 00:02) --------------------------------------------- вот только для меня остаётся загадкой то что вместо вращающегося синего квадрата у меня чёрный экран
Я белый и пушистый но имею когти и зубы
redinard Дата: Среда, 04 Апреля 2012, 23:18 | Сообщение # 310 | Тема: Необходима помощь в освоении азов создания игр
постоянный участник
Сейчас нет на сайте
Огромное спасибо, но мог бы кто нибудь помочь сделать код примерно так : основную часть программы оставить в одном файле
#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); } ////////////////////////////////////////////////////////////////////////////////////////////////////////////
Я белый и пушистый но имею когти и зубы
redinard Дата: Пятница, 30 Марта 2012, 15:57 | Сообщение # 311 | Тема: Необходима помощь в освоении азов создания игр
постоянный участник
Сейчас нет на сайте
можешь пожалуйста показать на примере рабочего кода,принцып разбиения я знаю,но реализовать мне так и не удалось
Я белый и пушистый но имею когти и зубы
redinard Дата: Четверг, 29 Марта 2012, 22:57 | Сообщение # 312 | Тема: Необходима помощь в освоении азов создания игр
постоянный участник
Сейчас нет на сайте
народ,вот такой вопрос,у меня есть прога:
#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; }
как мне её разбить чтобы часть кода отвечающая непосредственно за инициализацию была в этом же файле,а рендер в отдельном файле ?
Я белый и пушистый но имею когти и зубы
redinard Дата: Среда, 28 Марта 2012, 23:46 | Сообщение # 313 | Тема: Необходима помощь в освоении азов создания игр
постоянный участник
Сейчас нет на сайте
книга замечательная,но вот последние 2 примера просто напичканы ошибками
Я белый и пушистый но имею когти и зубы
redinard Дата: Среда, 28 Марта 2012, 13:16 | Сообщение # 314 | Тема: Необходима помощь в освоении азов создания игр
постоянный участник
Сейчас нет на сайте
та без разницы какую студию использовать,суть програмного кода от этого не изменится
Я белый и пушистый но имею когти и зубы
redinard Дата: Вторник, 27 Марта 2012, 23:11 | Сообщение # 315 | Тема: Необходима помощь в освоении азов создания игр
постоянный участник
Сейчас нет на сайте
почитал немнго,инициализация приложения у него как то выполнена не понятно ...Добавлено (27.03.2012, 23:11) --------------------------------------------- Народ,назрел вот такой вопрос,у меня есть код инициализации DirectX приложения
#include <windows.h> #include <d3d9.h> #include <d3dx9.h> #pragma comment (lib,"d3d9.lib") #pragma comment (lib,"d3dx9.lib") WNDCLASSEX windowsclass; MSG msg; HWND hWnd; LPDIRECT3D9 pDirect3D = 0; LPDIRECT3DDEVICE9 pDirect3DDevice = 0; HRESULT InitialDX(HWND hWnd); // Функция инициализации ДХ void Render(); // Функция рендеринга(отрисовки) void ReleaseDX(); // Функция освобождения устройств. LRESULT CALLBACK WinProc(HWND hWnd,UINT msg,WPARAM wparam,LPARAM lparam)//функция обработки сообщений { switch(msg) { case WM_DESTROY: // закрытие(уничтожение) окна { ReleaseDX(); // Освобождение устройств PostQuitMessage(0); return 0; } } return (DefWindowProc(hWnd,msg,wparam,lparam)); } int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd) { // инициализация класа окна windowsclass.cbSize = sizeof(windowsclass); // Размер всей структуры windowsclass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); //Цвет фона окна windowsclass.hCursor = LoadCursor(NULL, IDC_ARROW); //Вид курсора windowsclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); //Иконка приложения windowsclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); // Иконка в заголовке окна windowsclass.hInstance = hInstance; //Экземпляр приложения windowsclass.lpfnWndProc = WinProc; //Наша функция обработки событий windowsclass.lpszClassName = L"windowsclass"; //Имя класса окна windowsclass.style = CS_DBLCLKS|CS_OWNDC|CS_HREDRAW|CS_VREDRAW; //Задание стиля окна RegisterClassEx(&windowsclass); //Регистрация класа окна в операционной системе //Создание окна hWnd = CreateWindow( L"windowsclass", //Имя класса окна L"ДиректХ", // Заголовок окна WS_OVERLAPPEDWINDOW|WS_VISIBLE, //Стиль окна 100, 100, // Координаты левого верхнего угла 600, // Ширина окна 600, // Высота окна NULL, // Дескриптор родительского окна NULL, // Дескриптор меню hInstance, // Экземпляр NULL); // Дополнительные параметры if (SUCCEEDED(InitialDX(hWnd))) //Инициализация ДХ { ShowWindow(hWnd, nShowCmd); // Вывод окна UpdateWindow(hWnd); // Обновление окна ZeroMemory(&msg,sizeof(msg)); //Очистка сообщений while(msg.message!=WM_QUIT) // Цикл обработки сообщений { if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } else { Render(); //Отрисовка сцены } } } return 0; } HRESULT InitialDX(HWND hWnd) { if(NULL==(pDirect3D=Direct3DCreate9(D3D_SDK_VERSION))) //создание основного интерфейса return E_FAIL; D3DDISPLAYMODE Display; // структура с настройками монитора if (FAILED(pDirect3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&Display))) // получение настроек монитора. return E_FAIL; D3DPRESENT_PARAMETERS Direct3DParametr; // Структура с настройками ZeroMemory(&Direct3DParametr,sizeof(Direct3DParametr)); // Обнуление структуры Direct3DParametr.Windowed=TRUE; // Рeжим отображения приложения(true - оконное, false -полноэкранное) Direct3DParametr.SwapEffect=D3DSWAPEFFECT_DISCARD; // Метод переключения буферов Direct3DParametr.BackBufferFormat=Display.Format; // Формат пикселя(колличество разрядов цвета) Direct3DParametr.EnableAutoDepthStencil=TRUE; // Управление буфером глубины Direct3DParametr.AutoDepthStencilFormat=D3DFMT_D16; // Формат буфера глубины Direct3DParametr.BackBufferWidth=Display.Width; // Ширина буфера Direct3DParametr.BackBufferHeight=Display.Height; // Высота буфера // Direct3DParametr.FullScreen_RefreshRateInHz=Display.RefreshRate; //Частота обновления экрана(только в полноэкранном режиме) if (FAILED(pDirect3D->CreateDevice(D3DADAPTER_DEFAULT, // используемая видеокарта D3DDEVTYPE_HAL, // тип устройства hWnd, // дескриптор родительского окна D3DCREATE_HARDWARE_VERTEXPROCESSING, //режим обработки шейдеров &Direct3DParametr, // структура с настройками &pDirect3DDevice))) // указатель на устройство return E_FAIL; return S_OK; } void Render() { pDirect3DDevice->Clear(0,NULL,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(0,0,255),1.0f,0); //Очистка вторичного буфера pDirect3DDevice->BeginScene(); //Начало рендеринга // Код отрисовки сцены pDirect3DDevice->EndScene(); //Конец рендеринга pDirect3DDevice->Present(NULL,NULL,NULL,NULL); // копирование вторичного буфера в первичный } void ReleaseDX() { if(pDirect3DDevice!=NULL) pDirect3DDevice->Release(); if(pDirect3D!=NULL) pDirect3D->Release(); }
и есть некий фрагмент кода реализующий вывод поля состоящего из тайловых блоков как мне их обединить чтобы они зароботали ? (нубский вопрос но всё же)
Я белый и пушистый но имею когти и зубы
redinard Дата: Вторник, 28 Февраля 2012, 02:22 | Сообщение # 316 | Тема: Необходима помощь в освоении азов создания игр
постоянный участник
Сейчас нет на сайте
Меня конкретно интересует как там реалезованно обединение 2D и 3D пространств (трёхмерные планетарные бои в побольшей части двумерной игре),и ссылка много толку не дала,движок я собираюсь писать сам,так как это будет моя курсовая.Добавлено (28.02.2012, 02:22) --------------------------------------------- Ну если с космичесскими рейджерами всё сложно,то не могли бы мне подсказать какую либо инфу которая поможет написать что либо подобное Diablo 2 ?
Я белый и пушистый но имею когти и зубы
redinard Дата: Среда, 15 Февраля 2012, 02:05 | Сообщение # 317 | Тема: Необходима помощь в освоении азов создания игр
постоянный участник
Сейчас нет на сайте
Я всё это понимаю,на данный момент меня интереует,стоящая ли выше указанная книга ?Добавлено (15.02.2012, 02:05) --------------------------------------------- Народ подскажите источники информации которые могут подсказать как создать движок подобный движку игры "космичесские рейнджеры 2"
Я белый и пушистый но имею когти и зубы
redinard Дата: Вторник, 31 Января 2012, 03:08 | Сообщение # 318 | Тема: [2D] - *Пока без названия*(Стратегия)
постоянный участник
Сейчас нет на сайте
Прикольно,что за двиг,своя разроботка ?
Я белый и пушистый но имею когти и зубы
redinard Дата: Суббота, 28 Января 2012, 23:38 | Сообщение # 319 | Тема: [3D] One Way Ticket
постоянный участник
Сейчас нет на сайте
Игра классная,мне понравилось,но позволю себе немного критики. спрайт огня от выстрела у пистолета немного не сходится с моделю оружия направление дула калаша заставляет остовлять сомнения что он смотрит по направлению прицела когда зомби отстреливаеш голову он продолжавет бежать за игроком,ну если такая задумка то хотябы надо убрать надпись хэдшот ,потому что он теряет свой функциональный смысл
Я белый и пушистый но имею когти и зубы
redinard Дата: Четверг, 26 Января 2012, 20:03 | Сообщение # 320 | Тема: Необходима помощь в освоении азов создания игр
постоянный участник
Сейчас нет на сайте
на выше приведённые ошибки уже можно закрыть глаза,это проект я уже добил и его возможности меня уже не устраивают (примитивненько слишком),сейчас меня интересует материал изложеный в книге "Программирование стратегических игр с DirectX 9.0",за её изучение возьмусь недели через 2,а пока хотел бы услышать отзывы и мнение по этой книге.
Я белый и пушистый но имею когти и зубы