Hlavne menu We are sorry, but magazine AMMO is suspended. Here is just read-only access to the articles archive. Some features are removed because they were outdated, pointless in read-only (voting and pools), or it was missused by spammers (comments) etc. Now the webpages aren't maintained so when something will get broken most probably it won't be fixed at all. If you liked our magazine then please make donation with paypal so we can pay for traffic on this server.

TOP Výuka
01 Maľované krížovky 103 bodov
02 OpenGL, lákadlo 38 bodov
03 MySQL (+ použitie Visual C++ a PHP) 28 bodov
04 OpenGL, časť 1 21 bodov
05 Huffmanove kódovanie 19 bodov
06 Pascal, časť 1 18 bodov
07 Ako tlačiť s HP 16 bodov
08 Základy HTML časť 2 16 bodov
09 Základy HTML časť 3 13 bodov
10 Hry pre nenáročných + zdrojáky 10 bodov
11 OpenGL, úvod 8 bodov
12 Faktúrka v4.0 + zdrojáky v MS Visual C++ 6.0 7 bodov
13 OpenGL – Intermezzo 1 7 bodov
14 OpenGL povinná literatúra 6 bodov
15 Základy HTML časť 1 6 bodov
Najnovsie clanky
Kvalitné služby podľa skúseností iných - TopSlužby.sk
LOTR - Dve veže - Parodia - Scénka 2. časť
Neverwinter nights
Children Of Bodom-Hatebreeder
Kult Duny - 6. časť (Bonus)
Kult Duny - 5. časť (Filmy, Hry)
Dobré ráno. (morc certa, hora incerta...)
Kult Duny - 4. časť (Knihy 2/2)
Stretnutie Spoločenstva Tolkiena
GRAVE DIGGER – Knights Of The Cross
Kult Duny - 3. časť (Knihy 1/2)
Kult Duny - 2. časť (Pojmy)
Kult Duny - 1. časť (Úvod)
LOTR - Dve veže - Parodia - Scénka
Jackass
Vsetky clanky
Airsoft - Specnaz [4 clanky]
Básne [6 clankov]
Fantázia [4 clanky]
Filmy a DVD [51 clankov]
Hardware [10 clankov]
Hry [170 clankov]
Hry, návody [6 clankov]
Hudba [8 clankov]
Internet [7 clankov]
Knihy [6 clankov]
O AMME [4 clanky]
Pandemonium [10 clankov]
Poviedky [14 clankov]
Programy [18 clankov]
Rôzne [8 clankov]
Technické [3 clanky]
Úvahy [8 clankov]
Výuka [50 clankov]
Ako tlačiť s HP
Algoritmy v grafoch
Fake2
Faktúrka
Faktúrka v4.0 + zdrojáky v MS Visual C++ 6.0
Fract
HLSaver
Hry pre nenáročných + zdrojáky
Huffmanove kódovanie
IPicture2 & aggresiveoptimize.h
Maľované krížovky
MySQL (+ použitie Visual C++ a PHP)
OpenGL - GLWnd
OpenGL AMMO Saver
OpenGL povinná literatúra
OpenGL – Intermezzo 1
OpenGL, časť 10
OpenGL, časť 11
OpenGL, časť 12
OpenGL, časť 13
OpenGL, časť 14
OpenGL, časť 16
OpenGL, časť 17
OpenGL, časť 18
OpenGL, časť 7
OpenGL, časť 8
OpenGL, časť 9
Opengl – Cloth Simulation
RenameR
SkinMagic
WinSocket Communication via VC++
Údajové štruktúry
viac...
Zábava [5 clankov]
Zdravie [15 clankov]
Celkovy pocet clankov: 407
OpenGL, časť 15 
Výuka | Dna 18.8.2002 | Johny | 3 znamky, priemer 2.00 | 6025 videni | 1431 WAP videni

V dnešnej časti sa budeme do tretice venovať fontom. Tentokrát to budú textúrované fonty. Zdrojový kód, ktorý bude uvedený je špecifický len pre windows. Ide o funckiu wgl, ktorá už bola spomínaná. Apple má napríklad agl a X glx. Nedá sa zaručiť, že tento kód je plne prenositeľný na inú platformu, avšak jeho modifikácia by nemala byť náročná.

Nasledujúce riadky sú už určite známe z predošlej časti.

#include <windows.h>
#include <math.h>
#include <stdio.h>
#include <glgl.h>
#include <glglu.h>
#include <glglaux.h>

HDC hDC=NULL;
HGLRC hRC=NULL;
HWND hWnd=NULL;
Handle
HINSTANCE hInstance;

bool keys[256];
bool active=TRUE;
Default
bool fullscreen=TRUE;


