Runde Minimap

06/19/2012 16:02 Jopsi332#1
ich komm nich weiter und mein schlaues buch sagt mir auch nicht viel drüber. Ich brauhc hilfe bei AlphaBlending mit der MiniMap :C

irgendwie sieht es ingame bei mir jetz so aus

[Only registered and activated users can see links. Click Here To Register...]

das is mein code in

Cwndnavigator::onreasebkgn

nach

AccuFrame();
Code:
//	pd3dDevice->SetVertexShader(D3DFVF_LVERTEX);

	pd3dDevice->SetRenderState(D3DRS_STENCILENABLE, TRUE);
	pd3dDevice->SetRenderState(D3DRS_STENCILZFAIL, D3DSTENCILOP_KEEP);
	pd3dDevice->SetRenderState(D3DRS_STENCILFAIL, D3DSTENCILOP_KEEP);
	pd3dDevice->SetRenderState(D3DRS_STENCILPASS, D3DSTENCILOP_REPLACE);
	pd3dDevice->SetRenderState(D3DRS_STENCILFUNC, D3DCMP_ALWAYS);
	pd3dDevice->SetRenderState(D3DRS_STENCILREF, 0x1);
	pd3dDevice->SetRenderState(D3DRS_STENCILMASK, 0xffffffff);
	pd3dDevice->SetRenderState(D3DRS_STENCILWRITEMASK, 0xffffffff);

	pd3dDevice->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE);
	pd3dDevice->SetRenderState(D3DRS_ALPHAREF, 50);
	pd3dDevice->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL);

	pd3dDevice->BeginScene();

	//pd3dDevice->DrawIndexedPrimitiveUP(D3DPT_TRIANGLELIST, 0, 4, 2,&m_billBlend , D3DFMT_INDEX16, &m_billBlend, sizeof(D3DLVERTEX));

	pd3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);
	pd3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ZERO);
	pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,FALSE);
	pd3dDevice->SetRenderState(D3DRS_ALPHATESTENABLE, FALSE);
///
	//pd3dDevice->DrawIndexedPrimitiveUP(D3DPT_TRIANGLELIST, 0, 4, 2, &m_billBlend , D3DFMT_INDEX16, &m_billBlend, sizeof(D3DLVERTEX));
pd3dDevice->SetRenderState(D3DRS_ZWRITEENABLE, TRUE);

	///


pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
pd3dDevice->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE);
pd3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
pd3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);

m_billBlend.Render(pd3dDevice);

pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, FALSE);
pd3dDevice->SetRenderState(D3DRS_ALPHATESTENABLE, FALSE);
pd3dDevice->EndScene();
wenn jemand mehr ahnung von directx hat und hilfbereit ist würd ich mich freun :)

wenn gewünscht kann ich auch mal die Seiten ausm buch hier mit reinstellen wo ich das ganze her hab.
06/19/2012 16:05 xTwiLightx#2
Such die Stelle, wo die Form gerendert wird (die der Minimap) und lass sie statt viereckig rund rendern.
06/19/2012 16:07 Jopsi332#3
Quote:
Originally Posted by xTwiLightx View Post
Such die Stelle, wo die Form gerendert wird (die der Minimap) und lass sie statt viereckig rund rendern.
ya die idee hatte ich auch schon... aber sobald ich eine x / y auslasse wird garnichts mehr gerendert
06/19/2012 18:22 _Farbrausch#4
Dein Code sieht ziemlich verwirrend aus. Du setzt teilweise RenderStates die unötig sind, andere setzt du doppelt und überschreibst sie so wieder.
Dein BeginScene und EndScene ist da auch total fehl am Platz.
Die Alpha Mask nach AccuFrame zu rendern bringt dir auch überhaupt nichts da zu dem Zeitpunkt bereits die Minimap gerendert wurde.
Code:
pLand->m_texMiniMap.Render( p2DRender, point, 200 );//CWndBase::m_nAlpha );
Erstell dir eine neue Render Funktion die eine extra Texture animmt (Deine Alpha Mask). Dann passt du die Vertex Struktur an und fügst UV Koordinaten für die AlphaMask hinzu. Setz die richtigen RenderStates und dann render das ganze.

Oder Alternativ, mach es mit einem Shader. Ganz ehrlich, RenderStates sind so DX6.
06/19/2012 19:16 polsterspeed#5
Man findet in dem Snippet nicht 1x PI, wenn du weißt was PI ist, benötigst du für das Rendern eines Kreise's.

Was willst mit dem ganzen Blenden da, hat 0 mit einem Kreis zutun, dazu kommt das Offi wenn du es nachmachen willst, wovon ich ausgehe, KEINE Blend sachen drin hat.
06/19/2012 19:48 Jopsi332#6
Quote:
Originally Posted by polsterspeed View Post
Man findet in dem Snippet nicht 1x PI, wenn du weißt was PI ist, benötigst du für das Rendern eines Kreise's.

Was willst mit dem ganzen Blenden da, hat 0 mit einem Kreis zutun, dazu kommt das Offi wenn du es nachmachen willst, wovon ich ausgehe, KEINE Blend sachen drin hat.
ich hab da nen textur (alpha circle) so wie offi es auhc macht

