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.

Priložené súbory: