|
|
Szerintem gépeléshez elég ha az üzenetkezelőben lekezeled a WM_CHAR üzenetet (+ a WM_KEYDOWN üzenetet), a wParam a karakterkód..
Klikk, a JF.hu bulvárlap.
Klikk #6 WIP: 30% (Kuz, sade, ramoryan...)
|
|
|
directinput: van-e valami egyszeru mod arra, hogy a karakterlenyomast char-ra alakitsam? (azaz kvazi tudjak "gepelni" a jatekban). Jo lenne a specialis karakter dolog is(altgr-esek, illetve a tobbi shift-es, ami nem betu)
XNA alatt anno ugy csinaltam, hogy egy rakat feltetelvizsgalat
Kód: if (KeyIsPress(Keys.A))
valami = 'a';
//stb
Remelem itt nem kell igy megcsinalni...
Itt van egy ilyesmi, de nincs valami mas megoldas?
http://www.toymaker.info/Games/html/directinput.html
avagy
http://www.gamedev.net/community/forums/topic.asp?topic_id=320531
(ennek az utolso elotti hozzaszolasaban levo lookup table egesz jonak nez ki)
Ezt a hozzászólást Pretender módosította (2011.01.03 15:07 GMT+1 óra, ---)
|
|
|
Sajnos DX8 alatt a Begin-nek nem lehet flag-eket megadni, csak DX9 alatt..
Klikk, a JF.hu bulvárlap.
Klikk #6 WIP: 30% (Kuz, sade, ramoryan...)
|
|
|
|
Heuréka!!! Azt hiszem megvan! 
Ezt a leírást találtam: Alpha Testing State (Direct3D 9)
Ezek alapján a Begin után beállítottam az ALPHAREF -et 0x00000001-re, ALPHATESTENABLE = true, és D3DRS_ALPHAFUNC = D3DCMP_GREATEREQUAL. Meg persze SRCBLEND = SRCALPHA, DESTBLEND = INVSRCALPHA.
És úgy néz ki jó! Juhú! 
Örök hála Asylum, hogy segítettél!!! Már rég feladtam volna.. 
És Pretendernek is thanx!
Klikk, a JF.hu bulvárlap.
Klikk #6 WIP: 30% (Kuz, sade, ramoryan...)
|
|
|
Csináld azt, hogy a sprite->Begin() után állitod be a render stateket.
Bár szerintem nem olyan nagyon nehéz irni egy sajátot; van össz 4 metódusa.
|
|
|
Jóvanna, azt hittem a fontra kérdezed, mert arra is van külön egy D3DXFONT, de azt nem használom. Csak a D3DXSPRITE-ot.
Klikk, a JF.hu bulvárlap.
Klikk #6 WIP: 30% (Kuz, sade, ramoryan...)
|
|
|
Pont ezt kérdeztem öcsém és azt mondtad nem használsz olyat  Az bizony magának állitgatja a renderstateket és a doksi alapján gözöm nincs hogy kell neki megmondani az alpha blendet.
|
|
|
Hmm.. Pedig ez jónak tűnik.
Mondjuk én a D3DXSprite-al rajzolok, meg egyébként sem ilyen elegánsan kódolok..
Klikk, a JF.hu bulvárlap.
Klikk #6 WIP: 30% (Kuz, sade, ramoryan...)
|
|
|
|
Próbáltam alphablend + alphatest enable és srcblend+destblend összes kombinációját, de sajna nem segített. 
Pedig én csak szimplán annyit akartam, hogy több alfás szprájtot összerakok egy rendertargetre, és aztán innen (mint egy új szprájtot) küldöm tovább a backbufferbe (felső 2 kép). A jobb alsó képen közvetlenül rajzoltam őket a backbufferbe, de direkt azért akartam egy rendertargetet, hogy az összerakott képet egyben forgathassam, átméretezhessem, colort állítsak, stb.. De kezdem azt hinni, hogy ilyet nem is lehet csinálni..  (Illetve végső esetben dupla rendertargettel megoldom  )
A kód meg nem pici, inkább batár nagy..  Meg kellene nyesni...
Klikk, a JF.hu bulvárlap.
Klikk #6 WIP: 30% (Kuz, sade, ramoryan...)
|
|
|
Hát ez érdekes, a kolléganő szerint A8-al tökjol megy 
Hogy rajzolod ki azt a két spriteot?
Esetleg ha ez ien pici kod akkor felrakhatnád vhova.
|
|
|
bal oldali kephez nem alpha test kellene?
alphablend enable
srcblend, dstblend beallitas
alphatest enable
rajzolas.
Elvileg csak ennyinek kellene lennie..
|
|
|
Na ez az, hogy nem dx-es interfésszel rajzolom a szöveget, hanem pont ugyanúgy sprite-okkal, mint minden mást is... (Minden textúrám kettőhatvány, négyzetes és A8-as.) Már eléggé bekeveredtem a dologba, de csinálok majd mindjárt egy jobban értelmezhető képet (vagy összerakok egy példaprogit).
szerk.: Na ezt az ábrát sikerült összehoznom..  A lényeg, hogy több szprájtot akarok egymásra rakni a rendertargeten..
Ezt a hozzászólást HomeGnome módosította (2010.12.29 18:17 GMT+1 óra, ---)
Klikk, a JF.hu bulvárlap.
Klikk #6 WIP: 30% (Kuz, sade, ramoryan...)
|
|
|
Tehát:
ha a8-as texturába renderelsz akkor nyilván megy az alpha blending, tehát a textura is alfás lesz (pl. ha átlátszoval törölted le) és az a backbufferen is megy, tehát jólesz.
ha x8-asba, akkor a rendertargetbe rendereléskor lesz alfa (vagy nem  ), de mivel a textura x8 ezért kirajzoláskor nem veszi figyelembe az alfáját.
A szöveg mért más: mert valameik dx-es interfésszel rajzolod nem? Na azoknál sose lehet tudni miket állitgatnak.
Ime a kolléganö szemlélteti a különbséget:
Ezt a hozzászólást Asylum módosította (2010.12.29 15:50 GMT+1 óra, ---)
|
|
|
Pont ezeket próbálgattam, de nem lett jó, a betűknél "kivágja" akármit csinálok.  A D3DRS_SRCBLEND és D3DRS_DESTBLEND összes variációját próbálom, D3DRS_ALPHABLENDENABLE se true se false nem segít, próbáltam még az D3DRS_ALPHATESTENABLE, D3DRS_ALPHAREF, D3DRS_ALPHAFUNC meg mindent ami csak alpha, de semmi.  A D3DRS_BLENDOP most próbáltam, de ez se segített. Sőt, még próbáltam egy olyat is, hogy SetTextureStageState(0,D3DTSS_ALPHAARG1,D3DTA_TEXTURE); itt mindenféle variációt próbáltam vaktában, de csak rosszabb lett a helyzet, meg egyébként sem értem pontosan hogy ez mit is csinál... :\
A congratulation -t én írtam..  Arch majd kijavítja, ő írja a szövegeket, szerencsére nálam sokkal jobban tud angolul.  Azért köszi!
Most már túl sokat szenvedtem ezzel az alfával, asszem marad a 2 db rendertarget.. Végül is csak +4 mega a videómemóriából... 
Mindenesetre hálás köszönet Asylum!!
Klikk, a JF.hu bulvárlap.
Klikk #6 WIP: 30% (Kuz, sade, ramoryan...)
|
|
|
PIX-el (régebben d3dspy) megnézted? Vissza lehet tracelni a pixelek szinét.
Még egy megjegyzés: a congratulation az congratulations
Esetleg azt probáld meg, hogy egy tök sima dx-es progiban nézd meg h mi a helyzet (200 sort könnyü átlátni).
ui.: az elöbb nem láttam rendesen a képet, az elsö képen fekete a betü háttere, söt gondolom a téglalapnak is, csak nem látszik mert fekete a háttér. Ezt a blendet kiprobáltad? (nyilván a8-al).
Kód: Graphics->SetRenderState(D3DRS_ALPHABLENDENABLE, true);
Graphics->SetRenderState(D3DRS_BLENDOP, D3DBLENDOP_ADD); // elvileg ez a default
Graphics->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
Graphics->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
x8-al meg sztem nemis lesz alpha blendgin de minnyá megnézem
|
|
|
A BeginScene észrevétel jogos, köszi! 
Egyébként szerintem minden defaulton van, legalábbis tudtommal nem állítgatok semmit. A textúrát a következőképpen hozom létre:
Kód: D3DXIMAGE_INFO anImageInfo;
D3DXGetImageInfoFromFileInMemory(fim->pMemAddress,fim->dwSize,&anImageInfo);
D3DXCreateTextureFromFileInMemoryEx(SM_gpD3DDevice, // D3D eszköz
fim_in->pMemAddress, // mutató a memóriaterületre
fim_in->dwSize, // méret
anImageInfo.Width, // szélesség
anImageInfo.Height, // magasság
anImageInfo.MipLevels, // MIP szintek
0, // usage (0, D3DUSAGE_RENDERTARGET, vagy D3DUSAGE_DYNAMIC)
anImageInfo.Format, // formátum
D3DPOOL_DEFAULT, // memória
D3DX_DEFAULT, // szűrő
D3DX_DEFAULT, // MIP szűrő
0, // TRANSPARENT_COLOR, // átlátszó színkulcs
&anImageInfo, // képi információkat tartalmazó struktúra
NULL, // 256 színű paletta
&Tex->pSrcTexture); // létrehozandó textúra pointere
A "fim" az egy saját struktúra (file in memory  ), tehát itt már a memóriában van a képfájl, annak az adatai vannak benne.
Az előző képen nem tudom látszik-e, de a baloldali ábrákon az ablak körül az átmenet az nem 1 pixel széles, hanem 8 pixel, tehát nem a filter csinálja az átmenetet.
Most arra gondolok, hogy talán a Clear -nél nem megfelelően törlöm a rendertargetet? 
Pedig józan paraszti ésszel nem azt gondolná az ember, hogy az A8R8G8B8 esetén az A8 az egy 8 bites alfa csatorna? Ha 0-val töltöm fel, akkor nem átlátszónak kéne lennie alapból? X8 estén meg működik az átlátszóság.. Tényleg Boborján legyek, ha értem.. 
szerk.: tényleg belekeveredtem, A8-nál jó a széle, ott e betűk nem jók..
Ezt a hozzászólást HomeGnome módosította (2010.12.29 08:41 GMT+1 óra, ---)
Klikk, a JF.hu bulvárlap.
Klikk #6 WIP: 30% (Kuz, sade, ramoryan...)
|
|
|
Hmm azt megjegyezném, hogy egynél több BeginScene() már lassít.
Amugy meg arra gondoltam, hogy a textura szélén mi történik (addressu, addressv), tehát wrap, clamp, mirror vagy mi. A képet meg rendesen töltöd be vagy textura atlaszban van, kettöhatvány-e? A filter pedig lineáris vagy point (minfilter, magfilter stb.).
|
|
|
ööö.. nem biztos hogy értem mire gondolsz..
Csak így csinálok egy rendertextúrát:
Kód: hRes=D3DXCreateTexture(SM_gpD3DDevice, // D3D eszköz
width,
height,
0,
D3DUSAGE_RENDERTARGET,
format, // D3DFMT_X8R8G8B8,
D3DPOOL_DEFAULT,
&Tex->pSrcTexture);
ja, a &Tex->pSrcTexture az csak simán egy struktura tagja:
Kód: LPDIRECT3DTEXTURE8 pSrcTexture;
Egy alfás png-t meg a betöltök a memóriába és D3DXCreateTextureFromFileInMemoryEx -el létrehozok egy textúrát (a formátuma tuti A8R8G8B  .
Rendernél ilyesmiket bűvészkedek:
Kód: gTexTemp.pSrcTexture->GetSurfaceLevel(0,&gpRenderSurface);
SM_gpD3DDevice->GetRenderTarget(&pBackBuffer);
SM_gpD3DDevice->SetRenderTarget(gpRenderSurface,NULL);//gpStencilSurface);
SM_gpD3DDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_ARGB(0,0,0,0),1.0f,0);
SM_gpD3DDevice->BeginScene();
SM_gpD3DXSprite->Begin();
SMART_DrawRenderTexture();
SM_gpD3DXSprite->End();
SM_gpD3DDevice->EndScene();
SM_gpD3DDevice->SetRenderTarget(pBackBuffer,0);
SAFE_RELEASE (gpRenderSurface);
SAFE_RELEASE (pBackBuffer);
Aztán megint BeginScene és ekkor megy a rendertextúrából a backbufferbe (ami asszem X8R8G8B  ..
De már nagyon belekeveredtem.. :\
Klikk, a JF.hu bulvárlap.
Klikk #6 WIP: 30% (Kuz, sade, ramoryan...)
|
|
|
Filterelés, textúra címzés?
|
|
|
Mennyit szenvedek már ezzel..  De most már isti-bizi végigpróbálom mind a 13x13 darab SRCBLEND és DESTBLEND kombinációt...
szerk.: végigpróbáltam a8-on is és x8-on is az összes kombinációt, de sehogy se jó..
Ezt a hozzászólást HomeGnome módosította (2010.12.28 22:09 GMT+1 óra, ---)
Klikk, a JF.hu bulvárlap.
Klikk #6 WIP: 30% (Kuz, sade, ramoryan...)
|
|
|
Öööö screenshtot tudnál mutatni mert ezt nem értem
|
|
|
Megint a rendertargettel szenvedek..  Az a szitu, hogy egy popup ablakot akarok rajzolni, és az X8 formátumú rendertargettel most jól is rajzolja a szövegeket bele az ablakba, de viszont az ablak körül körben átmenet van, és ott meg pont hogy az A8 működik jól..  Boborján legyek ha értem...  Szóval most egyelőre azt találtam ki, hogy csinálok egy X8 és egy A8 -as rendertargetet is, és ezzel a duplacsavarral már végre azt csinálja amit eredetileg akartam.. 
Klikk, a JF.hu bulvárlap.
Klikk #6 WIP: 30% (Kuz, sade, ramoryan...)
|
|
|
Nrem tudja valaki, hogy az id3dxbaseffect::getpixelshader mi a túrót vár első paraméternek? Azért imádom, hogy a ms ilyen kvajól dokumentálja a szarságait.
|
|
|
Hehe, pont most a suliban gondolkoztam rajta, hogy lehetne egy olyan toolt is irni, hogy megadunk egy foldert, es a benne levo anyagbol csinal egy (tovabbra is megnyithatatlan) pak fajlt  De persze kenyelmesebb lenne egy totalcmd plugin
szerk.:
http://www.ghisler.com/plugins.htm
Ezen az oldalon van leiras: "Interface description", es leszedtem a PACK plugin source kodjat is, azt kezdem most el kibogaraszni
Ezt a hozzászólást Pretender módosította (2010.12.14 13:06 GMT+1 óra, ---)
|
|
|
Olyan plugint írjál majd nekem is lécci, megadom a .pak formátumomat!
Klikk, a JF.hu bulvárlap.
Klikk #6 WIP: 30% (Kuz, sade, ramoryan...)
|
|
|
Igen, kozben mar megvilagosodtam efelol is, azt hiszem megertettem a dolog lenyeget  Valamelyik nap majd utananezek a totalcommanderes pluginirasnak, mert addig nem akarok pak fajlbol beolvasni, ameg nem tudom egyszeruen megnyitni es modositani totalcmd-ben
|
|
|
Nem igazán értem mi a probléma. Evidens, hogy mindent binárisan kell beolvasni! A jpg meg nem csak attól jpg, mert az a fájl kiterjesztése...  A pak fájlnak meg tökmindegy, hogy milyen típusú fájlok vannak benne, pont az a lényege, hogy bármilyen fájlokat belerakhass..
Klikk, a JF.hu bulvárlap.
Klikk #6 WIP: 30% (Kuz, sade, ramoryan...)
|
|
|
Idézet fpeti :
Messze mutató link ezzel kapcsolatban: 
saját pack formátum
Errol jut eszembe: ha en binarisan olvasok be ket fajta fajltipust, es azt teszem pak fajlba, akkor azt hogy? vagy azok maradjanak kulon? Az se jo
Kód: std::ifstream m_File;
m_File.open(p_Path.c_str(), std::ios::in | std::ios::binary);
Vagy ezt is valahogy maskepp kell majd beolvasnom?
|
|
|
|
szerintem azt ugy nem nyitna meg...
|
|
|
Idézet Pretender :
Az jutott eszembe, hogy van ez a:
Kód: D3DXCreateTextureFromFileInMemory
Ezt lehetne-e ugy hasznalni, hogy fogom a jpg-t, png-t, akarmit, kiirom binarisba. Betolteskor egy char tombbe beolvasom a binarisbol az adatokat, es a fentebbi metodust meghivom, es abbol gyartok texturat?
Átnevezem a binárisodat .jpg-re és voilá
|
|
|
Miért, a jpg meg a png az nem binárisba van kiírva? 
Egyébként én is ezt használom, beolvasom a fájl méretét, lefoglalom a szükséges memóriaterületet (void *), beolvasom membe, és onnan D3DXCreateTextureFromFileInMemory -val hozom létre a textúrát..
Ja, és persze azért ezt használom, mert .pak-ból olvasom a képfájlt.
Klikk, a JF.hu bulvárlap.
Klikk #6 WIP: 30% (Kuz, sade, ramoryan...)
|
|
|
Az jutott eszembe, hogy van ez a:
Kód: D3DXCreateTextureFromFileInMemory
Ezt lehetne-e ugy hasznalni, hogy fogom a jpg-t, png-t, akarmit, kiirom binarisba. Betolteskor egy char tombbe beolvasom a binarisbol az adatokat, es a fentebbi metodust meghivom, es abbol gyartok texturat?
|
|
|
Ahh, úgy néz ki megoldódott a rendertarget-es problémám!  Kipróbáltam amit írtatok, A8 helyett X8 kellett neki, és máris gyönyörűen műxik, yesss!!  Anno mennyit szenvedtem vele, a SetRenderState összes létező (és nem létező  ) kombinációját végigpróbáltam, de cseszett működni.. Most meg elsőre jó lett.  Hálás köszönet a tippért! 
Akkor úgy néz ki egyelőre mégse váltok DX9-re...
Klikk, a JF.hu bulvárlap.
Klikk #6 WIP: 30% (Kuz, sade, ramoryan...)
|
|
|
Aha, meg is van:
Kód: void GameHelper::ResetBackbuffer(IDirect3DDevice9* p_Device)
{
IDirect3DSurface9* bb;
p_Device->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &bb);
p_Device->SetRenderTarget(0, bb);
bb->Release();
}
Mivel rendertargetekbe renderelek, igy erre szuksegem van, a viewportot pedig ez UTAN kell beallitani. Akkor megint csak en voltam a hulye  koszi
|
|
|
Kód: D3DVIEWPORT9 vp;
vp.X = vp.Y = 0;
vp.Width = 512;
vp.Height = 512;
vp.MinZ = 0;
vp.MaxZ = 1;
device->SetViewport(&vp);
Nálam tökjol megy.
|
|
|
Ha csinalok egy olyat, hogy atallitom a viewportot, majd
Kód: m_Game->GetDevice()->SetViewport(&m_Game->m_Viewport);
es igy renderelek rendertargetekkel, akkor ugyan ugy nez ki (azaz nem tortenik semmi). A viewport akkor szamara mit jelent? (megfeleztem a viewport-nal a Width erteket). Vagy ez 'csak' a rendertargetek miatt nem erzekelheto? (a legvegen nyomok egy d3dxsprite-s renderelest, lehet az a baj?)
Igazabol lehet, hogy nem is jora akarom hasznalni. Annyit akarok, hogy ilyen multiple viewport legyen (bocs, ha nem jol irom  ) : bal oldalt lesz a modell, jobb oldalt pedig a parameterei, stb.
Ezt a hozzászólást Pretender módosította (2010.12.09 16:24 GMT+1 óra, ---)
|
|
|
Ezt a hozzászólást HomeGnome módosította (2010.12.08 19:07 GMT+1 óra, ---)
Klikk, a JF.hu bulvárlap.
Klikk #6 WIP: 30% (Kuz, sade, ramoryan...)
|
|
|
Közben kibányásztam az ogrebol, és ugynézki müködik!
Majd az enginem topicjába bepostolom a kódot.
|
|
|
Asylum: nálam 1 ablak van, igaz 2D és DX8..  De ha ki tudsz valami hasznosat bányászni a kódból, akkor elküldöm szívesen a zendzsinemet, ha érdekel... Csak aztán nem kiröhögni!
Klikk, a JF.hu bulvárlap.
Klikk #6 WIP: 30% (Kuz, sade, ramoryan...)
|
|
|
Kezdek már kicsit megőrülni. Nem tud valaki egy jó leírást, hogy hogy a túróba kell fullscreenből ablakos módba váltani és vissza? Nyilván nem a DX oldalával van gond hanem a winapival... Ugyanis XP alatt nyilván minden oké, win7 alatt viszont fs-ből w-be váltáskor az aero ablak helyett egy sima basic ablak jelenik meg.
Módszerek amiket találtam:
- két külön ablakot használni
- újrakreálni az ablakot (opengl esetén ez nem annyira nyerő 
- szopni a winapival (senki nem bir értelmes megoldást adni)
Szempontok:
- az ablak középre kerüljön (ez nagyjából megoldva)
- az ablak mérete határozza meg a backbuffer méretét (ugyanis a dekstophoz igazítom ha nagyobb)
- lehetőleg ne legyenek fölösleges villogások (sajnos a device reset hidden ablakra befosik)
|
|
|
Ettől még nem értek egyet vele, te meg igen, ízért neked címeztem. Majd ha vele fogok levelezni, neki is megmondom.
Mellesleg nem jó gondolkodás nélkül mindent elhinni valakinek tekintély alapon.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
|
|
|
Matzi: ez nem az én állításom, ezt egy nálamnál sokkal okosabb ember, John Carmack mondta, akiről nem hinném, h nem tudja mit beszél
|
|
|
BlueDeath:
Ez azért egy elég nehezen védhető állítás. Az is, hogy nem használják ki, meg az is, hogy felesleges. Egyrészt azt hajtja előre a világot, hogy olyan dolgokra támad igény, amik nincsenek, másrészt meg igencsak hasznos dolgok jöttek be. Lehet, hogy meg lehet csinálni valamit 10x annyi munkával ,de egyrészt felesleges, másrészt meg sok dolgot nem is lehet.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
|
|
|
Jó, hát nekem tényleg csak 2d-re kell.  Meg nálam szempont, hogy minél egyszerűbb konfigon is fusson, és DX8 meg asszem már a sima XP-ben is volt, szóval nem nagyon kell semmit se installálni.  Bár a DX9-ben tényleg vannak jó dolgok, amikkel szebb effekteket lehet csinálni. Na majd jövőre..
Klikk, a JF.hu bulvárlap.
Klikk #6 WIP: 30% (Kuz, sade, ramoryan...)
|
|
|
Ugyan, Carmack bácsi is megmondta, h felesleges a DX10 meg a többi nyalánkság amíg a DX9-et se használják ki a fejlesztők. HomeGnome meg a DX8-at próbálja előbb kiaknázni
|
|
|
Ejj, ráérünk arra még..  Én mindig egy 10 évet le vagyok maradva fejlesztőeszközök terén, szóval majd 12-13 év múlva..  Már a DX7-ről is csak az alfa-csatorna hiánya miatt kellett áttérnem..
Klikk, a JF.hu bulvárlap.
Klikk #6 WIP: 30% (Kuz, sade, ramoryan...)
|
|
|
DX8?  Ha ilyen ütemben haladsz jobb, ha a zendzsínbe a DX12 supportot kezded el tervezni.  2-3 év múlva az is itt lesz.
|
|
|
Legújabb project:
Smashed Potatoes
Legutóbb frissített project:
Smashed Potatoes
Friss kép a galériából:
|