Gnmzdeki gl PCler  ile birok  demo efektini  yapmak olduka  kolaylamaya
balad ancak Atari 800XL, Atari ST, Spectrum, Amstrad, Commodore 64,  Amiga  ve
benzeri baz  eski  platformlarda efekt  yapmak  hala zorluunu  koruyor.  Amiga
bunlarn  arasndan  syrlmay  biraz  baarsa  da  elbette  ki  Amiga   500'de
alacak bir demo yazmak istiyorsanz yine ayn sorunla kar karyasnz.

Yaznnn hemen  banda  belirtmeliyim  ki hayatm  boyunca  adam  akll  Linux
kullanmadm iin  anlatacam  yntemlerin  hepsi  Windows  platformuna  bal
olacaktr. Ancak PC  scene'inde en ok  kabul gren platform  Windows olduu  ve
son yllarda  DirectX'in  de  OpenGL'e  scenede  salad  stnlk  gz  nne
alnrsa, 2005  yl  itibariyle  platform  seimimden  rahatsz  olmayacanz
mit ediyorum.

imdi asl konumuza gelelim.  PC'de demo efekti yapmak  kolay m? Bence  olduka
kolay nk  kullanabileceiniz  yzlerce  dil  var.  Bu  dillerden  birine  iyi
derecede hakim  olmanz  ve bu  dilden  grafik ekranna  eriebilmeniz  yeterli.
Ancak demoscenede kabul  grmeniz iin  yeterli deil. PC  Scene'inde 15  yldr
(zaten ok daha uzun bir  gemii yok PC sceneinin) kabul  gren ve bence de  en
iyi ikili  Assembler&C/C++'dr.  Ne  var ki  gnmzde  birok  hazr  ktphane
(library) kullanld  iin Assembler'a  eskisi  kadar ihtiya  duyulmuyor.  Bu
durumda herey dnp  dolap C/C++'da  bitiyor. Peki C  mi C++  m? Eer  dosya
boyutunun  kk   olmasn  istiyorsanz,   rnek  olarak   4KB'lk  bir   demo
hazrlyorsanz, ANSI C kullanmanz  en ideali olacaktr.  Ancak byk bir  demo
projesine  giriyorsanz,  nesneye  ynelik   programlama  (OOP)  ve   snflarn
(class) kullanm iinizi  kolaylatrabilir (tabii  kolaylatrmaya da  bilir).
Bu durumda C++ tercihiniz olmal.

Bu n bilgilerden  sonra gelelim  konumuza yani "test  platformu"ndan kastn  ne
olduuna.  PC'de  Visual  C++,  Borland   C++,  LCC  ve  benzeri   derleyicileri
kullanarak aklnza  gelen  bir demo  efektini  hzlca test  etmek  tecrbe  ve
nceden  hazrlanm  taslak  projeler  gerektirir.   Eer  bu  tr  bir   bilgi
birikiminiz yoksa  efekti  hzlca  test etmek  iin  atnz  derleyici  size
bakar,  siz  derleyiciye.  Daha   sonra  kendinizi  Google'da  kaybolmu   halde
bulabilirsiniz. te  bu dkman  yeni balayanlara  baz eyleri  hzlca  test
etme yntemleri gstermek ve  PC harici platformlarda  efekt yapan kiilerin  de
efektlerini  PC'de   test  edip   kendi  platformlarna   nasl  uygun   biimde
aktarabileceklerini anlatmak amacyla hazrland.

ncelikle Windows'un  zerinde gelen  hazr baz  yap ve  dillerle  balayalm.
Test platformu iin kullanl olanlar:

1) HTML ve ona  bal temel scripting dilleri  olan JavaScript, VBScript ve  VML
(Vector Markup Language).
2) VBScript  ve  JavaScript'in  HTML  harici,  VBS  ve  JS  dosya  uzantlaryla
kullanm ve ActiveX kontrolleri.
3) TinyPTC ktphanesi.

Windows'un  zerinde   hazr  gelmese   de  kullanm   ok  basit   olan   baz
ktphaneler  vardr.   Bunlardan  benim   karlatm  en   basit   ktphane
TinyPTC'dir.

