Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
Zhuleny
Založen: 31. 01. 2012 Příspěvky: 28
|
Zaslal: 17. září 2012, 11:25:40 Předmět: Praca z class |
|
|
Dobry den.
Programujem si pokusne vlastny DX9 engine, toto je uz vlastne v druhej verzii. No tentokrat to chcem urobit pokusne cez triedy, pretoze na prvej verzii sa mi podarilo .x nacitat a pohybovat s nim po "mape" ale uz sa mi ho nepodarilo rozanimovat, pretoze nerozumiem prilis praci z class.
Planujem si vytvorit cez class VideoManazera ktory sa postara o nastavenie a inicializovanie grafickej karty a direct input v direct x.
Pozeral som nejake navody na internete ale stale mi nieco zrejme unika....
Chcem nastavit graficku kartu prikazom start, v pripade zmeny velkosti okna by som chcel pouzit reset a uvolnit pamat a vyhpnut dx prikazom stop. Zatial to nejde skompilovat vo VS2010express z hlaskou :
1>c:\users\petríq\documents\visual studio 2010\projects\engine verzia 2\engine verzia 2\main.cpp(112): error C2352: 'VideoManager::Start' : illegal call of non-static member function
1> c:\users\petríq\documents\visual studio 2010\projects\engine verzia 2\engine verzia 2\main.cpp(20) : see declaration of 'VideoManager::Start'
Co je v tomto kode zle?
PS viem ze to nemozem inicializovat cez main ale cez winmain, mne vsak teraz ide len o skompilovanie.
kód: |
#include <Windows.h>
#include <d3dx9.h>
#include <dinput.h>
/* Pokus o vytvorenie triedy ktora by spravovala video nastavenie.
*
*/
struct VIDEOSETTING
{
LPDIRECT3D9 lD3D;
LPDIRECT3DDEVICE9 l3dDevice;
LPDIRECTINPUT8 lDI;
LPDIRECTINPUTDEVICE8 lDIDevice;
LPD3DXFONT lfont;
HINSTANCE hInstance;
HWND hWnd;
};
class VideoManager
{
public:
HRESULT Start(HWND hwnd, HINSTANCE hinstance);
//HRESULT ~Start(){ delete vs; delete d3dpp;}
HRESULT Koniec();
HRESULT ReSet();
private:
VIDEOSETTING *vs;
D3DPRESENT_PARAMETERS *d3dpp;
};
HRESULT VideoManager::Start(HWND hwnd, HINSTANCE hinstance)
{
HRESULT hr;
vs = new VIDEOSETTING;
ZeroMemory( &vs, sizeof(vs));
d3dpp = new D3DPRESENT_PARAMETERS;
ZeroMemory( &d3dpp, sizeof(d3dpp));
vs->hWnd=hwnd;
vs->hInstance=hinstance;
vs->lD3D=NULL;
vs->l3dDevice=NULL;
vs->lD3D=Direct3DCreate9( D3D_SDK_VERSION );
if(!vs->lD3D)
{
MessageBox(vs->hWnd, "Zlyhalo: Direct3DCreate9\n\nProgram sa ukonci", "dx-init-setup",MB_OK);
SendMessage(vs->hWnd,WM_DESTROY, NULL, NULL);
}
//D3DPRESENT_PARAMETERS d3dpp;
d3dpp->Windowed = true;
d3dpp->BackBufferHeight=1024;
d3dpp->BackBufferWidth=768;
d3dpp->SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp->BackBufferFormat = D3DFMT_X8R8G8B8;
d3dpp->EnableAutoDepthStencil = true;
d3dpp->AutoDepthStencilFormat = D3DFMT_D16;
d3dpp->hDeviceWindow =vs->hWnd;
d3dpp->BackBufferCount=2;
hr = vs->lD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, vs->hWnd,D3DCREATE_HARDWARE_VERTEXPROCESSING, d3dpp, &vs->l3dDevice );
if(hr)
{
MessageBox(vs->hWnd, "Zlyhalo: Create Device\nProgram sa ukonci", "dx-init-setup",MB_OK);
SendMessage(vs->hWnd,WM_DESTROY, NULL, NULL);
}
vs->l3dDevice->SetRenderState(D3DRS_ZENABLE, true);
vs->l3dDevice->SetRenderState(D3DRS_STENCILENABLE, true);
hr=D3DXCreateFont( vs->l3dDevice, 27, 0, FW_BOLD, 0, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, TEXT("Arial"), &vs->lfont );
vs->lDI=NULL;
vs->lDIDevice=NULL;
hr= DirectInput8Create(vs->hInstance, DIRECTINPUT_VERSION, IID_IDirectInput8, (VOID**)&vs->lDI, NULL);
if(hr)
{
MessageBox(vs->hWnd, "Zlyhalo: DirectInput8Create\nProgram sa ukonci", "dx-init-setup",MB_OK);
SendMessage(vs->hWnd,WM_DESTROY, NULL, NULL);
}
hr = vs->lDI->CreateDevice(GUID_SysKeyboard, &vs->lDIDevice, NULL);
if(hr)
{
MessageBox(vs->hWnd, "Zlyhalo: g_lpDI->CreateDevice\nProgram sa ukonci", "dx-init-setup",MB_OK);
SendMessage(vs->hWnd,WM_DESTROY, NULL, NULL);
}
hr = vs->lDIDevice->SetDataFormat(&c_dfDIKeyboard);
if(hr)
{
MessageBox(vs->hWnd, "Zlyhalo: g_lpDIDevice->SetDataFormat\nProgram sa ukonci", "dx-init-setup",MB_OK);
SendMessage(vs->hWnd,WM_DESTROY, NULL, NULL);
}
hr = vs->lDIDevice->SetCooperativeLevel(vs->hWnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);
if(hr)
{
MessageBox(vs->hWnd, "Zlyhalo: g_lpDIDevice->SetCooperativeLevel\nProgram sa ukonci", "dx-init-setup",MB_OK);
SendMessage(vs->hWnd,WM_DESTROY, NULL, NULL);
}
hr = vs->lDIDevice->Acquire();
return hr;
}
HRESULT VideoManager::Koniec()
{
HRESULT hr;
return hr;
}
HRESULT VideoManager::ReSet()
{
HRESULT hr;
return hr;
}
void Main()
{
HWND hwnd;
HINSTANCE hinstance;
HRESULT hr = VideoManager::Start(hwnd, hinstance);
} |
|
|
Návrat nahoru |
|
 |