Quote:
Originally Posted by _Farbrausch View Post
Dein Code sieht ziemlich verwirrend aus. Du setzt teilweise RenderStates die unötig sind, andere setzt du doppelt und überschreibst sie so wieder.
Dein BeginScene und EndScene ist da auch total fehl am Platz.
Die Alpha Mask nach AccuFrame zu rendern bringt dir auch überhaupt nichts da zu dem Zeitpunkt bereits die Minimap gerendert wurde.
Code:
pLand->m_texMiniMap.Render( p2DRender, point, 200 );//CWndBase::m_nAlpha );
Erstell dir eine neue Render Funktion die eine extra Texture animmt (Deine Alpha Mask). Dann passt du die Vertex Struktur an und fügst UV Koordinaten für die AlphaMask hinzu. Setz die richtigen RenderStates und dann render das ganze.

Oder Alternativ, mach es mit einem Shader. Ganz ehrlich, RenderStates sind so DX6.
hab das oben aus meinem c++ buch. aber wenn s bessere wege gibt werde ich die testen
06/19/2012 20:41 polsterspeed#7
Quote:
Originally Posted by Jopsi332 View Post
ich hab da nen textur (alpha circle) so wie offi es auhc macht
die testen
Schwachsinn, Offi nutzt keine Textur, der Runde Kreis diese Schwarze kacke da ist dafür da wenn es ein Dungeon ist, da wird keine Karte angezeigt.
06/19/2012 21:50 _Farbrausch#8
Quote:
Originally Posted by polsterspeed View Post
Schwachsinn, Offi nutzt keine Textur, der Runde Kreis diese Schwarze kacke da ist dafür da wenn es ein Dungeon ist, da wird keine Karte angezeigt.
Du meinst wohl NavDunFog.tga, alphacircle.tga ist die Mask für die Minimap.
06/19/2012 22:02 Jopsi332#9
habs ganze nu in ner eigenen draw funktion

.. schaut jetz so aus :C
Code:
void CWndNavigator::OnDraw(C2DRender* p2DRender)
{
	
#ifdef __NEW_THEME
		if( g_pPlayer == NULL ) return;
	LPDIRECT3DDEVICE9 pd3dDevice = p2DRender->m_pd3dDevice;




	pd3dDevice->BeginScene();

device->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
device->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL);
device->SetRenderState(D3DRS_ALPHAREF, (DWORD)8);
device->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE); 
m_billBlend.Render(pd3dDevice);

pd3dDevice->EndScene();

	
#endif
[Only registered and activated users can see links. Click Here To Register...]
06/20/2012 02:24 _Farbrausch#10
Quote:
Originally Posted by Jopsi332 View Post
habs ganze nu in ner eigenen draw funktion

.. schaut jetz so aus :C
Code:
void CWndNavigator::OnDraw(C2DRender* p2DRender)
{
	
#ifdef __NEW_THEME
		if( g_pPlayer == NULL ) return;
	LPDIRECT3DDEVICE9 pd3dDevice = p2DRender->m_pd3dDevice;




	pd3dDevice->BeginScene();

device->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
device->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL);
device->SetRenderState(D3DRS_ALPHAREF, (DWORD)8);
device->SetRenderState(D3DRS_ALPHATESTENABLE, TRUE); 
m_billBlend.Render(pd3dDevice);

pd3dDevice->EndScene();

	
#endif
[Only registered and activated users can see links. Click Here To Register...]
Du gehst das falsch an. Du musst den Inhalt der Minimap und die Mask in einem Draw Call rendern. Wofür du wiederum eine eigene Vertex Struct brauchst, die eine Mask überhaupt akzeptiert. Schau dir einfach mal die C2DRender Klasse an. Würde die aber immer noch die Shader Variante ans Herz legen, da spaarst du dir auch die erstellung einer weiteren Vertex Struct.
Das Begin/End Scene ist btw immer noch total unötig da in CNeuzApp::Render() bereits begonnen und beendet wird und dein Fenster wie alles andere was gerendert wird in desen Scope fällt.
06/20/2012 10:03 Jopsi332#11
Quote:
Originally Posted by _Farbrausch View Post
Du gehst das falsch an. Du musst den Inhalt der Minimap und die Mask in einem Draw Call rendern. Wofür du wiederum eine eigene Vertex Struct brauchst, die eine Mask überhaupt akzeptiert. Schau dir einfach mal die C2DRender Klasse an. Würde die aber immer noch die Shader Variante ans Herz legen, da spaarst du dir auch die erstellung einer weiteren Vertex Struct.
Das Begin/End Scene ist btw immer noch total unötig da in CNeuzApp::Render() bereits begonnen und beendet wird und dein Fenster wie alles andere was gerendert wird in desen Scope fällt.


Hab jetzt ne neue vertex sstruct und ne function gemach nen kreis us beliebig vielen dreicken zu machen mit qrgv x y radius. In texturpack. Teste das heute nachmittag und render dan die minimao in meinem kreis
01/25/2013 13:30 trashee09#12
[Only registered and activated users can see links. Click Here To Register...]

T_T
01/26/2013 12:24 Sedrika#13
What's your reason to push an old thread like this ?
01/26/2013 12:45 Lumi#14
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]