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ť 15
OpenGL, časť 16
OpenGL, časť 17
OpenGL, časť 18
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
Pascal, časť 6 
Výuka | Dna 19.11.2001 | Johny | 5 znamok, priemer 4.40 | 4762 videni | 794 WAP videni

Pohyb : šípky hore a dole, PageUp a PageDown, Home a End
Ukončenie : ESC
Veľa vecí sa zmenilo, všimli ste si isto, že objem súborov sa zmenil. Ammo je teraz robené v C, má to výhody, ako napr. je to rýchlejšie, dajú sa zohnať knižnice na dekódovanie JPG, ... Nevýhody snáď len to, že exečko je veľké, ale to sa dá spraviť pakovaním. Tento diel bude pravdepodobne o grafike, lebo nič iné ma za 6 hodín nenapadlo, t.j. odvtedy ako mi Shadow povedal, že by som mal dačo napísať. Nuž, čo Vám budem hovoriť o grafike, iste viete, že v Pascale sa dá tiež kresliť, nebudem tu rozoberať veci, ktoré sa dajú nájsť v helpe spolu aj s peknými príkladmi. Budem hovoriť o veciach, ktoré v helpe nie sú bohvieako rozobraté.
Najprv začnem s tým, že Pascalovský graph zryjem pod čiernu zem, výhody: Ak nemáte záujem o rýchlu grafiku a chcete len sem tam takú čiarku, tak potom Vám postačí klasický unit graph. Nevýhody: pomalé, len ťažko ovplyvniteľné, používate veci, do ktorých nemáte možnosť nahliadnuť, ... Ja osobne preferujem knižnice, ktoré sú napísané v Asm. Je to rýchle a navyše vidím ako to funguje. Skúste si urobiť program, ktorý bude vykresľovať bod po bode na obrazovku, až ju zaplní celú, skúste to urobiť cez klasický graph a uvidíte rýchlosť, že až. Ak máte však nejakú 450, tak možno to ani nezbadáte, ale skúste to na 286 a to bude iný rozdiel. Klasický putpixel z unitu graph je strašne pomalý, ja neviem, či sa tam testujú podmienky ako :
1. Chcem kresliť ?
2. Je zapnutý monitor ?
3. Koľko je hodín ?
4. ...
A teraz si vezmite, že takéto podmienky prebehnú napr. 320x200 krát a už to zaberá času, že až. V skutočnosti však takéto podmienky nie sú, tieto boli len na ukážku. Vo vlastných unitoch môžte robiť, čo chcete, viete ako čo funguje a viete si to zlepšiť. Na ukážku som hodil do prílohy hru Muzzle, je to hra, ktorú som začal robiť, bola to hra, ktorá chodila na Didaktiku a tak som chcel mať takú aj na mojom PC a prípadne ešte aj preto som to robil, lebo to nebolo až tak náročné. Bližšie Info viď už v samotnej hre, alebo v readme.txt. Snáď začnem tým ako to v grafike chodí, všetko, čo sa vykreslí na obrazovku, je v pamäti niekde uložené, a táto adresa je pre textový mód B800:0000 pri Ega, pri grafickom režime je to A000:0000. Nás bude zujímať režim vga, teda adresa A000:0000. Príklad, ktorý budem písať bude v móde 320x200x256. To znamená, že počnúc od adresy A000:0000 budú v pamäti uložené byty, ktoré reprezentujú farby bodov smerov od ľavého horného bodu smerom doľava, cez ďalší riadok až po pravý dolný bod obrazovky. Byty to budú preto, lebo máme 256 farieb, a byte má presne taký rozsah, teda od 0 až po 255, to je spolu 256 farieb. Jeden byte je 8 bitov, teda osem číslic v rozsahu od 0 po 1. Napríklad číslo 0 je 00000000, číslo 255 je 11111111. Je to ako keby ste to číslo neustále zvyšovali, ale tak, že nepoužijete čísla iné ako 0 alebo 1. Budem počítať v dvojkovej sústave od 0 po 5.
Ideme : 00000000
00000001
00000010
00000011
00000100
Nie je to ťažké, však nie. V pamäti sú informácie zapísané za sebou, teda bod 0,0 je v pamäti ako prvý, bod 100,0 je v pamäti ako 100(informácia). No a aby sme my zapísali nejaký ten pixel na správnu pozíciu, musíme si miesto v pamäti nejako vypočítať. Je to veľmi ľahké. Napr. bod 100,0 vypočítame takto : y*320+x. Y znamená y-ovú súradnicu a x znamená x-ovú súradnicu. A keď to ešte hodíte do assembleru, tak to bude rýchle až až. Samozrejme, keď chcete vykresliť štvorec, tak to nebudete robiť po bodoch. Musíte si urobiť procedúru, ktorá nebude zakaždým počítať znova súradnicu, ale napríklad len každý riadok. V jednom riadku použijete predchádzajúcu adresu tak, že k nej pripočítate jedna a už máte súradnicu bodu, ktorý leží napravo od aktuálnej adresy. V móde s rozlíšením len 2 farieb, sú údaje zapísané tak, že v jednom byte je až osem bodov. Prečo? Lebo pomocou 0,1 sa dá zapísať táto jedna farba. Napríklad byte 01010101 budú farby v poradí čierna, biela, čierna, biela. Samozrejme, že potom sa bude adresa počítať inak.
V móde s True Color, teda 24bitovom móde, potrebujete až 24 bitov na jednu farbu, lebo každá farba pozostáva z troch základných farieb zmiešaných v istom pomere, a to sú farby RGB, red, green, blue. Červená, zelená, modrá. Prvých 8 bitov povie zložku červenej farby druhých osem zelenej a tretích osem modrej. Každá zložka môže mať 256 odtieňov. To znamená, že všetkých možností namiešania jednej farby je 256*256*256 = 16 777 216. To je pekné množstvo. Napríklad farby so zložkami R=55 G=155 B=110 a farba R=55 G=155 B=111 sú tak podobné, že by ste museli mať zrak ako Superman, aby ste našli medzi nimi rozdiel. V 8 bitovom móde, teda 256 farieb, sa problém s niektorými farbami rieši tak, že sa zmení paleta. To znamená, že keď chcem odtiene modrej, tak v štandardnej palete ich nájdem asi 8 alebo 16 a nič viac. Lenže ja chcem plynulý prechod, preto zmením paletu a napríklad zelenú farbu zmením na nejaký odtieň modrej tak, že uberem hodnoty R a hodnotu G, tým pádom ostane len hodnota B. A výsledná farba bude modrá. Tento príklad demoštruje zobrazenie PCX-ka v 320x200x256 za použitia zmeny palety. Skúste nemeniť paletu a uvidíte, čo to urobí s obrázkom. Tento program prehliada len 256 farebné PCX s rozlíšením max 320x200.
Tento zdroják je aj osobitne v adresári.
V pcxku je obrazok baleny RLE kompresiu
preto ho treba rozbalit}
Program PCX_View;
Uses Crt,Dos;
Type PCX_Data = Record
Hlavicka : Byte;
Verzia : Byte;
Kodovanie : Byte;
BytyNaPixel : Byte;
X,Y,X1,Y1 : Word;
Rozlisenie_X : Word;
Rozlisenie_Y : Word;
Farby : Array [1..48] of Byte;
Rezerva : Byte;
PocetRovin : Byte;
BytovNaCiaru : Word;
PaletaInfo : Word;
Volne : Array [1..54] of Byte;
End;
Var PCX : ^PCX_Data;
F : File;
Buffer , Obrazok , Paleta : Pointer;
Cyklus : Word;
Procedure PCX_Info;
begin
If PCX^.Hlavicka = $0A then
begin
writeln(‚PCX verzia : ‚,PCX^.Verzia);
write(‚PCX okno : X[‘,PCX^.X,‘],Y[‘,PCX^.Y,‘]‘); writeln(‚X1[‘,PCX^.X1,‘],Y1[‘,PCX^.Y1,‘]‘); writeln(‚Rozlisenie X : ‚,PCX^.Rozlisenie_X); writeln(‚Rozlisenie Y : ‚,PCX^.Rozlisenie_Y); writeln(‚PCX paleta : ‚,PCX^.PaletaInfo); writeln;
If (PCX^.Rozlisenie_X <= 320) and
(PCX^.Rozlisenie_Y <= 200) and
(PCX^.Verzia = 5) then writeln(‚Mozem zobrazit PCX subor.‘) else begin writeln(‚Nemozem zobrazit PCX subor !‘);Halt(1);end;
end
else begin
writeln(‚Toto nie je PCX subor !‘);Halt(1); end; delay(200); end;
Procedure Rozbal_PCX(Kolko : Word); Assembler;
Asm
cli
push ds
push bx
les di,Obrazok
mov bx,Kolko
lds si,Buffer
add bx,si
xor cx,cx
lodsb
mov dl,al
and dl,$c0
cmp dl,$c0
jne @NORMAL
and al,$3f
mov cl,al
lodsb
rep stosb
jmp @OK
stosb
cmp si,bx
jne @ROZPAKUJ
pop bx
pop ds
sti
End;
Procedure NastavMod( CisloModu : Word ); Assembler;
Asm
mov ax,CisloModu
int 10h
End;
Procedure NastavPaletu ( KtoraPaleta : Pointer ); Assembler;
Asm
cli
push ds
lds si,KtoraPaleta
mov dx,3c8h
xor al,al
out dx,al
inc dx
mov cx,768
rep outsb
pop ds
sti
End;
Procedure Kresli_Obrazok( X,Y,X1,Y1 : Word ); Assembler;
Asm
push ds
mov ax,320
mov cx,Y
mul cx
add ax,X
mov di,ax
mov ax,0a000h
mov es,ax
lds si,Obrazok
mov dx,[Y1]
push di
mov cx,[X1]
rep movsb
pop di
add di,320
dec dx
jnz @RIADKY
pop ds
End;
Begin
ClrScr;
if ParamCount >= 1 then
begin
GetMem(PCX,128);
GetMem(Buffer,64000); FillChar(Buffer^,64000,0);
GetMem(Obrazok,64000); FillChar(Obrazok^,64000,0);
GetMem(Paleta,768); FillChar(Paleta^,768,0);
Assign(F,Paramstr(1));
Reset(F,1);
BlockRead(F,PCX^,128); Nacia hlavicku PCX suboru PCX_Info; Informacie o PCX subore Seek(F,128);
BlockRead(F,Buffer^,FileSize(F)-720);
Nacita spakovany obrazok
Rozbal_PCX (FileSize(F)-848); Rozpakuje obrazok
Nacita paletu od konca odcita 768
byte-ov a nastavi poziciu v subore
Seek(F,FileSize(F)-768);
BlockRead(F,mem[seg(Paleta^):ofs(Paleta^)],768);
NastavMod($13); 320x200*256
For Cyklus := 0 to 768 do
mem[seg(Paleta^):ofs(Paleta^)+Cyklus] := mem[seg(Paleta^):ofs(Paleta^)+Cyklus] shr 2;
NastavPaletu(Paleta); Nastavi skonvertovanu paletu Kresli_Obrazok(0,0,PCX^.X1+1,PCX^.Y1+1); readkey;
NastavMod($3); 80x25*16 end else writeln(‚Pouzitie : pcx_view.exe pokus.pcx‘);
End.


Najnovsie clanky od tohto redaktora
Podobne clanky