Elbette ki efektleri hzlca  test etmenin QBasic, Turbo  C++ gibi baka  pratik
yollar  da   var  ancak   gnmzde   Windows  versiyonlar   ilerledike   DOS
uygulamalarnn  almamaya   balamas  nedeniyle   bu  yntemleri   anlatmay
gerekli grmyorum. DarkBasic,  PureBasic, BlitzBasic gibi  basic dillerini  ise
kullanl olmalar  ve yksek  kaliteli  sonular retmelerine  ramen  scenede
kabul grmedikleri  iin (ve  ben de  kullanmadm iin)  pas geiyorum.  Ancak
elbette ki  bu basic  dilleri ve  Python, PHP  gibi dier  scripting dilleri  de
benzer amalarla kullanlabilirler.

imdi   srayla    yukarda    maddelenen   konular    anlatmaya    balayalm.

HTML, Scripting Dilleri ve VML:

Aslnda HTML tek bana efekt programlamada hemen hemen hibir ie  yaramaz.  En
fazla ekran  dzeni  gibi eyleri  grmemiz  iin kullanl  olabilir  ki  bunu
herhangi bir izim programyla da yapmamz mmkn. Ancak HTML'in  iersinde  yer
alan  form  objeleri,   DIV,  SPAN   gibi  baz   tagler  scripting   dilleriyle
birletirilince ok  gzel kullanm  alanlarna  sahip oluyorlar.  zellikle  n
hesaplamalarda (precalculation) ok  hzl bir ekilde  kullanm mmkn.  Hemen
bir rnek ile balayalm.  HTML kullanarak bir  sinus tablosu hesaplatp  ekrana
yazdralm.

Standart HTML yapsyla sinus tablosu oluturma:

sinus1.htm
<html><head> <title>Sinus Hesaplama</title></head><body><script
language="JavaScript"><!--for(i = 0; i < 256; i++){ a = Math.sin(i / 128 *
Math.PI); document.write(a + "<br>");}//--></script></body></html>
 

Pratik yoldan sinus tablosu oluturma:

sinus2.htm <script>for(i = 0; i < 256; i++){ a = Math.sin(i / 128 *
Math.PI); document.write(a + "<br>");}</script>
 

Her iki texti  de Notepad'de yazp  .HTM ya da  .HTML uzantsyla  kaydettiiniz
ve bu dosyalar  atnz taktirde  browser ekrannda  ayn sonucu  grrsnz.
Elbette ki  ok  eski  ya  da  ok  tannmam  browserlarda  ikinci  yol  sorun
karabilir ancak  gnmzde  kullanlan Internet  Explorer,  Firefox,  Mozilla,
Netscape, Opera gibi browserlarda her iki versiyon da alacaktr.

Burada  kullandmz  dil  JavaScript.  Detayl  bir  JavaScript  dersi  vermek
yerine;

http://www.w3schools.com/js/default.asp
http://javascript-reference.info/
http://www.dayanahost.com/downloads.cfm 

Bu  URL'leri,   matemetik   fonksiyonlar   kullanmak   iin   "Math"   snfn
kullanmanz  gerketii  ve   ilk  harfinin   byk  olmak   zorunda  olduu   n
bilgilerini veriyor ve bu konuda gerisini size brakyorum.

Peki   HTML+JavaScript   kullanarak   yalnzca   hzl   n   hesaplamalar   m
yapabiliyoruz? Baka  bir espirisi  yok mudur?  Olmaz m.  Gelin  JavaScript'den
bir kp evirelim.

kp1.htm <html>
<head>
<title>Cube3D Demo</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1254">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9">
</head>
<body bgcolor="#000000" onResize="return false" onContextMenu="return false"
onSelectStart="return false" onScroll="return false">
<script>
// Kplerin Kelerini Temsil Eden Grafik Paralarnn Yer Ald Tabakalar
Hazrla
for(i = 0; i < 8; i++)
    document.write("<div id='v" + i + "' style='position:absolute; left:0px;"
+ "top:0px; width:30px; height:30px; z-index:1'><b id='s" + i +
"'></b></div>");

// Global Deikenleri Tanmla
var firstCoorX = new Array(100, 100, 100, 100, -100, -100, -100, -100);
var firstCoorY = new Array(100, 100, -100, -100, 100, 100, -100, -100);
var firstCoorZ = new Array(100, -100, 100, -100, 100, -100, 100, -100);
var coorX = new Array();
var coorY = new Array();
var coorZ = new Array();
var zoom = 300, dist = 350;
var midX = 200, midY = 200;
var PI = 3.1415926535;
var angleXaxis = 0, angleYaxis = 0, angleZaxis = 0;
var hexN = new Array();
hexN[0] = "0";
hexN[1] = "1";
hexN[2] = "2";
hexN[3] = "3";
hexN[4] = "4";
hexN[5] = "5";
hexN[6] = "6";
hexN[7] = "7";
hexN[8] = "8";
hexN[9] = "9";
hexN[10] = "A";
hexN[11] = "B";
hexN[12] = "C";
hexN[13] = "D";
hexN[14] = "E";
hexN[15] = "F";

// Kp evirme Fonksiyonu
function rotateCube()
{
    for(i = 0; i < 8; i++)
    {
        // X Ekseninde evir
        coorY[i] = firstCoorY[i] * Math.cos(angleXaxis / 180.0 * PI) + 
        firstCoorZ[i] * Math.sin(angleXaxis / 180.0 * PI);
        coorZ[i] = firstCoorY[i] * Math.sin(angleXaxis / 180.0 * PI) -
        firstCoorZ[i] * Math.cos(angleXaxis / 180.0 * PI);
        // Y Ekseninde evir
        coorX[i] = coorZ[i] * Math.cos(angleYaxis / 180.0 * PI) + 
        firstCoorX[i] * Math.sin(angleYaxis / 180.0 * PI);
        coorZ[i] = coorZ[i] * Math.sin(angleYaxis / 180.0 * PI) - 
        firstCoorX[i] * Math.cos(angleYaxis / 180.0 * PI);
        // Z Ekseninde evir
        temp = coorX[i];
        coorX[i] = coorX[i] * Math.cos(angleZaxis / 180.0 * PI) + 
        coorY[i] * Math.sin(angleZaxis / 180.0 * PI);
        coorY[i] = temp * Math.sin(angleZaxis / 180.0 * PI) - 
        coorY[i] * Math.cos(angleZaxis / 180.0 * PI);
    }
    // Dn Alarn Arttr
    angleXaxis = (angleXaxis + 1) % 360;
    angleYaxis = (angleYaxis + 2) % 360;
    angleZaxis = (angleZaxis + 3) % 360;
}

// zdm ve Plot Fonksiyonu
function setCube()
{
    for(i = 0; i < 8; i++) // Her 8 Ke in
    {
        if(coorZ[i] + dist > 0) // Eer Grnr Durumdaysa
        {            // FORML: projection_x = x / (z + distance) * zoom
            px = coorX[i] / (coorZ[i] + dist) * zoom;            // FORML:
projection_y = y / (z + distance) * zoom 
            py = coorY[i] / (coorZ[i] + dist) * zoom;            // FORML:
vertex_position_x = center_of_the_area + projection_x
            document.all("v" + i).style.left = midX + px;            //
FORML: vertex_position_y = middle_of_the_area + projection_y
            document.all("v" + i).style.top = midY + py;
            document.all("s" + i).style.fontSize = (300 - coorZ[i]) / 5;
            document.all("s" + i).style.color = "#" +               
conv2Hex(parseInt((550 - coorZ[i]) / 3, 10)) + "0000";
        }
    }
}

// 10'ludan 16'l Say Sistemine Dnm Fonksiyonu
function conv2Hex(decval)
{
    leftval = parseInt(decval / 16, 10);
    rightval = decval % 16;
    hexval = hexN[leftval] + hexN[rightval];
    return hexval;
}

// Ana Rutin
function cubeAnim()
{
    rotateCube(); // Kb evir
    setCube(); // zdm Al ve iz
    setTimeout("cubeAnim()", 20); // 20 Milisaniye Sonra Bir Sonraki Ekran
iz
}
cubeAnim(); // lk Ekran Hesapla</script>
</body>
</html>
 

Not: Sayfa  geniliine  smas iin  baz  alanlar alt  satra  kaydrlmtr
ancak kes&yaptr yntemiyle alndnda program alacaktr.

Bu rnekte de  grld zere HTML  ve JavaScript temel  baz demo  efektlerini
yapmak iin yeterlidir. Zaten Demoscene'de "Scripting" isimli bir  demo  yarma
kategorisinin oluumunda Action Script'in ardndan en nemli dillerden  biri  de
Java Scripttir.

