Direct 3D - Písmo
Pri tvorbe hier, či 2D alebo 3D potrebujete užívateľovi zobraziť nejakú správu, čo by samozrejme bez fontov nebolo možné. Pri fullscreen zobrazení používate celý formulár pre Direct3D, ktorý celý jeho obsah zmaže pomocou príkazu Clear. Preto vytvoriť Label na formulár nepomôže - bude zmazaný.
Ako to funguje ?
Je to úplne jednoduché. Direct3D používa vlastný spôsob zobrazovania fontov. .Najprv vytvoríte Visual Basicovský font, ktorý predáte ako parameter funkcii CreateFont, a tým vytvoríte Direct3D font. Potom text jednoducho zobrazíte s DrawText.
Dim D3d_Pismo As D3DXFont 'Deklaracia fontu, ktore pouziva direct3D Dim TextRect As RECT 'oblast kde bude text
Najprv vytvoríme Stdfont so všetkými potrebnými vlastnosťami, ktorý potom skonvertujeme na IFont a predáme funkcii Create Font.
'Vytvorenie VB fontu Dim Temp_pismo As IFont Dim pismo As New StdFont pismo.Name = "Verdana" pismo.Size = 12 pismo.Bold = True Set Temp_pismo = pismo 'Vytvorenie Direct3D fontu. Set D3d_Pismo = D3DX.CreateFont(D3DDevice, Temp_pismo.hFont) TextRect.Top = 1 'horny okraj obdlznika TextRect.Left = 320 'lavy okraj obdlznika TextRect.bottom = 20 'dolny TextRect.Right = 420 'pravy
Takisto IFont, StdFont , D3d_Pismo sú objekty, preto s nimi treba aj tak pracovať. Pri priraďovaní nestačí iba dať medzi ne znamienko rovnosti (=), ale aj použiť príkaz SET. Všimnite si, že opäť používame pomocnú knižnicu D3DX.
CreateFont
Device = D3DDevice - Device, ktoré akceptuje font
hFont =Temp_pismo.hFont - handle VB fontu
Font je vytvorený, už len treba určiť, kde bude zobrazený skôr než ho vyrenderujeme. Na to nám poslúži štruktúra RECT. Je zhodná s Windows API RECT.
Type RECTLeft As Long Top As Long Right As Long Bottom As Long End Type
Renderovanie
D3DX.DrawText D3d_Pismo, &HFFCCCCFF, "FPS: " & FPS_Current,
TextRect, DT_TOP Or DT_CENTER
Výsledkom je text “FPS: fps” v hornej časti obrazovky.
DrawText
D3dfont = D3d_Pismo - náš font
Color = &HFFCCCCFF - farba písma
Textstring - zobrazený text
Rect = D3dRect - oblasť, kde sa má umiestniť text
Format = DT_TOP Or DT_CENTER - umiestnenie text v oblasti.
Bitmap Font
Druhý spôsob ako sa dá zobraziť textu na obrazovku je vytvoriť si vlastnú znakovú sadu. Tento spôsob používajú mnohé hry, preto ho sem uvádzam. Do jednej bitmapy sa nakreslia všetky znaky, ktoré budeme potrebovať. Každý znak má vyhradený rovnaký priestor (napr. 24×24), aby sa ľahšie extrahoval. Tak dokážeme presne zistiť, na ktorom mieste v bitmape sa nachádza.Teraz konkrétne: Písmeno G sa nachádza na 15 mieste v znakovej sade. Vieme, že 1 znak má šírku 24 pixelov. Tzn., že G sa bude v rozhraní (15 * 24) až (15 * 24 + 15) pixelu zľava.
Dodatok
FPS (Frames pre second) - počet vyrederovaných scén za sekundu. Pre odlaďovanie svojich programov budete potrebovať tento údaj. Je jasné, že čím rýchlejší počítač, tým väčšie FPS. Naopak, pri veľkom počte objektov, svetiel, textúr FPS rýchlo klesá. Optimálne je, aby PFS nekleslo pod 30 (ľudské oko aj tak viac nevníma).
Na zistenie FPS použijeme API funkciu GetTickCount na meranie času, ktorý ubehol od spustenia systému Windows v milisekundách. Pri každom volaní procedúry Render sa zistí aktuálny čas a porovná s časom na začiatku. Ak je rozdiel medzi nimi 1000 milisekúnd (1 sekunda) potom algoritmus vráti FPS = počet volaní procedúry Render.