Pridáme 1 textúru, kde uložíme náš obrázok.

GLuint texture[1];
GLuint base;

GLfloat rot;

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

Nasledujúci kód obsahuje pár zmien, ako font použijeme Wingdings, to je font, ktorý obsahuje rôzne značky, určite ste sa s ním už stretli, nie sú tam žiadne písmená, len symboly. My si vyberieme lebku so skríženými kosťami, pirátsky znak. Samozrejme funguje to aj na iné fonty.

Nie je také ľahké uviesť wingdings do chodu, treba ešte windowsu povedať, že ide o symbolový font, nie o znakový.


GLvoid BuildFont(GLvoid)
{
GLYPHMETRICSFLOAT gmf[256];

HFONT font;

base = glGenLists(256);

font = CreateFont( -12,
0,
0,
0,
FW_BOLD,
FALSE,
FALSE,
FALSE,

Dôležitý je tento riadok, kde třeba napísať, že ide o symboly, teda SYMBOL_CHARSET.

SYMBOL_CHARSET,

OUT_TT_PRECIS,
CLIP_DEFAULT_PRECIS,
ANTIALIASED_QUALITY,
FF_DONTCARE|DEFAULT_PITCH,
"Wingdings");


SelectObject(hDC, font);
wglUseFontOutlines( hDC,
0,
255,
base,
0.1f, // outline štýl
0.2f,
WGL_FONT_POLYGONS,
gmf);
}

Nahráme textúru…

AUX_RGBImageRec *LoadBMP(char *Filename)
{
FILE *File=NULL;

if (!Filename)
{
return NULL;
}

File=fopen(Filename,"r");

if (File)
{
fclose(File);
return auxDIBImageLoad(Filename);
}

return NULL;
}

int LoadGLTextures()
{
int Status=FALSE;

AUX_RGBImageRec *TextureImage[1];

memset(TextureImage,0,sizeof(void *)*1);

if (TextureImage[0]=LoadBMP("Data/Lights.bmp"))
{
Status=TRUE;
glGenTextures(1, &texture[0]);

glBindTexture(GL_TEXTURE_2D, texture[0]);
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);

Nasledujúce 4 riadky vygenerujú automaticky koordináty pre textúru, teda skôr pre akýkoľvek objekt, ktorý budeme kresliť. Používa sa na to program glTexGen. Všetko, čo potrebujete vedieť je, že GL_S a GL_T sú koordináty textúry. GL_S zabezpečí pokrytie textúrou v smere horizontálnom a GL_T v smere vertikálnom. Pre obe je možné použiť jeden z nasledujúcich parametrov.

GL_TEXTURE_GEN_MODE – parameter, jeden z nasledujúcich
GL_EYE_LINEAR – Textúra je pevná, nikdy sa nepohybuje.
GL_OBJECT_LINEAR – Textúra je pevne fixovaná na objekt.
GL_SPHERE_MAP – Obľubený typ, vytvorí ilúziu odrážania sa lesklého povrchu.



glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);

glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
}

if (TextureImage[0])
{
if (TextureImage[0]->data)
{
free(TextureImage[0]->data);

}

free(TextureImage[0]);
}

return Status;
}


Jediná změna nastala v poradí, najprv sa nahrá textúra, až potom sa vytvorí font.


int InitGL(GLvoid)
{
if (!LoadGLTextures())

{
return FALSE;

}
BuildFont();

glShadeModel(GL_SMOOTH);
glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture[0]);
return TRUE;
}




int DrawGLScene(GLvoid)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();



glTranslatef(1.1f*float(cos(rot/16.0f)),0.8f*float(sin(rot/20.0f)),-3.0f);

glRotatef(rot,1.0f,0.0f,0.0f);
glRotatef(rot*1.2f,0.0f,1.0f,0.0f);
glRotatef(rot*1.4f,0.0f,0.0f,1.0f);

glTranslatef(-0.35f,-0.35f,0.1f);



glPrint("N");

rot+=0.1f;
return TRUE;
}

if (!UnregisterClass("OpenGL",hInstance))
{
MessageBox(NULL,"Could Not Unregister Class.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
hInstance=NULL;
}

KillFont();
}

Nič náročné to nebolo. Nabudúce to už možno bude trochu zaujímavejšie. Pretože „vyliezajú v noci, a idú si po Vás, citíte ich, ale nevidíte, všade je HMLA...“ ktorej sa budeme venovať nabudúce.

Tradične zdroják a skompilované exe nájdete tu:
http://www.softsklad.host.sk/opengl/lesson15.zip


Najnovsie clanky od tohto redaktora
Podobne clanky