Yukardaki kodu  aklamyorum, yalnzca  bir rnek  olarak veriyorum.  Ancak  bu
rnekte dikkatinizi ekmek  istediim bir nokta  var. O da  kpn yalnzca  ke
noktalarndan ibaret olmas. O  noktalar da aslnda  birer ASCII karakter.  Peki
bizim bu noktalar yerine wireframe yani izgilerden oluan bir  vektr  yapmamz
mmkn deil  mi? Aslnda  pek  de mmkn  saylmaz.  nk HTML  zerine  pixel
basmak diye  bir mantk  yok. Pixel  basmak yerine  her bir  hcresi 1x1  pixele
denk gelen tablolar oluturulabilir. Ancak bu tablolarn da  boyular  bydke
HTML  inanlmaz  derecede  yavalamaktadr.   rnek  olarak  320x200  bir   alan
kullanmak imkansza  yakndr.  Aksi taktirde  saniyede  1 frame  bile  grmemiz
mmkn olmayabilir.  Peki ne  yapmak gerekiyor?  Bu durumda  VML (Vector  Markup
Language)  yardmmza  yetiiyor.  Hemen  ilgili  linkleri  verip  bir   rnee
geiyorum.

http://www.w3.org/TR/1998/NOTE-VML-19980513
msdn.microsoft.com/library/default.asp?url=/workshop/author/vml/default.asp


kp2.htm <html xmlns:v="urn:schemas-microsoft-com:vml">
<head>
<title>Cube3D Demo</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1254">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9">
<style>
        v\:* { behavior: url(#default#VML); }
</style>
</head>
<body bgcolor="#CCCCCC" onResize="return false" onContextMenu="return false" 
onSelectStart="return false" onScroll="return false">
<script>
// Kplerine Kenarlarn Temsil Eden Grafik Paralar
for(i = 0; i < 12; i++)
    document.write("<v:line id='l" + i + "' from='0 0' to='0 0'/>");

// Global Deikenleri Tanmla
var firstCoorX = new Array(100, 100, 100, 100, -100, -100, -100, -100);
var firstCoorY = new Array(100, 100, -100, -100, 100, 100, -100, -100);
var firstCoorZ = new Array(100, -100, 100, -100, 100, -100, 100, -100);
var coorX = new Array();
var coorY = new Array();
var coorZ = new Array();
var px = new Array();
var py = new Array();
var zoom = 300, dist = 350;
var midX = 200, midY = 200;
var PI = 3.1415926535;
var angleXaxis = 0, angleYaxis = 0, angleZaxis = 0;
var hexN = new Array();
hexN[0] = "0";hexN[1] = "1";hexN[2] = "2";hexN[3] = "3";
hexN[4] = "4";hexN[5] = "5";hexN[6] = "6";hexN[7] = "7";
hexN[8] = "8";hexN[9] = "9";hexN[10] = "A";hexN[11] = "B";
hexN[12] = "C";hexN[13] = "D";hexN[14] = "E";hexN[15] = "F";

// Kp evirme Fonksiyonu
function rotateCube()
{
    for(i = 0; i < 8; i++)
    {
        // X Ekseninde evir
        coorY[i] = firstCoorY[i] * Math.cos(angleXaxis / 180.0 * PI) + 
                   firstCoorZ[i] * Math.sin(angleXaxis / 180.0 * PI);
        coorZ[i] = firstCoorY[i] * Math.sin(angleXaxis / 180.0 * PI) - 
                   firstCoorZ[i] * Math.cos(angleXaxis / 180.0 * PI);
        // Y Ekseninde evir
        coorX[i] = coorZ[i] * Math.cos(angleYaxis / 180.0 * PI) +
                   firstCoorX[i] * Math.sin(angleYaxis / 180.0 * PI);
        coorZ[i] = coorZ[i] * Math.sin(angleYaxis / 180.0 * PI) -
                   firstCoorX[i] * Math.cos(angleYaxis / 180.0 * PI);
        // Z Ekseninde evir
        temp = coorX[i];
        coorX[i] = coorX[i] * Math.cos(angleZaxis / 180.0 * PI) + 
                   coorY[i] * Math.sin(angleZaxis / 180.0 * PI);
        coorY[i] = temp * Math.sin(angleZaxis / 180.0 * PI) - 
                   coorY[i] * Math.cos(angleZaxis / 180.0 * PI);
    }
    // Dn Alarn Arttr
    angleXaxis = (angleXaxis + 1) % 360;
    angleYaxis = (angleYaxis + 2) % 360;
    angleZaxis = (angleZaxis + 3) % 360;
}

// zdm ve Plot Fonksiyonu
function setCube()
{
    for(i = 0; i < 8; i++) // Her 8 Ke in
    {
        if(coorZ[i] + dist > 0) // Eer Grnr Durumdaysa
        {
            // FORML: projection_x = center_of_the_area + (x / (z + distance)
                       * zoom)
            px[i] = midX + (coorX[i] / (coorZ[i] + dist) * zoom);
            // FORML: projection_y = middle_of_the_area + (y / (z + distance) 
                       * zoom)
            py[i] = midY + (coorY[i] / (coorZ[i] + dist) * zoom);
        }
    }
    // Taban Yzeyini iz
    drawLine(0,1,"l0");
    drawLine(1,3,"l1");
    drawLine(3,2,"l2");
    drawLine(2,0,"l3");
    // Tavan Yzeyini iz
    drawLine(4,5,"l4");
    drawLine(5,7,"l5");
    drawLine(7,6,"l6");
    drawLine(6,4,"l7");

    // Tavan ve Taban Yzelerini Birletiren izgilerini iz
    drawLine(0,4,"l8");
    drawLine(1,5,"l9");
    drawLine(2,6,"l10");
    drawLine(3,7,"l11");
}