VODA

Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 17. září 2012, 12:08:58 Předmět: |
|
|
Tak když voláš nestatickou metodu "statickým" způsobem, tak je jasné, že to nepůjde...
Musíš buď:
kód: |
void Main()
{
HWND hwnd;
HINSTANCE hinstance;
VideoManager videoMan;
HRESULT hr = videoMan.Start(hwnd, hinstance);
} |
nebo
kód: |
void Main()
{
HWND hwnd;
HINSTANCE hinstance;
VideoManager *videoMan = new VideoManager();
HRESULT hr = videoMan->Start(hwnd, hinstance);
delete videoMan;
} |
Nebudu vysvětlovat jaký je v tom rozdíl, od toho jsou moudré knížky a články o C++. _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
 |
Poky

Založen: 29. 06. 2009 Příspěvky: 184 Bydliště: Písek / Plzeň
|
Zaslal: 17. září 2012, 12:52:53 Předmět: |
|
|
A ještě jedna rada: Ujednotil bych si jazyk(mluvený, nikoli programovací) ve kterém to programuješ. Kombinuješ Angličtinu se Slovenštinou Ten kod pak vypadá docela strašně  |
|
Návrat nahoru |
|
 |
Zhuleny
Založen: 31. 01. 2012 Příspěvky: 28
|
Zaslal: 17. září 2012, 17:12:28 Předmět: |
|
|
Dakujem VODA, nikde som nevidel ze by som mal class inicializovat podobne ako strukturu.
Vychadzal som z tohoto tutorialu http://linuxos.sk/clanok/346/index.html
VODA vadilo by ti moc ak by som pouzil z tvojej hry SOLERTIA povodny model Zoji?
Poky, no programovat ciste v slovencine mi asi nepojde ale vies ked clovek nevie ani jeden jazyk na 100% tazko sa mu vybera. |
|
Návrat nahoru |
|
 |
Poky

Založen: 29. 06. 2009 Příspěvky: 184 Bydliště: Písek / Plzeň
|
Zaslal: 17. září 2012, 17:26:29 Předmět: |
|
|
Zhuleny napsal: |
Dakujem VODA, nikde som nevidel ze by som mal class inicializovat podobne ako strukturu. |
Ono struktura a třída v C++ je totéž, pouze struktura je implicitně veřejná zato třáda je implicitně privátní - tedy její atributy a metody.
Jinak AJ je myslím lepší volba. |
|
Návrat nahoru |
|
 |
