Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 15:26

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



D3D9 Text zeichnen...

Discussion on D3D9 Text zeichnen... within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 237
Join Date: May 2013
Posts: 336
Received Thanks: 89
D3D9 Text zeichnen...

Hi,

Code:
void DrawFontA (int X, int Y, D3DCOLOR Color, char *format, ...)
{
 char buffer[2048];
 RECT FontRect = { X, Y, X + 120, Y + 16 };
 pFont->DrawTextA( NULL, buffer, -1, &FontRect, DT_NOCLIP , Color ); 
} 

HRESULT __stdcall hkEndScene(LPDIRECT3DDEVICE9 pDevice) 
{ 
 /*D3DRECT bg1 = {10, 10, 200, 500}; 
 pDevice->Clear(1, &bg1, D3DCLEAR_TARGET, txtBlack, 0, 0); 
 D3DRECT bg2 = {15, 15, 195, 495}; 
 pDevice->Clear(1, &bg2, D3DCLEAR_TARGET, txtRed, 0, 0); 
 D3DRECT rbg3 = {20, 20, 190, 490}; 
 pDevice->Clear(1, &bg3, D3DCLEAR_TARGET, txtBlack, 0, 0); 
 */
 D3DXCreateFontA(pDevice, 14, 0, FW_NORMAL, 1, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, 
 ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial", &pFont ); 
 DrawFontA(300,50,txtRed,"Ein Text.");

 return pEndScene(pDevice); 
}
Habe mich mal an ein Tutorial mit ein paar weiteren Seiten parallel gesetzt und bin jetzt dabei, auf D3D9 Basis ein paar Sachen zu zeichnen.
Wie oben schon auskommentiert zu sehen ist, habe ich neben dem (nicht funktionierenden) Text auch drei Rechtecke drinnen, die allerdings funktionieren. Nur der Text nicht.

ID3DXFont ist bereits als pFont deklariert und Fehler werden ebenfalls keine angegeben.

Positionen sind ja auch richtig angegeben, ich vermute mal einen programmiertechnischen Fehler, wobei ich auf Google dazu auch nichts weiter gefunden habe, wäre daher dankbar um Hilfe
X3enox is offline  
Old 04/06/2014, 18:27   #2
 
elite*gold: 46
Join Date: Oct 2010
Posts: 782
Received Thanks: 525
Wie soll denn bitte in dem buffer in DrawFontA magischer Weise der Text aus dem Argument format kopiert werden ? buffer[2048] ist immer leer.
th0rex is offline  
Old 04/06/2014, 18:28   #3
 
Dr. Coxxy's Avatar
 
elite*gold: 0
Join Date: Feb 2011
Posts: 1,206
Received Thanks: 736
jeden frame den font neu zu erstellen und nicht zu releasen wird auf jedenfall ne tolle sache sein, außerdem solltest du den buffer in drawfonta vllt auch i-wie füllen, das rect kann man sich korrekt ausrechnen anstatt der schwachsinnigen hardcoded values, etc...

bitte erst die sprache lernen und paar sachen selbst programmieren anstatt sowas zu copypasten.
Dr. Coxxy is offline  
Old 04/07/2014, 16:54   #4


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Nana, zum Lernen sind hardcoded Werte doch erstmal völlig ok.

Was dir fehlt ist ein sprintf_s Aufruf, der den Inhalt von format in den Buffer kopiert.
Ich rate dir btw zu std::string.

Und wie der freundliche Herr über mir schon sagte: Font nur dann erstellen, wenn es nötig ist; im Optimalfall ein einziges Mal.
MrSm!th is offline  
Thanks
1 User
Old 04/21/2014, 22:38   #5

 
[FLuX]'s Avatar
 
elite*gold: 18
The Black Market: 422/0/0
Join Date: Aug 2010
Posts: 1,840
Received Thanks: 353
Ist eigentlich einfach einen D3D9 Text zu erstellen.
Als erstes musst du die Font erstellen. Dies ist meine Funktion dazu:
Code:
void MAIN::CreateFont (LPDIRECT3DDEVICE9 pDevice)
{
	bool bFont = false;
	if(pFont)
	{
		pFont->Release();
		pFont = false; 
		bFont = false;
	}

	if(!bFont)
	{
		D3DXCreateFontA(pDevice, 14, 6, FW_BOLD, 1, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial", &pFont);
		bFont = true;
	}
}
und den Text dann:
Code:
void MENU::lWriteText (int x, int y, D3DCOLOR Color, char *Text)
{
	RECT rect;
    SetRect(&rect,x,y,x,y);
    pFont->DrawTextA(0, Text, -1, &rect, DT_NOCLIP | DT_LEFT, Color);
}
Bei fragen kannst du mich gerne PNen^^
[FLuX] is offline  
Old 04/22/2014, 01:09   #6
 
Master674b's Avatar
 
elite*gold: 0
Join Date: Dec 2012
Posts: 255
Received Thanks: 110
D3DX ist deprecated und ich würde euch auch sonst abraten das zu verwenden. Vorallem die ID3DXFont hat so einige böse macken (hatte ich früher auch kurz verwendet). Nimm lieber freetype oder GDI+ und rendere dann deinen Text in ne Glyphmap. Dann kannst du z.B. über nen Shader den gewünschten Text zeichnen. Das wäre super effizient und flexibel. Wird auch so in der Regel von allen guten Programmen so gemacht.

Zusätzlicher Vorteil wäre, dass das dann unabhängig vom verwendeten Renderer ist (ab DirectX 11 musst du das eh so machen).
Master674b is offline  
Old 04/22/2014, 02:40   #7
 
​Tension's Avatar
 
elite*gold: 110
Join Date: Jun 2013
Posts: 599
Received Thanks: 510
Denke aber mal das er einen D3D-Hook machen möchte.
​Tension is offline  
Old 04/22/2014, 15:54   #8
 
Master674b's Avatar
 
elite*gold: 0
Join Date: Dec 2012
Posts: 255
Received Thanks: 110
Quote:
Originally Posted by ​Tension View Post
Denke aber mal das er einen D3D-Hook machen möchte.
Was hat das damit zu tun? Er möchte Text zeichnen.
Master674b is offline  
Reply


Similar Threads Similar Threads
[D3D9 Bases] Sprited D3D9 Base with many functions
02/20/2012 - WarRock Hacks, Bots, Cheats & Exploits - 1 Replies
Hey, I found a site where a free D3D Base is and it has much functions.. and if you have a question, they help you with teamviewer! ♥ and if wr-cheats is down, you can download the newest sirosix public there. Venom Hacks - Unreal Portal



All times are GMT +1. The time now is 15:27.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.