// 10'ludan 16'l Say Sistemine Dnm Fonksiyonu
function conv2Hex(decval)
{
    leftval = parseInt(decval / 16, 10);
    rightval = decval % 16;
    hexval = hexN[leftval] + hexN[rightval];
    return hexval;
}

// izgi izen Fonksiyon
function drawLine(p1, p2, obj)
{
    document.all(obj).from = px[p1] + " " + py[p1];
    document.all(obj).to =
    px[p2] + " " + py[p2];
}

// Ana Rutin
function cubeAnim()
{
    rotateCube(); // Kb evir
    setCube(); // zdm Al ve iz
    setTimeout("cubeAnim()", 20); // 20 Milisaniye Sonra Bir Sonraki Ekran
iz
}
cubeAnim(); // lk Ekran Hesapla
</script>
</body>
</html> 

Not: Firefox  gibi  baz  browserlar  henz  VML'i  desteklemiyorlar.  Yukardaki
script  en   gvenli   biimde   Internet   Explorer'n   yeni   versiyonlaryla
alacaktr.

Evet, grdnz  gibi  derleyici  bile  yok,  yalnzca  Notepad'i  ayoruz  ve
yazyoruz. Ancak  ama demomuzu  HTML platformunda  yapmak deil.  Burdaki  ama
hzlca aklmza gelen  baz efektleri test  etmek ya da bu  efektler iin  veri
retmek.

VBS ve JS:

Evet, gelelim  HTML  harici  scripting dillerinin  kullanmna.  HTML  scripting
rneklerinde JavaScript kullanmtk.  Her iki  dilin de  yaps hakknda  genel
bilginiz olmas iin HTML harici kullanmda Visual Basic Script kullanacam.

lk  olarak  JavaScript'den  ilk   yaptmz  rnei  uygulayalm,  yani   HTML
kullanmadan Visual Basic Script'den bir sinus tablosu retelim.

sinus1.vbs Dim i, a
Const pi = 3.1415926536

For i = 0 to 255
    a = a & sin(i / 128 * pi) & ", "
Next
MsgBox a
 

Evet ite oldu...  mu? Tam olarak  deil. nk kty  artk browser  ekranna
veremiyoruz. Mesaj kutusu kullanarak ekrana yazdrdk ancak yine  sorunlar  var.
Birincisi mesaj ok uzun  olunca tamam ekrana  gelmiyor. kincisi mesaj  olarak
ekranda grsek de kes&yaptr ilemini gerekletiremiyoruz. Peki  ne  yapmamz
gerekiyor? En iyi yntem  sonular bir dosyaya yazdrmak.  Bunun iin de  artk
ActiveX kullanmaya balayabiliriz.