VODA

Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 17. září 2012, 18:00:27 Předmět: |
|
|
Zhuleny napsal: |
VODA vadilo by ti moc ak by som pouzil z tvojej hry SOLERTIA povodny model Zoji? |
No, nebylo by lepší použít vlastní model?
Jednak si nejsem jist, že ho dokážeš načíst, i když je pravda, že data modelů v Aquacore X3 byla v textovém režimu, takže naparsovat jej by neměl být problém...otázka je, zda-li bys ho dokázal správně sestavit...použít animace apod. Občas i já mám velké problémy pochopit, jak že jsem to vlastně naprogramoval...
I tak Ti to asi nedovolím... _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
 |
josh
Založen: 30. 07. 2007 Příspěvky: 74
|
Zaslal: 17. září 2012, 18:25:40 Předmět: |
|
|
VODA napsal: |
I tak Ti to asi nedovolím... |
spravna odpoved byla: Kolik das?  _________________ Tak Karle, kolik? |
|
Návrat nahoru |
|
 |
Zhuleny
Založen: 31. 01. 2012 Příspěvky: 28
|
Zaslal: 17. září 2012, 19:11:56 Předmět: |
|
|
citace: |
...otázka je, zda-li bys ho dokázal správně sestavit...použít animace apod. Občas i já mám velké problémy pochopit, jak že jsem to vlastně naprogramoval...
I tak Ti to asi nedovolím... |
No ja by som chcel do svojho enginu zabudovat vypocet animacii "on the fly"
takze potrebujem iba modely kazdej koncatiny... mam to v hlave troska premyslene, len k tomu potrebujem engine ktory budem dokonale poznat a ovladat
Poky dakujem za uplne obajsnenie. |
|
Návrat nahoru |
|
 |
VladR
Založen: 30. 07. 2007 Příspěvky: 1322 Bydliště: Greater New York City Area
|
Zaslal: 17. září 2012, 22:39:11 Předmět: |
|
|
Preco nepouzivas zakladne sample, co su k DX dodane ?
Ved tam mas vsetko nakonfigurovane tak, ze to rovno ide.
Ja si ani po 10 rokoch kodenia v DX/XNA nespominam na vsetky parametre, co sa tam nastavuju - od toho je tu predsa SDK, aby ti dalo zakladnu kostru kodu, kde zinicializujes graf.mod a mozes s nim rovno pracovat.
Pises, ze mas nejaky problem s "classes". To teraz narazas na "class" ako prvok jazyka C++ ? V tom pripade by som silne doporucoval postudovat o nich najprv nieco. |
|
Návrat nahoru |
|
 |
Zhuleny
Založen: 31. 01. 2012 Příspěvky: 28
|
Zaslal: 18. září 2012, 11:31:27 Předmět: |
|
|
VladR Tie sample pouzivaju DXUT kniznice, neviem kedy si sa podla tych samplov ucil sam, ale vtedy zrejme nepouzival MS na sample DXUT kniznicu.
ano narazam na class, ale nevidim nikde zeby som napisal "classes".
Chcem sa to naucit, a ked mi to tutorial poriadne nevysvetlil, nasiel som pomoc tu.
Unavujes sa vobec citat cele diskusie ci len prvy post a potom hned klikas na "post reply"? Ale dakujem za pomoc a dobre mienene rady. |
|
Návrat nahoru |
|
 |
VladR
Založen: 30. 07. 2007 Příspěvky: 1322 Bydliště: Greater New York City Area
|
Zaslal: 18. září 2012, 14:53:41 Předmět: |
|
|
Zhuleny napsal: |
VladR Tie sample pouzivaju DXUT kniznice, neviem kedy si sa podla tych samplov ucil sam, ale vtedy zrejme nepouzival MS na sample DXUT kniznicu. |
No a ? Nikde predtym nepises, ze ti to vadi, a ze preco. Zrejme ti to este nikto nepovedal, ale toto forum nedisponuje mind-readerom. Musis sa proste unuvat sam, akokolvek absurdne to znie
Zhuleny napsal: |
ano narazam na class, ale nevidim nikde zeby som napisal "classes". |
A do prdele, tak prepac, ze som ti vlozil do papule plural namiesto singularu
Zhuleny napsal: |
Chcem sa to naucit, a ked mi to tutorial poriadne nevysvetlil, nasiel som pomoc tu. |
No, pokial sa chces celu problematiku tried naucit len ciste z postov na forach (a totalne ignorovat kvanta dostupnych (aj free) knih), tak smelo do toho
Zhuleny napsal: |
Unavujes sa vobec citat cele diskusie ci len prvy post a potom hned klikas na "post reply"? |
Predstav si, a tomu teraz asi neuveris, ze som si fakticky precital cely post
No a prave preto som si trufol dat zopar dobre mierenych rad. Nepadli na uzitok. Nevadi  |
|
Návrat nahoru |
|
 |
|