sinus2.vbs Dim i, a
Dim oFSO, tf
Const pi = 3.1415926536 
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set tf = oFSO.CreateTextFile("sonuclar.txt", True)
For i = 0 to 255
    tf.WriteLine(sin(i / 128 * pi))
Next
tf.Close
Set tf = Nothing
Set oFSO = Nothing
			
 

te  imdi   oldu.   Ancak   sonulara   dikkat   edecek   olursanz   bazlar
"4,90676743275773E-02"  eklinde  biimlendirilmi.  Bu  sorunu  gidermek   iin
Visual  Basic   ve   Visual   Basic   Scripting'in   destekledii   FormatNumber
fonksiyonunu kullanabiliriz. Bu durumda scriptin son hali;

sinus3.vbs Dim i, a
Dim oFSO, tf
Const pi = 3.1415926536 
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set tf = oFSO.CreateTextFile("sonuclar.txt", True)
For i = 0 to 255
    tf.WriteLine(FormatNumber(sin(i / 128 * pi), 7))
Next
tf.Close
Set tf = Nothing
Set oFSO = Nothin
 

Bu hale  geliyor. Burda  FormatNumber'a  verdiimiz ikinci  parametre  deeriyle
virglden sonra  7  basamaa hassas  bir  say olarak  biimlendirmi  oluyoruz.

ActiveX kullanmyla birok  ey yapmak, hatta  hatta OpenGL, DirectX  kullanmak
da mmkn ancak  Visual Basic  Script ya da  Java Script'i  bu amala  kullanmak
pek de anlaml olmayacaktr. Bu scripting dillerini bu tr kk  hesaplar  iin
kullanmanz tavsiye ederim.

TinyPTC:

Aslnda TinyPTC yalnzca  ekrana nokta basmaya  yarayan bir grafik  ktphanesi.
Yani izgi  izmek iin  bile kendi  rutinlerinizi yazmanz  gerekiyor. Eer  bu
tr eylerin hazr geldii  bir ktphane istiyorsanz OpenPTC  ya da SDL  sizin
iin daha  uygun olacaktr.  Ancak  kullanm en  basit  ve en  temel  ktphane
olmas nedeniyle TinyPTC ile balamay uygun grdm.

TinyPTC yalnzca 3 fonksiyondan oluuyor.

 ptc_open
 ptc_update
 ptc_close

Hepsi bu kadar. Kullanmlar  da olduka basit. Aada  ok basit bir  kullanm
rnei bulabilirsiniz.

test.c #include "tinyptc.h"

#define WIDTH 320
#define HEIGHT 200
#define SIZE WIDTH*HEIGHT

int buffer[SIZE];

int main()
{
    if(!ptc_open("Test Platformu", WIDTH, HEIGHT)) return 1;
    while(1)
    {
        // Programnz Buraya Yazabilirsiniz
        ptc_update(buffer);
    }
    ptc_close();
    return 0;
}

Hepsi bu  kadar.  Yukarda  tanmlanan  "buffer"  dizisine  24  bitlik  deerler
vererek  RGB  (krmz,  yeil,   mavi)  renkler  tanmlayabiliyorsunuz.   Bunun
haricinde geri  kalan kullanm  DOS'dan  tandmz 13h  (320x200x256)  moduyla
ayn.  Yani   (x,   y)  koordinatna   pixel   basmak  iin   buffer   dizisinin
[y *  WIDTH +  x]inci elemanna  deer vermeniz  gerekiyor. 320x200  znrl
iin [(y  << 8)  +  (y <<  6)  + x]  eklinde  optimize edilebilir.  Bu  elemana
vereceiniz deer ise;

buffer[y * WIDTH + x] = (red << 16) | (green << 8) | blue;

eklinde ifade edilebilir. Burdaki  "red", "green" ve  "blue" 0-255 aras  deer
alabilen birer byte olarak verilmelidir.

Elbette  ki  TinyPTC  ktphanesinin  yukardaki  dosya  haricinde  10  civarnda
program dosyas ve  proje dosyalar  var. Ancak  siz yalnzca  tek bir  dosyayla
uraarak istediinizi yapabiliyorsunuz. Bunun yan sra  "tinyptc.h"  dosyasn
dzenleyerek de  projenin eitli  parametrelerini deitirmeniz  mmkn.  rnek
olarak projenin  DirectDraw,  GDI ya  da  VFW arabirimlerinden  herhangi  birini
kullanmay seebiliyorsunuz.  Ayrca  programnzn  tam  ekran  ya  da  pencere
modunda  almasn,  pencere  modunda  alacaksa  pencere  zelliklerini  bu
dosyaya  yalnzca  comment  (aklama,   yorum)  sembolleri  ekleyip   kararak
dzenleyebiliyorsunuz. rnekler:

DirectDraw kullanmak iin:
#define __PTC_DDRAW__
//#define __PTC_GDI__
//#define __PTC_VFW__

GDI kullanmak iin:
//#define __PTC_DDRAW__
#define __PTC_GDI__
//#define __PTC_VFW__

VFW kullanmak iin:
//#define __PTC_DDRAW__
//#define __PTC_GDI__
#define __PTC_VFW__

TinyPTC'yi indirebileceiniz web adresi:

http://gaffer.scene.org/tinyptc/ 

Eer TinyPTC'yi Visual Studio  ile kullanmak isterseniz  iiniz ok kolay  nk
zaten yukardaki linkten  indirebileceiniz rnek proje  Visual Studio 6.0  iin
hazr geliyor. VS.NET'e de kolayca evrilebiliyor.

Ancak TinyPTC Assembler da kullanld  iin proje derlenirken NASM'ye  ihtiya
duyuyor.  Bu   tool  elinizde   yoksa  aadaki   adreslerden  indirebilir   ve
kurabilirsiniz.

http://www.geocities.com/SiliconValley/Heights/1295/                            
http://nasm.sourceforge.net/doc/html/nasmdoc1.html

Projeyi LCC ile derlemek  isterseniz projede yalnzca  bir iki kk  deiiklik
yapmanz gerekiyor.  Bunun haricinde  retilen  objeleri linkleyecek  bir  batch
dosyas  hazrlamanz  ya   da  LCC   iin  yazlm  bir   arabirim  bulup   bu
arabilirimden linker ayarlarn  yapmanz gerekiyor. LCC  ile kullanm iin  bir
batch dosyas rnei:

compile.bat @echo off
del test.exe
del ddraw.obj
del convert.obj
del test.obj
lcc ddraw.c -nw
lcc convert.c
@echo on
lcc test.c
lcclnk test.obj  mmx.obj ddraw.obj  convert.obj -o  test.exe -subsystem  windows
pause
test
 

Ancak LCC kullanmaya alrken baka problemler de  yaayabilirsiniz.  Bunlarn
hepsinin zmleri  Google'da biraz  dolaarak  bulunabiliyor ancak  kolay  yolu
semek isterseniz Visual C++ 6.0' tavsiye ederim.

Bu Yntemlerin Baka Platformlar in Kullanlmas:

Yukardaki yntemler ile PC'de  hzlca bir efekti test  edebilir, daha sonra  bu
efektin daha profesyonel  bir biimde  programlanmasna giriebilirsiniz.  Ancak
yukardaki  yntemler  PC'de  olduu  kadar   Commodore  64,  Amiga  gibi   dier
platformlar iin de  olduka pratik  olabiliyor. Hatta  hatta dier  platformlar
iin scripting dilleri  ya da C/C++  kullanarak kaynak kod  bile retmek  mmkn
ki zaten bu  ska kullanlan bir  yntem. Bu sayede Commodore  gibi ilem  gc
ve matemetik  fonksiyonlar  konusunda  sknt eken  platformlar  iin  birok
tablo hazrlayabiliyor,  yalnzca  Commodore  kullanarak  hesaplatlmas  gnler
hatta  aylar  alabilecek  efektleri  (rnek:  vector  city)  hzlca  hesaplatp
Commodore'a aktarmak mmkn  olabiliyor. Ayrca PC'nin  bizlere salad  gl
toollar sayesinde bu efektler ok daha kaliteli olabiliyor. Ancak  PC'nin  baka
platformlarda demo yapmak iin nasl kullanld ok kapsaml bir  konu  olduu
iin bu  konuyu baka  bir sayda  ele almay  dnyorum. imdilik  bu  kadar.
Sizlere bol test platformlu gnler diliyorum.


Benimle irtibata gemek isteyenler iin e-mail adresim;
[b]skate@glance.ws

Emir Akaydn
Skate / Glance[/b] 