<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1291941645614113917</id><updated>2011-11-27T18:04:05.718-08:00</updated><category term='C++'/><category term='Flash Oyun Prog.'/><category term='Opengl'/><category term='Matematik ve Fizik'/><category term='Oyun Haberleri'/><category term='Yapay Zeka'/><category term='Oyun Motoru'/><category term='Hazır Araçlar'/><category term='Allegro'/><category term='Delphix'/><category term='3D Studio Max'/><category term='Sektör Haberleri'/><category term='DirectX'/><category term='Genel'/><category term='Visual C#'/><category term='XNA'/><title type='text'>Oyun Programlama ve Oyun Grafikleri</title><subtitle type='html'>C#, C++, Delphix, Java, Directx, Oyun motorları, 3dsmax, Maya, Photoshop Texture, Opengl, XNA, 2d ve 3d oyun, Oyun Dünyasından ve Sektörden Haberler</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>57</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-8388420196873696679</id><published>2008-09-02T16:40:00.000-07:00</published><updated>2008-09-02T17:06:11.951-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Allegro'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Visual C++ 2008 ve Allegro Kurulumu</title><content type='html'>&lt;pre&gt;
Bilgisayarınızda visual studio yoksa bu yeni sürümleri öneririm. Kotasına güvenen indirsin :)

Önce "Visual c++ 2008 Express ve Allegro kütüphane" download linklerini vereyim:

     *Net Framework 3.5 gerekli
&lt;a href=http://www.microsoft.com/downloads/details.aspx?FamilyId=AB99342F-5D1A-413D-8319-81DA479AB0D7&amp;displaylang=en&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=AB99342F-5D1A-413D-8319-81DA479AB0D7&amp;displaylang=en&lt;/a&gt;

     *Ve de Windows SDK (Burada altta PSDK-x86.exe i seçbilirsiniz (32bit için))
&lt;a href=http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&amp;displaylang=en#top&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&amp;displaylang=en#top&lt;/a&gt;

     *Visual C++ Express Edition 2008
&lt;a href=http://www.microsoft.com/express/download/#webInstall&gt;http://www.microsoft.com/express/download/#webInstall&lt;/a&gt;

     *Allegro Kütüphanesi
&lt;a href=http://wiki.allegro.cc/Visual_C%2B%2B_Express_2008&gt;http://wiki.allegro.cc/Visual_C%2B%2B_Express_2008&lt;/a&gt;

Bunları kurduktan sonra isterseniz kendimiz için şablon bir allegro programı yazalım.

Masaüstüne "GameProject" isimli bir klasör açın ve indirdiğiniz allegro (.zip) dosyasını "GameProject" klasörüne çıkartın. Daha sonra;

Visual c++ i açın "Yeni Proje-&amp;gtEmpty Project" i seçin. "Project-&amp;gtOptions" bölümünden "C++-&amp;gtGeneral" sekmesinden  şu ayarları yapın: 

(değerleri verirken tırnak işaretlerini mutlaka yazın!)

*Additional Include Directory Files = "$(ProjectDir)\include"

"Linker-&amp;gtGeneral" Bölümüne de:

*Additional Library Directories = "$(ProjectDir)\lib"

"Linker-&amp;gtInput" kısmına da:

*Additional Dependencies = alleg.lib

Ayarları yaptık şimdi kodlara geçelim.

Solda Bulunan Solution Explorer a sağ tıkayın Header Files e New Item diyerek
Dialog'tan .h (Header) filesi seçin adını "Game" verin, aşağıdaki kodları ekleyin

&lt;b&gt;
#ifndef GAME_H
#define GAME_H

#include &lt;allegro.h&gt;

/* --------------------------- TEMPLATE --------------------------- */
#define $START_MAIN_PROGRAM int main(){
#define $END_MAIN_PROGRAM   return 0;}END_OF_MAIN();
/* --------------------------- TEMPLATE --------------------------- */

class Game
{
public:
 virtual void Initialize(void);
 virtual void DestroyGame(void);
 virtual void Update(void);

 void run(void);

private:
 BITMAP *buffer;
};

#endif
&lt;/b&gt;

Daha sonra Source Files e tıklayıp (.c Source Files) "Game" seçin ve oluşturulan Game.cpp dosyasına şu kodları ekelyin

&lt;b&gt;
#include "Game.h"

void Game::Initialize(void)
{
 allegro_init();
 install_keyboard();
 install_mouse();

 set_window_title("Game");

 set_color_depth(desktop_color_depth());
 set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);

 buffer = create_bitmap(640, 480);
}

void Game::DestroyGame(void)
{
 destroy_bitmap(buffer);
 allegro_exit();
}

void Game::Update(void)
{
 draw_sprite(screen, buffer, 0, 0);
 /* UPDATE GAME CODE */
}

void Game::run(void)
{
 while(!key[KEY_ESC])
 {
  Update();
 }
}
&lt;/b&gt;

ve birde main.cpp ekliyoruz. Bunlarda son kodlarımız. Projeyi kaydetmeyi unutmayın. Artık masaüstüne açtığınız "GameProject" isimli klasörü zipleyip her zaman kullanmak için saklayabilirsiniz.

main.cpp:

&lt;b&gt;
#include "Game.h"

$START_MAIN_PROGRAM

 Game game;

 game.Initialize();

 game.run();

 game.DestroyGame();

$END_MAIN_PROGRAM
&lt;/b&gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-8388420196873696679?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/8388420196873696679/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=8388420196873696679' title='1 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/8388420196873696679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/8388420196873696679'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/09/visual-c-2008-ve-allegro-kurulumu.html' title='Visual C++ 2008 ve Allegro Kurulumu'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-6212212524081860055</id><published>2008-08-18T04:41:00.000-07:00</published><updated>2008-08-18T04:47:45.472-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Allegro'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Allegro'da Sprite oluşturalım !</title><content type='html'>&lt;pre&gt;
Önce masaüstünde bir klasör açın ve adını "Allegro Sprite Denemsi" olarak değiştirin.
Sonra DEV C++ editörünü açın, "Yeni Proje" diyerek "Multimedia" bölümünden "Allegro"
yu seçin, masaüstüne açtığınız klasörün içine kaydedin. Son olarak aşığdaki kodları ekleyerek programınızı "Run" komutu ile çalıştırın.

sprite.h dosyası
------------------------------------------------------------------------------------
#ifndef sprite_H_INCLUDED
#define sprite_H_INCLUDED

#include &amp;ltallegro.h&amp;gt

enum Yon { _LEFT = 0, _RIGHT = 1, _DOWN = 2, _UP = 3 };

class Sprite
{
      public:
             BITMAP *_image;
             int _x;
             int _y;
             Sprite();
             ~Sprite();
             void Draw(BITMAP*);
             void Move(int,int);
};

#endif

sprite.c dosyası
------------------------------------------------------------------------------------
#include "sprite.h"

Sprite::Sprite()
{
                _image = NULL;
                _x = 0;
                _y = 0;
}

Sprite::~Sprite()
{
                 if(_image != NULL)
                 {
                           destroy_bitmap(_image);
                 }
}

void Sprite::Draw(BITMAP *__buffer)
{
     if(_image != NULL)
     {
         acquire_screen();
         clear_bitmap(__buffer);
         draw_sprite(__buffer, _image, _x, _y);
         release_screen();
     }
}

void Sprite::Move(int yon, int speed)
{
    switch(yon)
    {
        case (int)_LEFT: _x-=speed; break;           
        case (int)_RIGHT: _x+=speed; break;
        case (int)_UP: _y-=speed; break;
        case (int)_DOWN: _y+=speed; break;
    }     
}

main.cpp dosyası
------------------------------------------------------------------------------------
#include &amp;ltallegro.h&amp;gt
#include "sprite.h"

BITMAP *buffer;
BITMAP *scr;

void init();
void deinit();

int main() {
 init();

    Sprite *spr;
    spr-&gt;_image = scr;
    spr-&gt;_x = 100;
    spr-&gt;_y = 100;
    
 while (!key[KEY_ESC]) {
  /* put your code here */
  draw_sprite(screen, buffer, 0, 0);
        
  spr-&gt;Draw(buffer);
  
  if(key[KEY_LEFT]) spr-&gt;Move(0, 2);
  if(key[KEY_RIGHT]) spr-&gt;Move(1, 2);
  if(key[KEY_DOWN]) spr-&gt;Move(2, 2);
  if(key[KEY_UP]) spr-&gt;Move(3, 2);  
 }

 deinit();
 return 0;
}
END_OF_MAIN()

void init() {
 int depth, res;
 allegro_init();
 depth = desktop_color_depth();
 if (depth == 0) depth = 32;
 set_color_depth(depth);
 res = set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);
 if (res != 0) {
  allegro_message(allegro_error);
  exit(-1);
 }

 install_timer();
 install_keyboard();
 install_mouse();
 /* add other initializations here */
 buffer = create_bitmap(640,480);
 scr = load_bitmap("picture.bmp", 0);
}

void deinit() {
 clear_keybuf();
 /* add other deinitializations here */
}
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-6212212524081860055?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/6212212524081860055/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=6212212524081860055' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/6212212524081860055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/6212212524081860055'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/08/allegroda-sprite-oluturalm.html' title='Allegro&apos;da Sprite oluşturalım !'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-2222246404528743064</id><published>2008-08-16T08:49:00.000-07:00</published><updated>2008-08-16T08:52:19.394-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Allegro'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>C++ ile yeni bir Allegro denemesi</title><content type='html'>&lt;pre&gt;
Allegro ve c++ ikilisi oyun programlama da ne kadar yeterli bilemem fakat bana çok zevkli gelmeye başladı. İşte size yeni bir örnek daha:

&lt;textarea cols=75 rows=60&gt;
/* ========================================================================== */
#include &lt;allegro.h&gt;
/* ========================================================================== */
#define BCK_CLR 0
#define MAX_X (SCREEN_W-294)
#define MIN_X 0
/* ========================================================================== */
BITMAP *buffer;
BITMAP *bmp;
BITMAP *crs;
int _x = 0, _y = 80, speed = 2;
/* ========================================================================== */
void ShowGosteri()
{
     textout_ex(buffer, font, "C++ ile Allegro Denemesi",
                 SCREEN_W/2-150, 10, makecol(0,100,255), BCK_CLR);
     draw_sprite(buffer, bmp, _x, _y);
     draw_sprite(buffer, bmp, _x*-1+(SCREEN_W-294), _y+175);
     
     textout_ex(buffer, font, "Cikis icin [ESC] tusuna basin!",
                 SCREEN_W/2-150, SCREEN_H/2+200, makecol(0,100,255), BCK_CLR);
}
/* ========================================================================== */
void main()
{
     allegro_init(); //initialize
     install_keyboard(); //install keyset
     install_mouse(); //mouse install
     
     set_window_title("Allegro"); //window title
     set_color_depth(desktop_color_depth()); //color depth
     set_gfx_mode(GFX_AUTODETECT_FULLSCREEN, 800, 600, 0, 0); //screen mode
     
     buffer = create_bitmap(SCREEN_W, SCREEN_H); //buffer create
     bmp = load_bitmap("./bmp.bmp", 0);
     crs = load_bitmap("./cursor.bmp", 0);

     set_mouse_sprite(crs);
     
     while(!key[KEY_ESC])
     {
         show_mouse(buffer);
         _x+=speed;
         
         if(_x &gt;= MAX_X)
         {
               speed*=-1;
         } else 
         if(_x &lt;= MIN_X)
         {
               speed*=-1;
         }
         
         draw_sprite(screen, buffer, 0, 0);
         clear_to_color(buffer, BCK_CLR);
         ShowGosteri();
     }
     
     allegro_exit();
     
} END_OF_MAIN();
/* ========================================================================== */
&lt;/textarea&gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-2222246404528743064?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/2222246404528743064/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=2222246404528743064' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/2222246404528743064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/2222246404528743064'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/08/c-ile-yeni-bir-allegro-denemesi.html' title='C++ ile yeni bir Allegro denemesi'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-9218692187400666238</id><published>2008-08-14T10:17:00.000-07:00</published><updated>2008-08-15T02:24:04.146-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Allegro'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Allegroyu biraz kolaylaştıralım !</title><content type='html'>&lt;pre&gt;
C++ ile Allegro programlarken, programa giriş noktası yani main() fonksiyonunun hemen başında, ilk satırlarında basit ama uğraştıran, birtakım kodlar yazmak zorundayız. Gerçi gerek yok ama sadece kolaylık olması için bu işleri yapan bir sınıf oluşturabilirz. Hem c++ için pratik yapmış oluruz. 

Kodlara gelince:

//İşimizi görecek olan sınıf
settings.h dosyası :

/* Allegro yardımcı sınıf (beta) */
#include &amp;ltallegro.h&amp;gt

enum __DEPTH { x8, x15, x16, x24, x32 };
enum __GFX { WINDOWED = 0, FULLSCREEN = 1, ISNULL = 2 };

/* interface */
class Settings
{
    BITMAP *buffer;
    public:
        enum __GFX gfx_mode;  
        enum __DEPTH color_depth;
        bool _install_keyboard;
        bool _install_mouse;
        bool _show_mouse;
        bool buffer_install;
        int buffer_w, buffer_h;
        BITMAP *__mouse;
        const char* window_title;
              
        Settings();
        ~Settings();         
        void install();               
};

Settings::Settings()
{
    gfx_mode = WINDOWED;
    color_depth = x16;
    _install_keyboard = true;
    _install_mouse = true;
    buffer_install = true;
    __mouse = NULL;
    _show_mouse = true;
    buffer_w = 800;
    buffer_h = 600;
    window_title = "Allegro Game";
}

Settings::~Settings()
{
    /* dispose */                    
}

void Settings::install()
{
    allegro_init();  
    
    if(buffer_install == true)
    {
         buffer = create_bitmap(buffer_w, buffer_h);
    }
    
    switch(color_depth)
    {
        case x8: set_color_depth(8); break;
        case x15: set_color_depth(15); break;
        case x16: set_color_depth(16); break;
        case x24: set_color_depth(24); break;
        case x32: set_color_depth(32); break;
    }
    
    switch(gfx_mode)
    {
         case WINDOWED: set_gfx_mode(GFX_AUTODETECT_WINDOWED, buffer_w, buffer_h, 0, 0); break;               
         case FULLSCREEN: set_gfx_mode(GFX_AUTODETECT_FULLSCREEN, buffer_w, buffer_h, 0, 0); break;
         case ISNULL: set_gfx_mode(GFX_AUTODETECT, buffer_w, buffer_h, 0, 0); break;
    }
    
        if(_install_keyboard == true)
        {
            install_keyboard();
        }  
            if(_install_mouse == true)
            {
                install_mouse();
            }
                if(_show_mouse == true)
                {
                    show_mouse(__mouse);
                }
        
        set_window_title(window_title);
}

//Ana program kodlarımız
ve main.cs:

#include &amp;ltstdlib.h&amp;gt
#include &amp;ltallegro.h&amp;gt
#include "settings.h"

Settings gSettings;

void InstallAllegro() {
    gSettings.color_depth = x32;
    gSettings.window_title = "Allegro Denemesi";
    gSettings._show_mouse = false;
    gSettings.buffer_w = 320;
    gSettings.buffer_h = 240;
    gSettings.install();
}

int main()
{
    //Ne kadar kısa demi :)
    InstallAllegro();
    
    while(!key[KEY_ESC]);
    
    allegro_exit();
    return 0;
} END_OF_MAIN();
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-9218692187400666238?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/9218692187400666238/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=9218692187400666238' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/9218692187400666238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/9218692187400666238'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/08/allegroyu-biraz-kolaylatralm.html' title='Allegroyu biraz kolaylaştıralım !'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-5576601517454390811</id><published>2008-08-12T05:34:00.000-07:00</published><updated>2008-08-12T05:45:13.524-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Allegro'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>C++ ve Allegro İle Oyun Programlama</title><content type='html'>&lt;pre&gt;
Şimdilik allegro ile pencere oluşturup beyaz renkte bir çizgi çizmeyi göstereceğim.
Ben öğrendikçe de sizlerle paylaşacağım ...
&lt;font color = green&gt;
#include &amp;ltstdlib.h&amp;gt
#include &amp;ltallegro.h&amp;gt //Allegro kütüphanesi
&lt;/font&gt;
int main(void)
{    
    allegro_init();        //Allegro Hazırlanıyor ...
    install_keyboard();    //Klavye Yükleniyor ...
    install_mouse();       //Fare Yükleniyor ...
    show_mouse(NULL);      //Fare Aktif Hale getiriliyor ...
    
    //Grafik modeu Ayarlanıyor ...
    //FULLSCREEN yazan kısımı WINDOWED olarak değiştiriseniz
    //program pencerede çalışır.
    int ret = set_gfx_mode(GFX_AUTODETECT_FULLSCREEN, 800, 600, 0, 0); 
    
    //Grafik modu uygulanamıyorsa hata mesajı göster ...
    if(ret != 0)
    {
           allegro_message(allegro_error);
           return 1;
    }
    
    //ESC tuşuna basılmadığı sürece yapılacak işlemler
    while(!key[KEY_ESC])
    {
        //Çizgi çiziliyor x1=0, x2=0, y1=0, y2=0
        //makecol(r, g, b) -&amp;gt bu kod renk üretir.
        line(screen, 0, 0, 150, 150, makecol(255, 255, 255));
    }
    
    //ESC ye basıldıktan sonra döngü sona erdiğinde allegro dan çık ...
    allegro_exit();
    return 0;
} END_OF_MAIN();
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-5576601517454390811?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/5576601517454390811/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=5576601517454390811' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/5576601517454390811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/5576601517454390811'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/08/c-ve-allegro-ile-oyun-programlama.html' title='C++ ve Allegro İle Oyun Programlama'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-6540014748252701083</id><published>2008-07-22T09:02:00.000-07:00</published><updated>2008-07-22T09:19:08.982-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash Oyun Prog.'/><title type='text'>Örnek Flash Oyunum</title><content type='html'>&lt;pre&gt;
Sonunda basit de olsa 2D bir oyun yaptık... Flash sayesinde :)
&lt;a href="http://www.flasharsivi.com/izle.asp?fla_no=2717"&gt;
Flash Çalışmasını indirmek için tıklayın (.fla)&lt;/a&gt;

&lt;embed src='http://img353.imageshack.us/img353/3413/oyunvc8.swf' quality='high' pluginspage='http://www.macromedia.com/go/getflashplayer' type='application/x-shockwave-flash' width='640' height='480'&gt;&lt;/embed&gt;

Ne kadar basit bir oyun olsa da geliştirlmeye açık. Mesela siz tahmine göre "yukarı"-
"aşağı" şeklinde animasyonlarla sayıyı buldurmaya çalışabilirsiniz ...
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-6540014748252701083?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/6540014748252701083/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=6540014748252701083' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/6540014748252701083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/6540014748252701083'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/07/rnek-flash-oyunum.html' title='Örnek Flash Oyunum'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-3811974058024510784</id><published>2008-07-13T04:01:00.000-07:00</published><updated>2008-07-13T04:33:03.793-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash Oyun Prog.'/><title type='text'>Flash'ta preloading yapımı</title><content type='html'>&lt;pre&gt;
Flash'ta geliştirdiğiniz oyunlarda çok işinize yarayacak bir uygulama yapacağız.
Oyun yüklenmeden önce kullanıcıya ön yükleme ekranı göstermelisiniz ki sıkılıp kapatmasın ve bilgilensin.

&lt;b&gt;1.&lt;/b&gt; Şimdi Flash'ta bir proje açın, adını &lt;b&gt;"preloading uygulaması"&lt;/b&gt; olarak değiştirin.
&lt;b&gt;2.&lt;/b&gt; Sonra &lt;b&gt;"Insert - New Symbol - Movie Clip"&lt;/b&gt; yapın ve bir dikdörtgen çizin, kenarlıkları kalın ve iç dolgu rengi olmasın.
&lt;b&gt;3.&lt;/b&gt; Sonra &lt;b&gt;"Insert - New Symbol - Graphics"&lt;/b&gt; yapın ve oluşturduğunuz movie clip in içine atın. Uzunluğunu sıfırlayın (W:0) ve "Instance Name" ini &lt;b&gt;"lbarPos"&lt;/b&gt; olarak değiştirin.
&lt;b&gt;4.&lt;/b&gt; Movie clipin içine bir de &lt;b&gt;"Dynamic Text"&lt;/b&gt; olarak "LOADING 0%" yazın.
Instance Name ini &lt;b&gt;"loadingText"&lt;/b&gt; olarak değiştirin.

Son olarak görüntü aşağıdaki gibi olmalı.

&lt;a href="http://1.bp.blogspot.com/_fAqb9I3wJqQ/SHnn37y2B5I/AAAAAAAAAKM/JwYWMHUhVuI/s1600-h/1.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_fAqb9I3wJqQ/SHnn37y2B5I/AAAAAAAAAKM/JwYWMHUhVuI/s320/1.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5222460191042570130" /&gt;&lt;/a&gt;

Şimdi Movie Clibi ana sahneye taşıyın ve adını(Instance Name) &lt;b&gt;"loadingBar"&lt;/b&gt; olarak değiştirin. Bu birinci kare idi. İkinci kareye de bir kaç resim import ederek yerleştirin.

Sonra birinci kareye tıklayıp Actions kısmına şu kodları ekleyin.

&lt;b&gt;5.&lt;/b&gt; Kodlar :
&lt;b&gt;
stop(); //Animasyonu durduruyoruz.

onEnterFrame = function()
{
 yuklenen = _root.getBytesLoaded(); //swf dosyamızın yüklenmiş byte miktarı
 toplam = _root.getBytesTotal(); //swf dosyamızın toplam byte miktarı
 max = 226; //önyükleme movie clibimizin içindeki lbarPos isimli graphics
                   //nesnesinin maksimum uzunluğu
 
 oran = yuklenen / toplam * 100; //Yükleme oranı % cinsinden
 oran2 = max * oran / 100; //Yükleme oranının maximum uzunlukla oranı
 
        //ana sahnedeki loadingBar nesnemizin içindeki loadingText isimli dynamic
        //text nesnesine yükleme oranını yazdırıyoruz.
 loadingBar.loadingText.text = "LOADING "+ Math.round(oran)+"%";
        //ve uzunluğu artırarak loading efektini veriyoruz
 loadingBar.lbarPos._width = Math.round(oran2);
 
        //Eğer yükleme tamamlandıysa ikinci kareye (resimlerin bulunduğu yere) geç.
 if(yuklenen == toplam) gotoAndStop(2);
}
&lt;/b&gt;

Ve son olarak CTRL+Enter yapıp animasyonu test edin ve bu penceredeki menuden simulate download seçin böylece animasyonu internette yükleniyormuş gibi görürsünüz.
&lt;div style="display:none;"&gt;preloading, flash loading screen, flash loading scene, flash oyun programlama, flash ön yükleme ekranı, flash progressbar&lt;/div&gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-3811974058024510784?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/3811974058024510784/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=3811974058024510784' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/3811974058024510784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/3811974058024510784'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/07/flashta-preloading-yapm.html' title='Flash&apos;ta preloading yapımı'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_fAqb9I3wJqQ/SHnn37y2B5I/AAAAAAAAAKM/JwYWMHUhVuI/s72-c/1.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-2043760775055126955</id><published>2008-06-25T10:46:00.000-07:00</published><updated>2008-06-25T10:54:28.468-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flash Oyun Prog.'/><title type='text'>Flash'ta Oyun programlama - Pdf Dökümanları</title><content type='html'>&lt;pre&gt;
&lt;img src=http://tbn0.google.com/images?q=tbn:-I4TA5A53aCnFM:http://www.basement.org/WindowsLiveWriter/FlashAllThingsToAlmostEveryone_7634/adobe_flash_8~s600x600_2.jpg&gt;&lt;img src=http://tbn0.google.com/images?q=tbn:e8AxreRjUzT8OM:http://scr.softonic.com/s2/56000/56467/4_flash.jpg&gt;

Sanırım 2D Oyunların en iyileri flash'ta geliştiriliyor. Animasyonları ve grafikleri siz hazırlıyorsunuz. Gerisini Action Script tamamlıyor. Tabi bu kadar da kolay değil,
fizik hesaplamaları buradada canımızı sıkabiliyor ...

İşte sizin için internetten araştırıp bulduğum 2 süper pdf dökümanı:

&lt;a href="http://downloads.gamedev.net/pdf/01_flash.pdf"&gt;1.Dosya (.pdf)&lt;/a&gt;
&lt;a href="http://downloads.gamedev.net/pdf/08_flash.pdf"&gt;2.Dosya (.pdf)&lt;/a&gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-2043760775055126955?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/2043760775055126955/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=2043760775055126955' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/2043760775055126955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/2043760775055126955'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/06/flashta-oyun-programlama-pdf-dkmanlar.html' title='Flash&apos;ta Oyun programlama - Pdf Dökümanları'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-3872499342393397034</id><published>2008-06-05T06:56:00.000-07:00</published><updated>2008-06-05T07:18:40.914-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNA'/><title type='text'>XNA ile Healt Bar yapımı</title><content type='html'>&lt;pre&gt;
&lt;a href="http://2.bp.blogspot.com/_fAqb9I3wJqQ/SEfxhajHzdI/AAAAAAAAAIc/bqEmzhWNopw/s1600-h/ads%C4%B1z.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_fAqb9I3wJqQ/SEfxhajHzdI/AAAAAAAAAIc/bqEmzhWNopw/s320/ads%C4%B1z.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5208397050441878994" /&gt;&lt;/a&gt;

Genelde aksiyon oyunlarında gördüğümüz bu healt(can,sağlık nyse..) bar yine iki parçalı bir resmin belirli kısımlarının gösterilmesi ile yapılıyor. Bu da source(kaynak) rectangle ile sağlanıyor. Şimdi kodları görelim...
&lt;font color=green&gt;
//İlk önce işimizi kolaylaştırmak için bir Sprite sınıfı yazıyoruz.&lt;/font&gt;

&lt;textarea rows=30 cols = 75&gt;
using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Storage;

namespace Deneme1
{
    class Sprite
    {
        public Texture2D spriteTexture;
        public Vector2 spritePosition = new Vector2(0, 0);

        public Sprite() { }

        public void LoadContent(ContentManager theContentManager, string assetName)
        {
            spriteTexture = theContentManager.Load&lt;Texture2D&gt;(assetName);
        }

        public void Draw(SpriteBatch theSpriteBatch)
        {
            theSpriteBatch.Draw(spriteTexture, spritePosition, Color.White);
        }
    }
}
&lt;/textarea&gt;

Şimdi Oyun kodlarına geçelim.

&lt;textarea cols=75 rows=65&gt;
using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;

namespace Deneme1
{
    public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;

        private Sprite sprite = null; //kendi yazdığımız sprite sınıfı
        private int currentHealt = 100; //Normaldeki sağlık(:can:) oranı

        public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
            
            sprite = new Sprite(); 
        }

        protected override void Initialize()
        {
            // TODO: Add your initialization logic here

            base.Initialize();
        }

        protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);

            //Sprite texture(resmi) yükleniyor
            sprite.LoadContent(Content, "healt");
        }

        protected override void UnloadContent()
        {
            // TODO: Unload any non ContentManager content here
        }

        protected override void Update(GameTime gameTime)
        {
            // Allows the game to exit
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back ==ButtonState.Pressed)
                this.Exit();

            //Bir KeyboardState (Klavye yöneticisi) ile yukarı ve aşağı
            //yön tuşlarına basıldığında canı azaltıp çaoğaltacağız
            KeyboardState keyState = Keyboard.GetState();

            if (keyState.IsKeyDown(Keys.Up)) currentHealt++;
            if (keyState.IsKeyDown(Keys.Down)) currentHealt--;

            currentHealt = (int)MathHelper.Clamp(currentHealt, 0, 100);

            base.Update(gameTime);
        }

        /// &lt;summary&gt;
        /// This is called when the game should draw itself.
        /// &lt;/summary&gt;
        /// &lt;param name="gameTime"&gt;Provides a snapshot of timing values.&lt;/param&gt;
        protected override void Draw(GameTime gameTime)
        {
            graphics.GraphicsDevice.Clear(Color.CornflowerBlue);

            // TODO: Add your drawing code here
            spriteBatch.Begin();

            //Healt barın gri renkli kısmını render et...
            spriteBatch.Draw(sprite.spriteTexture, new Rectangle(
              this.Window.ClientBounds.Width / 2 - sprite.spriteTexture.Width / 2,
              10, sprite.spriteTexture.Width, 60),
              new Rectangle(0, 0, sprite.spriteTexture.Width-3, 60),
            Color.White);
            //Healt barın kırmızı renkli kısmını render et...
            spriteBatch.Draw(sprite.spriteTexture, new Rectangle(
              (this.Window.ClientBounds.Width / 2 - sprite.spriteTexture.Width / 2)+7,
              16, (int)(sprite.spriteTexture.Width * ((double)currentHealt / 100))-13, 45),
              new Rectangle(0, 70, sprite.spriteTexture.Width-3, 45),
            Color.Red);

            spriteBatch.End();

            base.Draw(gameTime);
        }
    }
}
&lt;/textarea&gt;

&lt;a href="http://4.bp.blogspot.com/_fAqb9I3wJqQ/SEf1RopkhWI/AAAAAAAAAIk/MafztJreAiE/s1600-h/HealthBar_thumb.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_fAqb9I3wJqQ/SEf1RopkhWI/AAAAAAAAAIk/MafztJreAiE/s320/HealthBar_thumb.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5208401177395627362" /&gt;&lt;/a&gt;

buradan resmi kopyalayın ve XNA Game Studio'da yeni bir Proje açın Content Manager ile resmi yükleyin ve kodları deneyin. Bu küçük bir uygulama fakat yararlı da...
"KOŞMADAN ÖNCE YÜRÜMEYİ ÖĞRENMEK GEREK" :: (:Tom millerin oyun prog. kitabından:)

yazar: CANER DEMİRCİ ((gerisi de var inşallah...))
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-3872499342393397034?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/3872499342393397034/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=3872499342393397034' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/3872499342393397034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/3872499342393397034'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/06/xna-ile-healt-bar-yapm.html' title='XNA ile Healt Bar yapımı'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_fAqb9I3wJqQ/SEfxhajHzdI/AAAAAAAAAIc/bqEmzhWNopw/s72-c/ads%C4%B1z.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-7512138790026236777</id><published>2008-06-02T12:17:00.000-07:00</published><updated>2008-06-03T04:36:21.853-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNA'/><title type='text'>XNA'da Texture Yüklemek ve Render Etmek</title><content type='html'>&lt;pre&gt;
Visual Studio açın ve bir XNA Game Studio projesi yaratın. Solution Sekmesindeki
ağaç yapıda "Content" e sağ tıklayıp projenize bir resim dosyası ekleyin.
(Benim tercihim .png formatı) ve daha sonra "Properties" sekmesinde bu dosyanın özelliklerinden "Asset Name" i "deneme" olarak değiştirin. Böylece Xna Game Studio bu 
resim dosyasını .XNB formatına dönüştürecek.

ve sıra kodlarda :
&lt;font color=green&gt;
//İlk olarak yükleyeceğimiz resmi ekranda göstermek için
//bir &lt;b&gt;SpriteBatch&lt;/b&gt; tanımlıyoruz ...&lt;/font&gt;
&lt;i&gt;&lt;b&gt;private&lt;/b&gt;&lt;/i&gt; &lt;b&gt;SpriteBatch&lt;/b&gt; spriteBatch;
&lt;font color=green&gt;
//Sonra Texture2D sınıfından texturemizi tanımlıyoruz&lt;/font&gt;
&lt;i&gt;&lt;b&gt;private&lt;/b&gt;&lt;/i&gt; &lt;b&gt;Texture2D&lt;/b&gt; myTexture;
&lt;font color=green&gt;
//Texturemizin ekrandaki Pozisyonu (Vector2 sınıfı ile)&lt;/font&gt;
&lt;i&gt;&lt;b&gt;private&lt;/b&gt;&lt;/i&gt; &lt;b&gt;Vector2&lt;/b&gt; Position;
&lt;font color=green&gt;
//Texturemizin ne kadar Scale edileceği (yani büyültüp küçültme oranı)
// 1 verildiğinde eni ile boyunu 1 ile çarpar yani uzunluğu ve genişliğinde
// bir değişme olmaz&lt;/font&gt;
&lt;i&gt;&lt;b&gt;private&lt;/b&gt;&lt;/i&gt; &lt;b&gt;float&lt;/b&gt; Scale; 
&lt;font color=green&gt;
//Origin değeri yani merkez noktası&lt;/font&gt;
&lt;i&gt;&lt;b&gt;private&lt;/b&gt;&lt;/i&gt; &lt;b&gt;Vector2&lt;/b&gt; Origin;
&lt;font color=green&gt;
//Şimdide Rotation yani döndürme açısı (orjine e göre)&lt;/font&gt;
&lt;i&gt;&lt;b&gt;private&lt;/b&gt;&lt;/i&gt; &lt;b&gt;float&lt;/b&gt; Rotation;
&lt;font color=green&gt;
//Texturemizin ekstra rengi yani White = Beyaz verilirse renk değişmez&lt;/font&gt;
&lt;i&gt;&lt;b&gt;private&lt;/b&gt;&lt;/i&gt; &lt;b&gt;Color&lt;/b&gt; color;
&lt;font color=green&gt;
//Texturemizin SourceRectangle değeri yani resmin tam olarak texturenin ne kadar
//bir kısmının gösterileceğini belirle
//Source Rectangle =&gt; X, Y, Width, Height değerlerini alır.
//X, Y den başlayark Width ve Height değerleri boyunca devam eder&lt;/font&gt;
&lt;i&gt;&lt;b&gt;private&lt;/b&gt;&lt;/i&gt; &lt;b&gt;Rectangle&lt;/b&gt; Source;
&lt;font color=green&gt;
//Yüklediğimiz resmin asset name i&lt;/font&gt;
&lt;i&gt;&lt;b&gt;private&lt;/b&gt;&lt;/i&gt; &lt;b&gt;string&lt;/b&gt; AssetName = "deneme";


&lt;b&gt;Nesnelerimizi tanımladık şimdi yapacağımız işlemler:&lt;/b&gt;
1-Initialize() -&gt; Oyun hazırlanırken ilk değerlerimizi veriyoruz
2-LoadContent() -&gt; bu metod ile texture nesnemizi yükleyeceğiz
3-Draw() -&gt; bu metod ile texture nesnemizi yani resmimizi ekranda göstereceğiz
&lt;font color=royalblue&gt;
protected override void Initialize()
{&lt;/font&gt;
  this.Scale = 1.0f;
  this.Position = new Vector2(100, 100);
  this.Origin = Vector2.Zero;
  this.color = Color.White;
  this.Rotation = 0f;  

  base.Initialize();&lt;font color=royalblue&gt;
}&lt;/font&gt;
&lt;font color=royalblue&gt;
protected override void LoadContent()
{&lt;/font&gt;
  spriteBatch = new SpriteBatch(GraphicsDevice);
  myTexture = Content.Load&lt;Texture2D&gt;(AssetName);
  &lt;font color=green&gt;
  //Bu değeri Initialize metodunda veremedik çünkü texture uzunluk ve yükseklik
  //değerini yüklenen resim den alacağımız için ve resim LoadContent() metodunda
  //yüklendiği için şimdi veriyoruz.&lt;/font&gt;
  this.Source = new Rectangle(0, 0, this.myTexture.Width, this.myTexture.Height);
&lt;font color=royalblue&gt;}&lt;/font&gt;
&lt;font color=royalblue&gt;
protected override void Draw()
{&lt;/font&gt;
  graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
&lt;font color=green&gt;
  //SpriteBatch nesnemizin render işlemine start veriyoruz&lt;/font&gt;
  spriteBatch.Begin();
&lt;font color=green&gt;
  //Ve Texture render ediliyor.&lt;/font&gt;
  spriteBatch.Draw(myTexture, this.Position, this.Source, this.Color, this.Rotation,
    this.Origin, this.Scale, SpriteEffects.None, 0);
&lt;font color=green&gt;
  //SpriteBatch nesnemizin render işlemine son veriyoruz&lt;/font&gt;
  spriteBatch.End();&lt;font color=royalblue&gt;
}&lt;/font&gt;

&lt;a href="http://4.bp.blogspot.com/_fAqb9I3wJqQ/SEUKtv5iC8I/AAAAAAAAAIU/1m1cDxrXaWY/s1600-h/fff.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_fAqb9I3wJqQ/SEUKtv5iC8I/AAAAAAAAAIU/1m1cDxrXaWY/s320/fff.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5207580325192010690" /&gt;&lt;/a&gt;

kodların hepsini vermedim sadece gerekli blokları yazdım. Çünkü böylesi sizin için daha iyi XNA Game Studio'u açtığınızda karşınıza hazır kodlar gelecektir. Bütün kodu yümüyle kopyalayıp yazmak öğrenme açısından iyi değildir. Kodları yerine kendiniz ilk önceleri bakarak yazın ve "RUn" komutunu verip çalıştırın. Böylece kodu deneyip ne yapabildiğinizi görürsünüz. Zaten sonraları da değiştirmek ve geliştirmek isteyeceksiniz bu arada da belki yüzlerce hata mesajı alacaksınız ama sonunda anlayarak, deneyerek, görerek öğrenmiş olacaksınız.

yazar: Caner DEMİRCİ  (( devamı gelecek ... ))

&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-7512138790026236777?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/7512138790026236777/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=7512138790026236777' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/7512138790026236777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/7512138790026236777'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/06/xnada-texture-yklemek-ve-render-etmek.html' title='XNA&apos;da Texture Yüklemek ve Render Etmek'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_fAqb9I3wJqQ/SEUKtv5iC8I/AAAAAAAAAIU/1m1cDxrXaWY/s72-c/fff.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-4980836656345748564</id><published>2008-05-06T12:15:00.000-07:00</published><updated>2008-05-06T12:33:19.364-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='Genel'/><title type='text'>Visual C++ ile Görsel Programlama</title><content type='html'>&lt;pre&gt;
&lt;b&gt;NEDEN C++ ?&lt;/b&gt;

Bu soruya çok basit ve net bir cevap verebiliriz. çünkü Windows C++ ile yazıldı. bu durumda C++ ile yazdığınız uygulamalarda windows bileşenlerine tam erişim imkanınız olacaktır. 

Tabii birileri çıkıp size Visual Basic ile de herşeyi yaparsınız diyebilir yada Visual C++ ile birlikte MFC Application wizard kullanın işiniz kolaylaşacaktır diye nasihat edebilir. sakın dinlemeyin ( siz önce temelini öğrenin) MFC de microsoft tarafından kolay uygulama hazırlamak için geliştirilmiş bir sistemdir. kendi içersinde birçok hazır fonksiyon ile kullanımı kolaylaştırır. ama onunla uğraşmaktansa Visual Basic yada daha iyisi Delphi ile uğraşmayı tercih edebilirsiniz. çünkü MFC ile hazırlanan EXE dosyası windows98de bile tam uyumlu çalışmayacaktır ve sizden mfc40.dll isimli bir dosya isteyecektir. Ama sizin amacınız C++ ile oyun yazmak olduğuna göre hepsini unutun. Bugüne kadar öğrendiğiniz birçok kolaylaştırılmış fonksiyonu unutun. Resim çizer gibi form çizmeyi unutun ( Buna daha sonra değineceğiz, aslında Visual C++ ile de çok basit şekilde form çiziliyor ama MFC ile değil)

Tüm bunların yerine önce işin temelini öğreneceğiz. tabii Visual Basic yada Delphi biliyorsanız onlar sayesinde Form nedir değişken nedir diye sormadığınız için çok daha hızlı öğreneceksiniz.

Ben bu sistemi öğrenmeye çalışırken birileri bana "Amerikayı yeniden keşfetmeye gerek yok ! MFC ile çok kolayca form hazırlarsın" diye nasihat etmişti. ama işin aslı bu değil. Win32 sistemini öğrenmek aslında bisiklet kullanmak gibi diyebiliriz. öğrenmesi zor ama onu kullandıktan sonra diğer araçlar çok daha kolay kullanılır. tabii o Amerikayı keşfetmek istemeyenler de üç tekerlekli MFC sihirbazı ile yollarına devam edebilir.

Uygulamalarınızda güç istiyorsanız zor yolları göze almalısınız. Tüm büyük oyunlar Visual C++ ile yazılmıştır.

&lt;b&gt;API ( Windows´un hazır fonksiyonları )&lt;/b&gt;

öncelikle belirteyim ki bu ders sadece Microsoft Win32 bileşenleri kullanılarak anlatılmıştır. Bu açıdan sadece visual C kullanıcıları değil Visual Basic, Delphi, Net veya C# kullanıcıları da bu dersten faydalanabilir. Esas amacımız görsel windows programcılığına genel bir bakış yapıp daha sonra oyun programlamaya yönelmektir. Burada anlatacağım bilgileri internetten uzun arayışlar sonucu öğrenmiş bulunmaktayım. herhangi bir sürç-ü lisan edersem affola.

Microsoft firması ilk Windows´u tasarlarken API adı verilen bir bileşen kullanmıştır. daha sonra hem daha kullanışlı olduğu için hemde geriye doğru destek vermesi gerektiğinden sonraki windows sistemlerinde de API sistemi devam etmiştir. bu açıdan burada öğreneceğiniz uygulama Win-95, Win-NT, Win98, WinME ,WinXP sistemlerinde de çalışacaktır. 

&lt;b&gt;-ilk Mesaj-&lt;/b&gt;

Herhangi bir Api´yi kullanabilmek için hazırladığınız exe dosyasının windows içindeki gerekli DLL dosyası yardımı ile hazır bir yapıyı çağırması yeterlidir.

Mesela: Ekrana Mesaj kutusu çıkarmak için C:windowssystem dizinindeki User32.dll içersinden MessageBox isimli fonksiyonun çağrılması yeterlidir. Sizin tekrar pencere tanımlamanız yada düğme çizmeniz gerekmez. Aşağıda Visual C++ ile kullanılacak mesaj komutunu görüyorsunuz. Birçok programda mesaj işlemi daha da kısadır ama esas mesaj penceresi budur. Diğer programlar size göstermeden arkaplanda bu fonksiyonu çağırır. Programda bunu kullandığınızda işletim sisteminin kullandığı yerel lisanı kullanan bir mesaj penceresi gelir. burada MB_OK kelimesi mesaj kutusunda dil Türkçe ise Tamam yazısı çıkarır. dil Rusça ise DA yazısı çıkarır. Mesaj penceresini siz çizmediğiniz gibi düğmedeki yazıyı da siz yazmazsınız, hepsi api sayesinde otomatik olarak meydana çıkar.

MessageBox( NULL,"mesaj metni","mesaj penceresi başlığı",MB_OK);
(Visual C++ ile kullanımı aşağıda ayrıntılı olarak anlatılmıştır.)

&lt;b&gt;Visual C++ giriş ( ilk programımız)&lt;/b&gt;

Visual C++ programını açıp File &gt;&gt; New menüsünden ilk programımızı yapacağız. ilk program olduğu için sadece mesaj veren bir program yapıyoruz. Karşımıza gelen pencereden Win32 Application seçiyoruz. ve projemiz için bir isim yazıyoruz. location kısmında ise projenin kaydedileceği dizin bulunuyor.

&lt;img src=http://www.tr3d.com/dokuman/programlama/381/vc1.gif&gt;

Dosya adı yazdıktan sonra bize hazır proje isteyip istemediğimiz sorulacaktır. biz en üsttekini seçerek boş bir sayfa istiyoruz

&lt;img src=http://www.tr3d.com/dokuman/programlama/381/vc2.gif&gt;

Karşımıza gelen pencereye de OK ve Finish dedikten sonra boş bir proje oluşturduk. Şimdi projenin içini dolduracağız. yukardaki Yeni Yazı Sayfası (New Text File) düğmesine tıklaynca sağ taraftaki boş alana yazı sayfası çıkıyor.

&lt;img src=http://www.tr3d.com/dokuman/programlama/381/vc3.gif&gt;

&lt;b&gt;En Basit Program ( Sadece bir mesaj kutusu)&lt;/b&gt;

&lt;img src=http://www.tr3d.com/dokuman/programlama/381/vc8.gif&gt;

&lt;textarea cols=75 rows = 5&gt;#include 

 int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
 {

  return MessageBox(NULL,"ilk program","kolay gelsin",MB_OK);

 }
&lt;/textarea&gt;

Beyaz sayfayı yazı ile doldurduktan sonra kaydediyoruz. Kayıt sırasında dosya uzantısı olarak ".C" yada ".CPP" yazmanız gerekiyor, böylece program bunun bir kod sayfası olduğunu anlıyor. eğer normal txt dosyası olarak kaydederseniz özel fonksiyonlar renkli görünmeyecektir. örnek isim: proje.cpp

&lt;img src=http://www.tr3d.com/dokuman/programlama/381/vc4.gif&gt;

yazdığımız kod sayfasını kaydettikten sonra projeye dahil etmemiz gerekiyor. bunu iki şekilde yapabiliriz. birincisi: kod yazılı olan beyaz sayfada boş biryere sağ tıklayıp insert File into Project &gt;&gt; ProjeAdı seçeneği ile

&lt;img src=http://www.tr3d.com/dokuman/programlama/381/vc5.gif&gt;

ikincisi sol alt taraftan FileView kısmını açarak ( bu kısımda projede yer alan tüm dosyalar görünür, kod sayfaları, ikon, menü vb.)

&lt;img src=http://www.tr3d.com/dokuman/programlama/381/vc6.gif&gt;

Dosya kontrol kısmını açtıktan sonra Source Files &gt;&gt; Add Files to Folder diyerek az önce kaydettiğimiz proje.cpp isimli dosyayı seçiyoruz.

&lt;img src=http://www.tr3d.com/dokuman/programlama/381/vc7.gif&gt;

Böylece ilk projemizi tamamladık. Projeye ilk başlarken bu adımları tekrar yapmanız gerekiyor. 
Projeyi çalıştırmak için F5 tuşunu kullanabilirsiniz. Hataları görmek için ise F7 tuşunu kullanabilirsiniz. F7 projeyi exe dosyası olarak hazırlar. F5 ise hazırlanan exe dosyasını çalıştırır. exe dosyası çalıştığında sadece bir mesaj kutusu ekrana gelecektir. programda form falan yok. mesaj penceresi kapanınca program da biter.

&lt;img src=http://www.tr3d.com/dokuman/programlama/381/vc8.gif&gt;

Buradaki amacımız esas döngüyü görmekti. programın içersine yazdığımız WinMain isimli kısım Ana döngüyü oluşturur. Programda çalışacak tüm komutları buradaki iki parantez arasına yazacağız. tabii birçok fonksiyon ve değişken tanımlarını bunun dışında yapıyoruz ama programın çalışması için bu kısım kesinlikle gerekli.

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{

}

şimdi de bir form yapalım. Form yaparken başka bir özellik daha karşımıza çıkıyor. LRESULT CALLBACK isimli fonksiyon. bu fonksiyon form tarafından gönderilen mesajları alan bir sistem içeriyor. bu kısımda gelen mesaja göre işlem yapıyoruz.

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{ 

}

&lt;b&gt;MESSAGE ( mesaj sistemi)&lt;/b&gt;

Windows içersinde her program çalışırken windows ile program arasında mesaj alışverişi olur. Form ilk defa çizilirken program windows´a WM_CREATE isimli mesajı gönderir. form kapatılınca WM_CLOSE isimli bir mesaj gönderir. Form yok edilirken WM_DESTROY isimli bir mesaj gönderir. bunun gibi birçok mesaj bulunmaktadır. henhangi bir düğmeye basılınca WM_COMMAND isimli bir mesaj gönderir. uzun bir listeyi Microsoft´un sitesinde bulabilirsiniz. Biz şimdilik bizim için gerekli olanlara bakacağız.

&lt;b&gt;Switch Fonksiyonu&lt;/b&gt;

Bu kısma girmeden önce Standart C kullanımında Switch fonksiyonunu öğrenmelisiniz. Switch yapı olarak IF-ELSE fonksiyonuna benzer ama daha kullanışlıdır. örnekle daha iyi anlatabilirim. case kısmında karşılaştırmalar yapılır. basitçe herbir case için sorgulama yapar diyebiliriz. iki kesme işareti "//" olan satırlar gereksizdir. sadece programcının hatırlatma yazılarını belirtir.

mesaj = 2 ;   // herhangi bir değişken tanımlıyoruz

 switch(mesaj)
  {
      case 1:
              //mesaj değişkeni 1 ise yapılacak işlemler 
      break;

      case 2:
              //mesaj değişkeni 2 ise yapılacak işlemler
      break;

      case 3:
              //mesaj değişkeni 3 ise yapılacak işlemler
      break;

     default:
     // son seçenek
 }

yukardaki işlemde mesaj=2 olduğu için "case 2:" kısmı işlem yapacaktır. program diğer kısımlara uğramadan geçecektir. eğer case kısımlarından hiçbiri doğru değilse default kısmındaki işlem yapılacaktır. Detaylı bilgiyi Standart C ile ilgili kaynaklarda bulabilirsiniz.( ansi-c diye de arayabilirsiniz)

&lt;b&gt;Visual C++ Pencereler (ikinci Program - En Basit Pencere)&lt;/b&gt;

Yeni bir proje oluşturup kod olarak aşağıdaki satırları yazıyoruz. her satırda gerekli açıklamaları komut penceresinin altında yaptım. yeni başladıysanız hepsini bir anda anlayamazsınız. Parça parça anlamaya çalışın. aşağıdaki beyaz sayfadaki kodu aynen kopyalayıp kullanabilirsiniz.

&lt;img src=http://www.tr3d.com/dokuman/programlama/381/vc9.gif&gt;

&lt;textarea cols=75 rows=45&gt;
#include &lt;windows.h&gt;   
 const char Classismi[] = "pencere"; 
  // gelen mesajları işleyen kısım  
  LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)  
   {      
  switch(msg)      
  {          
  case WM_CLOSE:   
             DestroyWindow(hwnd);  
    break;          
    case WM_DESTROY:              
    PostQuitMessage(0);          
    break;          
    
    default:             
    return DefWindowProc(hwnd, msg, wParam, lParam);      
 }     
 return 0;   
}  
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,      LPSTR lpCmdLine, int nCmdShow)
   {     
   WNDCLASSEX wc; 
   HWND hwnd;      
   MSG Msg;      
   //birinci adım: Pencere özelliklerini belirten bir sınıf değişkeni tanımlanıyor     
    wc.cbSize        = sizeof(WNDCLASSEX);
 wc.style         = 0;     
 wc.lpfnWndProc   = WndProc;      
 wc.cbClsExtra    = 0;      
 wc.cbWndExtra    = 0;      
 wc.hInstance     = hInstance;      
 wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);      
 wc.hCursor       = LoadCursor(NULL, IDC_ARROW);      
 wc.hbrBackground = (HBRUSH)(COLOR_WINDOW);      
 wc.lpszMenuName  = NULL;      
 wc.lpszClassName = Classismi;      
 wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);      
 if(!RegisterClassEx(&amp;wc))     
 {          
 MessageBox(NULL, "Pencere tanımlama hatası!", "Hata!",              MB_ICONEXCLAMATION | MB_OK);
 return 0;      
 }     
 // ikinci adım pencere oluşturma      
 hwnd = CreateWindow(Classismi,"Pencere başlığı",WS_OVERLAPPEDWINDOW,    200, 200, 300, 200,NULL, NULL, hInstance, NULL);
 ShowWindow(hwnd, SW_SHOW);
 UpdateWindow(hwnd);
 // üçüncü adım: mesajların alınması ve ayrılması      
 
 while(GetMessage(&amp;Msg, NULL, 0, 0) &gt; 0)      
 {          
 TranslateMessage(&amp;Msg);          
 DispatchMessage(&amp;Msg);      
 }      
 return Msg.wParam;  
 }  
&lt;/textarea&gt;

&lt;b&gt;Basit Parçalar Birleşince Karmaşık Görünebilir&lt;/b&gt;

&lt;b&gt;#include &amp;ltwindows.h&amp;gt &lt;/b&gt;ilk satır bu programda windows bileşenleri kullanacağımızı belirtiyor.
&lt;b&gt;const char Classismi[] = "pencere";&lt;/b&gt;burada tanımlanan değişken biraz aşağıdaki WNDCLASSEX objesi için isim olacaktır. 
&lt;b&gt;LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)  {
      
switch
(msg)      {
          
case 
WM_CLOSE:              
DestroyWindow(hwnd);
          
break;          

case 
WM_DESTROY:              
PostQuitMessage(0);          
break;          
default:              
return 
DefWindowProc(hwnd, msg, wParam, lParam);      
}      return 0; 
 }          &lt;/b&gt;LRESULT CALLBACK isimli fonksiyon içersinde programdan gelen mesajlar(msg) işlenecektir. burada temel iki tane WM_ mesajı yazılmıştır.(WindowsMessage) Eğer programda bir düğme olsaydı WM_COMMAND ile düğmeye basıldığını anlayabilirdik. ( ilgili örnek sonraki sayfada işlenecektir)
&lt;b&gt;int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)  { } &lt;/b&gt;WinMain isimli fonksiyonun mutlaka olması gerektiğini az önceki örnekte görmüştük. bu bizim ana döngümüz.
&lt;b&gt;WNDCLASSEX wc; // Pencere özelliklerini tanımlayacak olan cisim belirleniyor wc

HWND hwnd; // Pencerenin kontrolunda kullanılacak handle ( kulp, sap , kabza) 

MSG Msg; // mesaj için değişken
&lt;/b&gt;Bu kısımda önemli bir bilgi için açıklamaya ara veriyorum. HANDLE isimli değişken win32 programcılığında çok önemlidir. herhangi bir nesne ile uğraşırken bu handle numarasını bilmemiz gerekir. Diyelim ki pencereyi gizlemek istiyoruz bu durumda: 

ShowWindow(hwnd, SW_HIDE);

fonksiyonunu kullanabiliriz. Eğer pencereyi tekrar görünür yapmak istersek. ShowWindow(hwnd, SW_SHOW); komutu ile açığa çıkarırız. burada handle numarası hangi pencerenin gizleneceğini belirtir. Diyelim ki Pencere üzerindeki Butonu gizlemek istiyoruz bu durumda ShowWindow(hbuton, SW_HIDE); şeklinde bir komut ile gizleyebiliriz. buradaki hbuton ise buton için tanımlanacak bir handle değişkenidir. ( buton yapmayı ilerde göreceğiz.handle ile ilgili bilgiyi uygulama yaptıkça pekiştirirsiniz ) Açıklamaya geri dönelim:
&lt;b&gt;wc.cbSize = sizeof(WNDCLASSEX); 
wc.style = 0; 
wc.lpfnWndProc = WndProc; //LRESULT CALLBACK fonksiyonun adı, pencere mesajları oraya yollayacak
wc.cbClsExtra = 0; 
wc.cbWndExtra = 0; 
wc.hInstance = hInstance; 
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); //Pencere için gerekli icon
wc.hCursor = LoadCursor(NULL, IDC_ARROW); // Pencere üzerinde iken fare işaterçisi hangi şekilde olacak
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW); //Pencere rengi
wc.lpszMenuName = NULL;
wc.lpszClassName = Classismi; //Tanımlanan Bu yapıyı çağırmak için kullanılacak isim
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); // Pencere için minik icon 

 if(!RegisterClassEx(&amp;wc)) 
{
  MessageBox(NULL, "Pencere tanımlama hatası!", "Hata!", MB_ICONEXCLAMATION | MB_OK); 
  return 0; 
}
&lt;/b&gt;Bu kısımda oluşacak pencere için gerekli özellikler bir yapı ile tanımlanıyor. Açıklama yazmadığım özellikler için WNDCLASSEX yapısının açıklamasına microsoft.com sitesinden ulaşabilirsiniz. sıfır yada NULL yazılanlar özel tanımlamalar için gerekli, bizim şimdilik onlarla işimiz olmayacak.
 if(!RegisterClassEx(&amp;wc)) kısmında ise hazırlanan bu yapı windows´a onaylatılıyor. eğer yapıda hata varsa daha pencere açılmadan ekrana Mesaj kutusu çıkacaktır.
&lt;b&gt;hwnd = CreateWindow(Classismi,"Pencere başlığı",WS_OVERLAPPEDWINDOW, 200, 200, 300, 200,NULL, NULL, hInstance, NULL);&lt;/b&gt;işte esas fonksiyon bu CreateWindow , ( veya CreateWindowEx ) O kadar yazının tek amacı bu fonksiyona yol verebilmek için bu fonksiyon ile tüm pencere bileşenlerini oluşturacağız. Butonu da aynı fonksiyonla oluşturuyoruz. liste kutusunu da aynı fonksiyon ile. çünkü windows içersinde tüm bileşenler birer pencere olarak varsayılır. bir buton da windows için bir penceredir. sadece şekli farklıdır.

CreateWindow fonksiyonuna ayrıntılı olarak bakmamız gerekiyor, çünkü bu fonksiyonu çok kullanacağız ve bize çok şey öğretebilir. Microsoft´un sitesinde bu fonksiyon şu şekilde tanımlanır.Açıklaması altında.

&lt;b&gt;HWND CreateWindow(
LPCTSTR lpClassName,
LPCTSTR lpWindowName,
DWORD dwStyle,
int x,
int y,
int nWidth,
int nHeight,
HWND hWndParent,
HMENU hMenu,
HINSTANCE hInstance,
LPVOID lpParam
);
&lt;/b&gt;HWND CreateWindow( // bu HWND ( yani handle=kulp)oluşan yapının sayı cinsinden karşılığıdır. tüm pencerelerin bir handle numarası vardır. bu numarayı bilirseniz sizin programınızın dışında bir programa da emir verebilirsiniz.

LPCTSTR lpClassName, //oluşacak pencere için belirlenen bir sınıf adı. bu sınıfı biz WNDCLASSEX türünden kendimiz oluşturabileceğimiz gibi. BUTTON LISTVIEW, COMBOBOX gibi hazır sınıfları da kullanabiliriz.

LPCTSTR lpWindowName, // Pencerenin adı Eğer bu bir pencere ise bu title olacaktır ( pencerenin tepesindeki yazı) eğer bu bir buton ise düğme üzerindeki yazı olacaktır.

DWORD dwStyle, // pencere özel tanımlamaları bunun listesi .çok uzundur. bir pencere için birkaç farklı sitil kullanılabilir. aralarına dik çizgi konarak "|". 
Eğer hazırlanan ana pencere(form) ise bunlar 
WS_BORDER(kenar çizgisi olsun)
WS_MINIMIZE(program açılışta simge durumunda olsun)
WS_CHILD ( ana pencere dışındaki buton, liste, yazı vb. cisimler için kullanılır. zorunludur)
vb. pencere özellikleri olacaktır.

Eğer hazırlanan buton ise bunlar 
BS_DEFPUSHBUTTON (enter tuşuna basılınca çalışan buton)
BS_CENTER (düğme içindeki yazı ortalı olur) 
BS_PUSHBUTTON (normal bir düğme için)
BS_CHECKBOX (Buton ; onay kutucuğu gibi olur)

Eğer hazırlanan ComboBox ise bunlar 
CBS_DROPDOWN ( seçilebilir liste)
CBS_SORT (girilen yazıları otomatik listeler)

Eğer hazırlanan Edit (Text-Metin kutusu )ise bunlar 
ES_AUTOHSCROLL (yazı kutusunda sağa doğru kaydırma yapar)
ES_LOWERCASE (girilen tüm yazılar küçük harfe dönüşür)
ES_NUMBER ( sadece rakam girilebilir, harf yazılamaz)

Yukarda saydıklarım uzun bir listeden ufak bir parça, uzun listeyi microsoft.com sitesinde developer bölümünde bulacaksınız.Windows sistemini Microsoft yazdığına göre en iyi açıklamaları da onlar yapacaktır.

int x, // oluşan pencerenin soldan uzaklığı, eğer ana pencere ise ekranın solunda uzaklığı

int y, // pencerenin yukardan uzaklığı

int nWidth, //pencere eni
int nHeight, //pencere yüksekliği

HWND hWndParent, // Eğer oluşturulan Ana pencere ise bu değer Null yani boş girilir. Eğer oluşturulan düğme veya metin kutusu gibi yavru bir pencere ise bu değer ana pencerenin HANDLE değeridir.

HMENU hMenu, // Program içersinde dilerseniz tüm alt pencerelere birer menü numarası verebilirsiniz, ( düğme liste vb.) böylece daha kolay erişim imkanınız olur.

HINSTANCE hInstance, //instance numarası, program içersinde sadece bir instance numarası vardır. bu da ilk oluşturma sırasında ana pencereye atanır. ana pencere veya yavru pencerede bu sayı aynıdır.

LPVOID lpParam //pencere oluşturma bilgisinin işaretçisi. özel durumlarda kullanılır. şimdilik bunu boş geçeceğiz (null) sınırsız sayıda yavru pencere oluşturma gibi özel durumlarda kullanılır.
);

Eğer CreateWindow fonksiyonunu anlayabildiyseniz önemli kısmını bitirdik demektir. bunda sonra gelen kısımda pencereyi ekranda gösteren komut ve mesajı alıp parçalara ayıran iki komut var. bunları zaten herzaman kullanacaksınız.

&lt;b&gt;ShowWindow(hwnd, SW_SHOW); //pencereyi göster
UpdateWindow(hwnd); //pencereyi tazele

// üçüncü adım: mesajların alınması ve ayrılması 
while(GetMessage(&amp;Msg, NULL, 0, 0) &gt; 0) {
TranslateMessage(&amp;Msg);
DispatchMessage(&amp;Msg); 
} 
return Msg.wParam;  //ana döngünün sonu
}&lt;/b&gt;

Sonuçta elde ettiğimiz boş pencere böyle olacak.

&lt;img src=http://www.tr3d.com/dokuman/programlama/381/vc9.gif&gt;

kaynak: www.tr3d.com (Bu sitede Grafik ve programlama üzerine güzel kaynaklar bulabilirsiniz özellikler 3D Studio Max ile ilgilenenlere tavsiye ederim)
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-4980836656345748564?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/4980836656345748564/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=4980836656345748564' title='1 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/4980836656345748564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/4980836656345748564'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/05/visual-c-ile-grsel-programlama.html' title='Visual C++ ile Görsel Programlama'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-4260600796514662354</id><published>2008-05-06T04:22:00.000-07:00</published><updated>2008-05-06T12:13:55.502-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Genel'/><title type='text'>Windows Tetris Oyunu Kaynak kodları</title><content type='html'>&lt;pre&gt;
C# ile GDI (grafik kütüphanesi) kullanılarak yazılmış güzel bir tetris oyunu ve kaynak kodları öğrenciler için sunulmuş, windows ta çalışan 2 boyutlu oyun yapmak isteyenlerin incelemesi gereken iyi bir kaynak olmuş ...

&lt;a href="http://3.bp.blogspot.com/_fAqb9I3wJqQ/SCBBAjASn3I/AAAAAAAAAIM/F-6UTGomfLI/s1600-h/ads%C4%B1z.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_fAqb9I3wJqQ/SCBBAjASn3I/AAAAAAAAAIM/F-6UTGomfLI/s320/ads%C4%B1z.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5197225447637819250" /&gt;&lt;/a&gt;&lt;br&gt;

Programcı : Şahin UZUNOK
kaynak: www.csharpnedir.com

DOWNLOAD : &lt;a href=http://www.csharpnedir.com/kod/Tetris2007.zip&gt;http://www.csharpnedir.com/kod/Tetris2007.zip&lt;/a&gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-4260600796514662354?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/4260600796514662354/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=4260600796514662354' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/4260600796514662354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/4260600796514662354'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/05/windows-tetris-oyunu.html' title='Windows Tetris Oyunu Kaynak kodları'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_fAqb9I3wJqQ/SCBBAjASn3I/AAAAAAAAAIM/F-6UTGomfLI/s72-c/ads%C4%B1z.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-4492404604201156986</id><published>2008-04-25T07:43:00.000-07:00</published><updated>2008-05-06T04:12:52.003-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sektör Haberleri'/><category scheme='http://www.blogger.com/atom/ns#' term='Genel'/><category scheme='http://www.blogger.com/atom/ns#' term='Oyun Haberleri'/><title type='text'>Euro 2008 Oyunu</title><content type='html'>&lt;pre&gt;
&lt;img src=http://www.activewin.com/reviews/software/games/e/images/euro2000_3.jpg&gt;
EA Canada tarafından geliştirilen UEFA Euro 2008'de, daha hızlı ve kontrollü bir motor bulunacak. Euro 2007'e katılan tüm takımları ve resmi stadyumları içerecek. 50'nin üzerinde Avrupa milli takımıyla oynama imkanı olacak. Ülke Kaptanı isimli yeni mod sayesinde oyuncular sahaya takımlarının kaptanı olarak çıkacaklar. Ayrıca turnuvanın atmosferini geliştirecek olan interaktif kutlamalar yoluyla sahada başarılarını kutlayabilecekler. Buna ek olarak Ülkeler Savaşı modunda, diğer oyuncularla başarıya ulaştırmak için birlikte mücadele edebilecekler.

&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/_8uHesACVTs&amp;hl=en"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/_8uHesACVTs&amp;hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br&gt;

Euro 2008'in yapımcısı Simon Humber yapımla ilgili olarak, milli takımlar arasındaki rekabeti oyuna taşııdıklarını ve oyunculara ülke kaptanı veya kahramanlarından biri rolüne bürünme imkânı vererek oyuncuların milli takımları için hissettikleri coşkuyu kucaklayacaklarını söylüyor. Ayrıca oyunun motorunu yeni bir düzeye taşıdıklarını ve gerçek turnuva deneyimini ve yaşanan duyguları yakalayabilecek bir oyun yaratmak için pek çok yenilikçi özellik eklediklerini belirtiyor.

&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/bEvE46DxrM0&amp;hl=en"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/bEvE46DxrM0&amp;hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br&gt;

UEFA Euro 2008'in diğer bir özelliği ilk defa tüm Avrupa'da, önde gelen cep telefonu operatörleri vasıtasıyla cep telefonlarına da indirilebilecek. Yeni tek düğme kontrol sistemi sayesinde cep telefonlarında rahatça oynanacak. Oyun 11 Nisan'da Avrupa'da, 20 Mayıs'ta ise Amerika'da piyasaya sürülecek. 

&lt;b&gt;Bence en iyi futbol oyunu KONAMI yapar. PES 2008 mesela ... Konami yaptığı futbol oyunlarında yapay zeka olarak daha önde ...&lt;/b&gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-4492404604201156986?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/4492404604201156986/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=4492404604201156986' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/4492404604201156986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/4492404604201156986'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/04/euro-2008-oyunu.html' title='Euro 2008 Oyunu'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-656191165796392521</id><published>2008-04-25T07:26:00.000-07:00</published><updated>2008-04-25T07:33:56.348-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Genel'/><title type='text'>Windows Sayısal Loto Oyunu</title><content type='html'>&lt;pre&gt;
Madem daha directx öğrenemedik o zaman windows ta bişeyler yapayım dedim (can sıkıntısından) ve Sayısal Loto tahmin oyunu yaptım. Oldukça basit bir şey ama c# ile ilgilenenler için Properties(özellik tanımlama) nasıl olur? bunu öğretebilir ...

Download Kaynak kodu : &lt;a href="http://www.dosyaupload.net/download.php?file=82505"&gt;http://www.dosyaupload.net/download.php?file=82505&lt;/a&gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-656191165796392521?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/656191165796392521/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=656191165796392521' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/656191165796392521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/656191165796392521'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/04/windows-saysal-loto-oyunu.html' title='Windows Sayısal Loto Oyunu'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-4324989756877937424</id><published>2008-04-22T14:10:00.000-07:00</published><updated>2008-04-22T14:13:02.913-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Yapay Zeka'/><category scheme='http://www.blogger.com/atom/ns#' term='Genel'/><title type='text'>Yapay Zeka - Arama Algoritması</title><content type='html'>&lt;pre&gt;
Öngörüsel (heuristic) arama işlemlerinden gerçekleştirmesi en kolay olanlardan birisi Best First Search ya da diğer adıyla Hill Climbing Search olarak adlandırılan bu arama stratejisidir. Hill Climbing algoritmasında arama işleminde o anda aktif olan düğüm genişletilir ve çocuk düğümler değerlendirilir. Bunlardan en iyi değerlere sahip olan düğüm bir sonraki genişletme işleminde kullanılmak üzere seçilir.

Arama işlemi çocukların hepsinden daha iyi bir duruma erişildiğinde sona erer. Bu sistemde hatalı öngörüsel (heuristic) değerler sonsuz yollara, dolayısıyla arama işleminin başarısızlıkla sonuçlanmasına neden olur. Bu nedenle bu algoritmanın başarısı için öngörüsel değerlerinin doğru belirlenmesi büyük önem taşır. Algoritmada önceki basamaklarla ilgili bilgi tutulmamaktadır dolayısıyla hata durumu ile karşılaşıldığında eldeki yanlış çözüm üzerinde bir düzeltme yapılabilmesi söz konusu değildir. Algoritma, tüm çocuklardan daha iyi durumdaki bir düğüme erişildiğinde sona erdiğinden yele maksimum noktaları da sorun yaratmaktadır. İyi mutlak açıdan en iyi olmak zorunda değildir. Hill Climbing algoritması yerel ve global maksimum arasındaki ayrımı yapamamaktadır. Algoritmamızda AÇIK olarak adlandıracağımız gidilebilecek durumların tutulduğu bir liste ve KAPALI olarak adlandırdığımız ziyaret ettiğimiz durumların tutulduğu bir liste kullanılmaktadır. Algoritma aşağıdaki gibidir.

&lt;b&gt;Best First Search Algoritmasının Açık Metin Hali:&lt;/b&gt;

1. AÇIK listesine Start düğümünü ekle
2. KAPALI listesini boşalt
3. AÇIK listesinde eleman olduğu surece
4. AÇIK listesinin en solundaki elemanı listeden çıkart . Bu elemanı X olarak adlandıralım.
5. X'ın çocuklarını bul
6. X'in tüm çocukları için
6.1. Eğer child AÇIK ve KAPALI listesinde değil ise 
6.1.1. Child'e bir herustik değer ver ve AÇIK listesine ekle.
6.2. Child AÇIK Listesinde ise
6.2.1. Eğer daha kısa bir yol ile ulaşılmış ise AÇIK lisesindeki Child kayıdının Herustik değerini değiştir.
6.2.2. Child'ın ebeveyn bilgisini günceller.
6.3. Eğer child KAPALI listesinde ise
6.3.1. Eğer daha kısa bir yol bulunmuş ise KAPALI listesinden çıkartıp yeni bilgilere göre güncelleyip AÇIK listesine ekle.
7. X nodunu KAPALI listesine ekle
8. AÇIK listesini herustik değerlerine göre yeniden sırala (En iyi seçenek sola gelecek şekilde)

&lt;b&gt;Best First Search Algoritmasının Arakod Hali:&lt;/b&gt;
&lt;font color=darkred&gt;
Procedure best_first_search* (Hill Climbing Search)
Begin
  Open := [Start];
  Closed :=[];
  While open &lt;&gt; [] do Begin
    Remove the leftmost state from open, call it X;
    If  X =goal then return the return the path form the Start to X
    Else begin
      Generate children of X;
      For each child of X do
      Case
        The child is not on open or closed: Begin
          Assign the child a herustic value;
          Add the child to open
        End;
        The child is already on open:
          If the child was reached by a shorter path
          Then give the state on open the shorter path
        The child is already on closed:
        If the child was reached by a shorter path then Begin
          Remove the state from closed;
          Add the child to open
        end
      end;
      put X on closed;
      re-order states on open by heuristic merit (best leftmost)
    end;
  return failure
end.
&lt;/font&gt;

Algoritma her iterasyonda AÇIK listesinden bir elemanı (anlık olarak en iyi -çözüme en yakın- olan elemanı) çıkartır. Eğer algoritma hedef şartlarına erişirse hedefe ulaşılmasını sağlayan yol bilgisini geri döndürür. Burada dikkat edilecek nokta algoritmanın her düğümün kendi (babası) ebeveyni hakkında bilgi içerdiğini kabul ettiğidir.

kaynak: www.yapay-zeka.org
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-4324989756877937424?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/4324989756877937424/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=4324989756877937424' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/4324989756877937424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/4324989756877937424'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/04/yapay-zeka-arama-algoritmas.html' title='Yapay Zeka - Arama Algoritması'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-5675668613025928154</id><published>2008-04-22T14:05:00.000-07:00</published><updated>2008-04-23T03:17:07.705-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='Genel'/><title type='text'>C++ ile 2D Oyun yapıyor ve çok güzel</title><content type='html'>&lt;br&gt;
&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/P1MvnsTlJ9E&amp;hl=en"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/P1MvnsTlJ9E&amp;hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br&gt;&lt;b&gt;Part2&lt;/b&gt;&lt;br&gt;
&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/F9WtUbyZI3E&amp;hl=en"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/F9WtUbyZI3E&amp;hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Part3&lt;/b&gt;&lt;br&gt;
&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/5oogy0jDNuE&amp;hl=en"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/5oogy0jDNuE&amp;hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-5675668613025928154?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/5675668613025928154/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=5675668613025928154' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/5675668613025928154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/5675668613025928154'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/04/c-ile-2d-oyun-yapyor-ve-ok-gzel.html' title='C++ ile 2D Oyun yapıyor ve çok güzel'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-8792145560419866922</id><published>2008-04-17T01:54:00.001-07:00</published><updated>2008-04-17T01:55:56.577-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DirectX'/><title type='text'>Manged Directx Örnek Uygulama - 3</title><content type='html'>&lt;pre&gt;
&lt;b&gt;Örnek Uygulama 3&lt;/b&gt;

Şimdi de birden çok texture’ü nasıl temel şekilimizin üzerinde görüntüleyeceğimizi görelim.

&lt;textarea rows = 40 cols = 75&gt;
using System;
using System.Drawing;
using System.Windows.Forms;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;
using Direct3D = Microsoft.DirectX.Direct3D;

namespace Oyun1
{
 public class oyun : Form
 {
  Device device=null;
  VertexBuffer vertbuffer=null;
  Texture[] texture=new Texture[10];
  public oyun()
  {
   this.ClientSize = new Size(450,450);
   this.Text = "Oyun Deneme!";
  }
  public bool grafik_hazirla()
  {
   try
   {
    PresentParameters d3dpp = new PresentParameters();
    d3dpp.Windowed = true;
    d3dpp.SwapEffect = SwapEffect.Discard;
    device = new Device(0,DeviceType.Hardware,this,CreateFlags.SoftwareVertexProcessing,d3dpp);
    vertbuffer = new VertexBuffer(typeof(CustomVertex.TransformedTextured),4,device,Usage.WriteOnly,CustomVertex.TransformedColored.Format,Pool.Default);
    for(int i = 1;i&lt;10;i++)
    {
     texture[i]=TextureLoader.FromFile(device,"c:\\a"+Convert.ToString(i)+".bmp");
    }
    GraphicsStream stm = vertbuffer.Lock(0,0,0);
    CustomVertex.TransformedTextured[] verts = new Microsoft.DirectX.Direct3D.CustomVertex.TransformedTextured[4];
    verts[0].X = 100; verts[0].Y = 100;verts[0].Z = 0;verts[0].Rhw =1;verts[0].Tu=0;verts[0].Tv=0;
    verts[1].X = 300; verts[1].Y = 100;verts[1].Z = 0;verts[1].Rhw = 1;verts[1].Tu=1;verts[1].Tv=0;
    verts[2].X = 100; verts[2].Y = 300;verts[2].Z = 0;verts[2].Rhw = 1;verts[2].Tu=0;verts[2].Tv=1;
    verts[3].X = 300; verts[3].Y = 300;verts[3].Z = 0;verts[3].Rhw = 1;verts[3].Tu=1;verts[3].Tv=1;
    stm.Write(verts);
    vertbuffer.Unlock();
    return true;
   }
   catch(DirectXException hata)
   {
    MessageBox.Show(hata.ToString());
    return false;
   }
  }
  static int x;
  private void render()
  {
   if(device==null)
    return;
   device.Clear(ClearFlags.Target,System.Drawing.Color.BlueViolet,1.0f,0);
   device.BeginScene();
   device.SetTexture(0,texture[x]);
   x+=1;
   if(x==10)
    x=0;
   device.SetStreamSource(0,vertbuffer,0);
   device.VertexFormat = CustomVertex.TransformedTextured.Format;
   device.DrawPrimitives(PrimitiveType.TriangleStrip,0,2);
   device.EndScene();
   device.Present();
  }
  protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
  {
   this.render();
  }
  protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e)
  {
   if ((int)(byte)e.KeyChar == (int)System.Windows.Forms.Keys.Escape)
    this.Close();
  }

  private void InitializeComponent()
  {
   // 
   // oyun
   // 
   this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
   this.ClientSize = new System.Drawing.Size(292, 266);
   this.Name = "oyun";

  }
 
  static void Main()
  {
   using(oyun f1=new oyun())
   {
    if(!f1.grafik_hazirla())
    {
     MessageBox.Show("Grafik Hazırlanamıyor!");
     return;
    }
    f1.Show();
    while(f1.Created)
    {
     f1.render();
     Application.DoEvents();
    }
   }
  }
 }
}
&lt;/textarea&gt;

kaynak: Öğretim Görevlisi Murat GÜNEŞ
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-8792145560419866922?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/8792145560419866922/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=8792145560419866922' title='1 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/8792145560419866922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/8792145560419866922'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/04/manged-directx-rnek-uygulama-3.html' title='Manged Directx Örnek Uygulama - 3'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-4876930088292954301</id><published>2008-04-17T01:51:00.000-07:00</published><updated>2008-04-17T01:53:38.557-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DirectX'/><title type='text'>Manged Directx Örnek Uygulama - 2</title><content type='html'>&lt;pre&gt;
&lt;b&gt;Örnek Uygulama 2&lt;/b&gt;

Bu uygulamada da ekrana çizdirdiğimiz teel şekilin(dörtgen) üzerine texture kaplayacağız.

&lt;textarea rows = 40 cols = 75&gt;
using System;
using System.Drawing;
using System.Windows.Forms;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;
using Direct3D = Microsoft.DirectX.Direct3D;

namespace Oyun1
{
 public class oyun : Form
 {
  Device device=null;
  VertexBuffer vertbuffer=null;
  Texture texture=null;
  public oyun()
  {
   this.ClientSize = new Size(450,450);
   this.Text = "Oyun Deneme!";
  }
  public bool grafik_hazirla()
  {
   try
   {
    PresentParameters d3dpp = new PresentParameters();
    d3dpp.Windowed = true;
    d3dpp.SwapEffect = SwapEffect.Discard;
    device = new Device(0,DeviceType.Hardware,this,CreateFlags.SoftwareVertexProcessing,d3dpp);
    vertbuffer = new VertexBuffer(typeof(CustomVertex.TransformedTextured),4,device,Usage.WriteOnly,CustomVertex.TransformedColored.Format,Pool.Default);
    texture=TextureLoader.FromFile(device,"c:\\a1.bmp");
    GraphicsStream stm = vertbuffer.Lock(0,0,0);
    CustomVertex.TransformedTextured[] verts = new Microsoft.DirectX.Direct3D.CustomVertex.TransformedTextured[4];
    verts[0].X = 100; verts[0].Y = 100;verts[0].Z = 0;verts[0].Rhw =1;verts[0].Tu=0;verts[0].Tv=0;
    verts[1].X = 300; verts[1].Y = 100;verts[1].Z = 0;verts[1].Rhw = 1;verts[1].Tu=1;verts[1].Tv=0;
    verts[2].X = 100; verts[2].Y = 300;verts[2].Z = 0;verts[2].Rhw = 1;verts[2].Tu=0;verts[2].Tv=1;
    verts[3].X = 300; verts[3].Y = 300;verts[3].Z = 0;verts[3].Rhw = 1;verts[3].Tu=1;verts[3].Tv=1;
    stm.Write(verts);
    vertbuffer.Unlock();
    return true;
   }
   catch(DirectXException hata)
   {
    MessageBox.Show(hata.ToString());
    return false;
   }
  }
  private void render()
  {
   if(device==null)
    return;
   device.Clear(ClearFlags.Target,System.Drawing.Color.BlueViolet,1.0f,0);
   device.BeginScene();
   device.SetTexture(0,texture);
   device.SetStreamSource(0,vertbuffer,0);
   device.VertexFormat = CustomVertex.TransformedTextured.Format;
   device.DrawPrimitives(PrimitiveType.TriangleStrip,0,2);
   device.EndScene();
   device.Present();
  }
  protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
  {
   this.render();
  }
  protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e)
  {
   if ((int)(byte)e.KeyChar == (int)System.Windows.Forms.Keys.Escape)
    this.Close();
  }

  private void InitializeComponent()
  {
   // 
   // oyun
   // 
   this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
   this.ClientSize = new System.Drawing.Size(292, 266);
   this.Name = "oyun";

  }
 
  static void Main()
  {
   using(oyun f1=new oyun())
   {
    if(!f1.grafik_hazirla())
    {
     MessageBox.Show("Grafik Hazırlanamıyor!");
     return;
    }
    f1.Show();
    while(f1.Created)
    {
     f1.render();
     Application.DoEvents();
    }
   }
  }
 }
}
&lt;/textarea&gt;

kaynak: Öğretim Görevlisi Murat Güneş
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-4876930088292954301?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/4876930088292954301/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=4876930088292954301' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/4876930088292954301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/4876930088292954301'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/04/manged-directx-rnek-uygulama-2.html' title='Manged Directx Örnek Uygulama - 2'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-8811732302528489709</id><published>2008-04-16T03:31:00.001-07:00</published><updated>2008-04-16T03:38:23.216-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DirectX'/><title type='text'>Managed Directx Örnek Uygulama - 1</title><content type='html'>&lt;pre&gt;
Bu uygulamada ekrana temel şekillerin nasıl çizdirildiğini inceleyeceğiz. İlk uygulama olduğu için texture yerine şimdilik vertexleri boyamayı tercih ediyoruz. Yani kullanacağımız vertex tipi “TransformedColored” olacak.

&lt;font color=blue&gt;using&lt;/font&gt; System;
&lt;font color=blue&gt;using&lt;/font&gt; System.Drawing;
&lt;font color=blue&gt;using&lt;/font&gt; System.Windows.Forms;
&lt;font color=blue&gt;using&lt;/font&gt; Microsoft.DirectX;
&lt;font color=blue&gt;using&lt;/font&gt; Microsoft.DirectX.Direct3D;
&lt;font color=blue&gt;using&lt;/font&gt; Direct3D = Microsoft.DirectX.Direct3D;

&lt;font color=blue&gt;namespace&lt;/font&gt; Oyun1
{
 &lt;font color=blue&gt;public class&lt;/font&gt; oyun : Form
 {
  Device device=&lt;font color=blue&gt;null;&lt;/font&gt;
  VertexBuffer vertbuffer=&lt;font color=blue&gt;null;&lt;/font&gt;
  &lt;font color=blue&gt;public&lt;/font&gt; oyun()
  {
   &lt;font color=blue&gt;this&lt;/font&gt;.ClientSize = &lt;font color=blue&gt;new&lt;/font&gt; Size(450,450);
   &lt;font color=blue&gt;this&lt;/font&gt;.Text = "Oyun Deneme!";
  }
  &lt;font color=blue&gt;public bool&lt;/font&gt; grafik_hazirla()
  {
   &lt;font color=blue&gt;try&lt;/font&gt;
   {
    PresentParameters d3dpp = &lt;font color=blue&gt;new&lt;/font&gt; PresentParameters();
    d3dpp.Windowed = &lt;font color=blue&gt;true;&lt;/font&gt;
    d3dpp.SwapEffect = SwapEffect.Discard;
    device = &lt;font color=blue&gt;new&lt;/font&gt; Device(0,DeviceType.Hardware,&lt;font color=blue&gt;this&lt;/font&gt;,CreateFlags.SoftwareVertexProcessing,d3dpp);
    vertbuffer = new VertexBuffer(&lt;font color=blue&gt;typeof&lt;/font&gt;(CustomVertex.TransformedColored),4,device,Usage.WriteOnly,CustomVertex.TransformedColored.Format,Pool.Default);
    GraphicsStream stm = vertbuffer.Lock(0,0,0);
    CustomVertex.TransformedColored[] verts = &lt;font color=blue&gt;new&lt;/font&gt; Microsoft.DirectX.Direct3D.CustomVertex.TransformedColored[4];
    verts[0].X = 100; verts[0].Y = 100;verts[0].Z = 0;verts[0].Rhw = 1;verts[0].Color = System.Drawing.Color.Blue.ToArgb();
    verts[1].X = 300; verts[1].Y = 100;verts[1].Z = 0;verts[1].Rhw = 1;verts[1].Color = System.Drawing.Color.Black.ToArgb();
    verts[2].X = 100; verts[2].Y = 300;verts[2].Z = 0;verts[2].Rhw = 1;verts[2].Color = System.Drawing.Color.Red.ToArgb();
    verts[3].X = 300; verts[3].Y = 300;verts[3].Z = 0;verts[3].Rhw = 1;verts[3].Color = System.Drawing.Color.Brown.ToArgb();
    stm.Write(verts);
    vertbuffer.Unlock();
    &lt;font color=blue&gt;return true;&lt;/font&gt;
   }
   &lt;font color=blue&gt;catch&lt;/font&gt;(DirectXException hata)
   {
    MessageBox.Show(hata.ToString());
    &lt;font color=blue&gt;return false;&lt;/font&gt;
   }
  }
  &lt;font color=blue&gt;private void&lt;/font&gt; render()
  {
   &lt;font color=blue&gt;if&lt;/font&gt;(device==&lt;font color=blue&gt;null&lt;/font&gt;)
    &lt;font color=blue&gt;return;&lt;/font&gt;
   device.Clear(ClearFlags.Target,System.Drawing.Color.BlueViolet,1.0f,0);
   device.BeginScene();
   device.SetStreamSource(0,vertbuffer,0);
   device.VertexFormat = CustomVertex.TransformedColored.Format;
   device.DrawPrimitives(PrimitiveType.TriangleStrip,0,2);
   device.EndScene();
   device.Present();
  }
  protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
  {
   this.render();
  }
  protected override void OnKeyPress(System.Windows.Forms.KeyPressEventArgs e)
  {
   if ((int)(byte)e.KeyChar == (int)System.Windows.Forms.Keys.Escape)
    this.Close();
  }
  static void Main()
  {
   using(oyun f1=new oyun())
   {
    if(!f1.grafik_hazirla())
    {
     MessageBox.Show("Grafik Hazırlanamıyor!");
     return;
    }
    f1.Show();
    while(f1.Created)
    {
     f1.render();
     Application.DoEvents();
    }
   }
  }
 }
}
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-8811732302528489709?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/8811732302528489709/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=8811732302528489709' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/8811732302528489709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/8811732302528489709'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/04/managed-directx-rnek-uygulama-1.html' title='Managed Directx Örnek Uygulama - 1'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-334237814740378322</id><published>2008-04-16T03:16:00.000-07:00</published><updated>2008-04-16T03:29:23.846-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DirectX'/><title type='text'>Managed Directx Bölüm - 7 Temel Şekillerin Çizilmesi ve Texture</title><content type='html'>&lt;pre&gt;
&lt;b&gt;Temel Şekillerin Çizilmesi ve Texture&lt;/b&gt;

Artık çalışmaya başlayabiliriz: Adaptörlerin ve Device’ların ne olduğunu biliyoruz, görüntü modlarının ne olduğunu anladık, temel Direct 3D program yapısını biliyoruz ve projeksiyonlar, kameralar ve dönüşümlerle ilgili bilmemiz gerekenleri(şimdilik) biliyoruz. Şimdi tek ihtiyacımız olan şey ortaya koyacağımız sahnelerde rol alacak aktörler: Temel şekilleri çizmek.

Temel şekillerin çizimi, tekil 3D objelerin vertex koleksiyonlarının oluşturulması anlamına gelir. Direct 3D, diğer 3D objeleri oluşturmak için temel olarak poligon – üçgen – kullanır. Çünkü sadece üç nokta ile tanımlanan bir şekil kesinlikle bir düzlemde olacaktır, konveks olacaktır ve bu karakteristikler mümkün olan en hızlı rendering’i sağlayacaktır.

Örneğin ekrana bir kare çizmek istersek, iki tane üçgen kullanmanız gerekir. Bir küp çizmek istersek 12 adet üçgen kullanmalıyız(herbir yüz için iki adet). Şekilde görüldüğü gibi;

&lt;a href="http://4.bp.blogspot.com/_fAqb9I3wJqQ/SAXSe-TJlOI/AAAAAAAAAHU/RbQOQklsSSI/s1600-h/1.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_fAqb9I3wJqQ/SAXSe-TJlOI/AAAAAAAAAHU/RbQOQklsSSI/s320/1.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5189785575175591138" /&gt;&lt;/a&gt;

Burada bir konudan bahsetmek gerekecek. Birinci bölümde de bahsettiğim gibi 3D objeler ikiye ayrılıyor: Katı modeller ve Meshler. Direct 3D’nin kullandığı objeler, sadece yüzeylerden oluşan meshlerdir. Bu yüzdendir ki eski oyunlarda(yenilerinde bu yavaş yavaş aşılıyor) ekrandaki bir objenin içine giren kamera objenin içerisini ve hatta ötesini gösteriyordu.

Üçgenlerle çalışırken Direct 3D bize, genellikle debug amaçlı kullanımı olan, çizgilerin ve noktaların listesini tanımlamamız için izin verir. Bu sayede içgen kullanırken objemizin wireframe(tel-kafes) görüntüsünü görebilir ve gizli yüzeyleri kontrol edebiliriz.

Direct 3D’de obje oluşturma adımları aşağıdaki gibidir:

1. Verteks tipinini tanımlanması,
2. Bir verteks tamponu(vertex buffer) oluşturulması,
3. Tanımlanmış verteks tipine göre, objenin herbir verteksiyle tamponun doldurulması,
4. Tamponun Device’ta çizilmesi, diğer bir deyişle temel şekil tipinin bildirilmesi.

Şimdilik bütün vertekslerin x,y ve z koordinatlarında tanımlandığını varsayalım(bununla ilgili daha detaylı bilgiyi ileride göreceğiz), bu sayede temel şekil tiplerinin çizimine konsantre olabiliriz.

Verteks tamponu bir kez doldurulduğunda, bunu ekrana çizmek için aşağıdaki kodlar kullanılır:

D3Ddevice.SetStreamSource(0,vb,0);

D3Ddevice.DrawPrimitives(&lt;primitive type&gt;,0,&lt;number of primitives&gt;);

Burada vb, VertexBuffer’dan, D3Ddevice da Direct3D.Device’tan türetilmiş birer objedir.

Temel şekil tipi, aşağıdaki PrimitiveType enumeration değerlerinden biri olabilir:

&lt;b&gt;PointList:&lt;/b&gt;Herbir verteks diğerlerinden izole edilerek render edilir, bu sayede bir kayan noktalar(floating points) görebiliriz. Çok kullanışlı bir yöntem değil çünkü, DirectX’in 8.0 sürümünden sonra PointSprites isimli yeni bir özelliğe sahibiz. Partikül efektini PointSprites ile vermek daha mantıklı. Aşağıdaki şekil, bir nokta listesi(PointList) olarak renderlenmiş vertekslerin kurulumunu gösteriyor.

&lt;a href="http://2.bp.blogspot.com/_fAqb9I3wJqQ/SAXTDeTJlPI/AAAAAAAAAHc/TBaGHfSa3_U/s1600-h/2.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_fAqb9I3wJqQ/SAXTDeTJlPI/AAAAAAAAAHc/TBaGHfSa3_U/s320/2.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5189786202240816370" /&gt;&lt;/a&gt;

&lt;b&gt;LineList:&lt;/b&gt;Verteksler, her çifti bir çizgi birleştirmek üzere, çift çift renderlenir. Bu enumeration, eğer vertekslerin sayısına dikkat etmezsek, hata üretir.

&lt;a href="http://2.bp.blogspot.com/_fAqb9I3wJqQ/SAXTbeTJlQI/AAAAAAAAAHk/CRCYtF-xioU/s1600-h/3.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_fAqb9I3wJqQ/SAXTbeTJlQI/AAAAAAAAAHk/CRCYtF-xioU/s320/3.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5189786614557676802" /&gt;&lt;/a&gt;

&lt;b&gt;LineStrip:&lt;/b&gt;Tampondaki(buffer) bütün verteksler tek bir polyline(çoklu çizgi) olarak renderlenir. Bu yöntem özellikle debug amaçlı kullanışlıdır çünkü, bu temel şekil tipi(primitive type) bize, verteks sayısından bağımsız olarak, objemizin wireframe(tel-kafes) görüntüsünü görme imkanı sunar.

&lt;a href="http://1.bp.blogspot.com/_fAqb9I3wJqQ/SAXTtOTJlRI/AAAAAAAAAHs/B-mRz9HiKNY/s1600-h/4.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_fAqb9I3wJqQ/SAXTtOTJlRI/AAAAAAAAAHs/B-mRz9HiKNY/s320/4.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5189786919500354834" /&gt;&lt;/a&gt;

&lt;b&gt;TriangleList:&lt;/b&gt;Verteksler, izole edilmiş üçgenler gibi, üçerli gruplar halinde renderlenir. Bu bize, kompleks sahneleri(scene) renderlerken en büyük akıcılığı sağlar fakat, eğer bağlantılı üçgenler çizmek istiyorsak ikilenen(üzerinden geçilen) vertekslerin tekrar çizdirilmesi sözkonusudur.

&lt;a href="http://1.bp.blogspot.com/_fAqb9I3wJqQ/SAXUFOTJlSI/AAAAAAAAAH0/bc_sIRtOYQ8/s1600-h/5.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_fAqb9I3wJqQ/SAXUFOTJlSI/AAAAAAAAAH0/bc_sIRtOYQ8/s320/5.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5189787331817215266" /&gt;&lt;/a&gt;

&lt;b&gt;• TriangleStrip:&lt;/b&gt;Bu temel şekil tipini, bağlantılı üçgenler çizerken kullanacağız. Bu, karmaşık sahneleri(scene) renderlemek için en çok kullanılan temel şekil tipidir. Çünkü ikilenen verteksleri tekrar çizmek zorunda kalmayız. Çizilen ilk iki verteksten sonra çizilen herbir verteks, bu ilk iki verteksi kullanarak, yeni bir üçgen oluşmasını sağlar.

&lt;a href="http://4.bp.blogspot.com/_fAqb9I3wJqQ/SAXUX-TJlTI/AAAAAAAAAH8/eMrqHDN7qFo/s1600-h/6.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_fAqb9I3wJqQ/SAXUX-TJlTI/AAAAAAAAAH8/eMrqHDN7qFo/s320/6.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5189787653939762482" /&gt;&lt;/a&gt;

&lt;b&gt;• TriangleFan:&lt;/b&gt;Bu temel şekil tipinde, bütün üçgenler ortak bir verteks kullanır(buffer’daki ilk verteks) ve her yeni verteks, ilk verteksi ve kendinden önce ekleneni kullanarak, yeni bir üçgen oluşturur.

&lt;a href="http://2.bp.blogspot.com/_fAqb9I3wJqQ/SAXUveTJlUI/AAAAAAAAAIE/vI8OPsrjBhM/s1600-h/7.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_fAqb9I3wJqQ/SAXUveTJlUI/AAAAAAAAAIE/vI8OPsrjBhM/s320/7.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5189788057666688322" /&gt;&lt;/a&gt;

Üçgenleri çizerken, eğer Direct 3D’nin, bir üçgenin sadece ön yüzünü çizmesini (renderlemesini) istiyorsak, üçgenin verteks sıralamasına özel önem göstermeliyiz. Arka yüzeyleri gizleme özelliği “culling” olarak anılır. Bir culling modunu seçtiğimizde, eğer ön yüzün saat yönünde veya saat yönünün tersinde olmasını istiyorsak, bunu belirtmeliyiz; bu sayede aynı verteks düzenini kullanarak bütün üçgenleri çizebiliriz.

Pekala, muhtemelen “bu temel şekil tipleri ilginç ama ekrana tek bir şekil çizmek istersem, bir bitmap ya da diskteki bir dosya gibi. Bunu direkt ekrana çizdiremez miyim?” diye düşünüyorsunuz. Yanıt; hayır. Bir dörtgen oluşturmalısınız(iki üçgenden oluşan) ve resminizi bir texture olarak onun üzerine uygulamalısınız. Yokarıdaki Mesh&amp;Texture başlığı altındaki örneği hatırlayın.

kaynak: Öğretim Görevlisi Murat GÜNEŞ
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-334237814740378322?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/334237814740378322/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=334237814740378322' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/334237814740378322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/334237814740378322'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/04/managed-directx-blm-7-temel-ekillerin.html' title='Managed Directx Bölüm - 7 Temel Şekillerin Çizilmesi ve Texture'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_fAqb9I3wJqQ/SAXSe-TJlOI/AAAAAAAAAHU/RbQOQklsSSI/s72-c/1.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-8179168312453651852</id><published>2008-04-15T11:27:00.001-07:00</published><updated>2008-04-15T11:28:57.375-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DirectX'/><title type='text'>Managed Directx Bölüm - 6 Kameranın Yerleştirilmesi</title><content type='html'>&lt;pre&gt;
&lt;b&gt;Kameranın Yerleştirilmesi&lt;/b&gt;

3D koordinat sistemiyle çalışırken ekstra bir özellik olarak, DirectX, aynı sahneyi farklı noktalardan görebilmemiz için kamerayı yerleştirmemize izin verir.

Kamera pozisyonu, objenin World koordinatlarına uygulanan bazı özel dönüşümlerle(transformations) hesaplanır. Bu dönüşümler için gerekli olan matrisi manuel olarak hesaplayıp &lt;Device&gt;.Transform.View özelliğine setleyebiliriz veya yardımcı fonksiyonlar da kullanabiliriz; Matrix.LookAtLH ve Matrix.LookAtRH gibi. Bu yardımcı fonksiyonlar kameranın pozisyonunu ve baktığı yönü üç nokta ile tanımlar:
&lt;b&gt;
1. Kameranın 3D pozisyonu,
2. Kameranın baktığı yerin 3D pozisyonu,
3. (Genellikle y ekseni olan) yukarı doğrultusu.
&lt;/b&gt;
Eğer bir görüntü(kamera) matrisi tanımlamazsak, DirectX bizim için varsayım bir matris tanımlayacaktır ama bu akılda tutulması gereken önemli bir konsepttir. İlk Prince of Persia oyununu hatırlayın. Burada Prens, oyunun bir sahnesinde, bir yere düşüyordu ve ekran yukarı-aşağı doğrultusunda değişiyordu. Bu özelliği tek bir satır kodla oluşturabileceğinizi hayal edin: Kamera matrisini 1800 döndürerek(bir yönlendirme matrisi ile çarparak). Buradan da anlaşılıyor ki; Direct 3D, 2D oyunlarda dahi büyük avantajlar sağlıyor.

kaynak: Öğretim Görevlisi Murat GÜNEŞ
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-8179168312453651852?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/8179168312453651852/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=8179168312453651852' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/8179168312453651852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/8179168312453651852'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/04/managed-directx-blm-6-kamerann.html' title='Managed Directx Bölüm - 6 Kameranın Yerleştirilmesi'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-2567942821358927658</id><published>2008-04-15T11:12:00.000-07:00</published><updated>2008-04-15T11:23:00.856-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DirectX'/><title type='text'>Managed Directx Bölüm - 5 Matrisleri ve 3D Dönüşümleri Anlamak</title><content type='html'>&lt;pre&gt;
&lt;b&gt;Matrisleri ve 3D Dönüşümleri Anlamak&lt;/b&gt;

Direct 3D ile çalışırken en önemli nokta, dönüşüm matrislerinin nasıl çalıştığını bilmektir. Matrisleri kullanarak, 3D dünyadaki(veya eğer z bileşenini ihmal edersek, 2D dünyadaki) herhangi bir objenin rotation(yönlendirme), scaling(ölçeklendirme, boyutlandırma) veya translation(çevirimini) yapabiliriz ve bu işlemlerin doğru bir şekilde uygulanması, projeksiyon tipini tanımlamamıza(bir önceki konuda belirttiğimiz gibi) ve hatta aynı sahneyi farklı noktalardan görmek için kamerayı hareket ettirmemize yardımcı olacaktır.

Şimdi basit bir translation yaparak dönüşüm matrislerinin kullanımına bir göz atalım ve sonra bu operasyonu daha kompleks işlemler için dallandıralım. Bir üçgeni y ekseni boyunca yukarıya doğru hareket ettirmek istediğimizi farz edelim. Şekil 1'i inceleyin.

&lt;a href="http://1.bp.blogspot.com/_fAqb9I3wJqQ/SATwfeTJlII/AAAAAAAAAGk/8-h094w3ekc/s1600-h/4.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_fAqb9I3wJqQ/SATwfeTJlII/AAAAAAAAAGk/8-h094w3ekc/s320/4.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5189537094137648258" /&gt;&lt;/a&gt;

Üçgenimizin aşağıda verilen noktalarla tanımlandığını varsayalım.

&lt;a href="http://2.bp.blogspot.com/_fAqb9I3wJqQ/SATw5uTJlJI/AAAAAAAAAGs/Wlh84-ndI9s/s1600-h/5.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_fAqb9I3wJqQ/SATw5uTJlJI/AAAAAAAAAGs/Wlh84-ndI9s/s320/5.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5189537545109214354" /&gt;&lt;/a&gt;

y ekseni boyunca 40 birim yukarıya hareket ettirmek için ihtiyacımız olan şey, her y pozisyonunu 40 ile toplamak. Bu durumda vertexler için yeni koordinatlarımız aşağıdaki gibi olacaktır.

&lt;a href="http://2.bp.blogspot.com/_fAqb9I3wJqQ/SATxIuTJlKI/AAAAAAAAAG0/UJ_YoUHryH8/s1600-h/6.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_fAqb9I3wJqQ/SATxIuTJlKI/AAAAAAAAAG0/UJ_YoUHryH8/s320/6.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5189537802807252130" /&gt;&lt;/a&gt;

Aynı sonuç, her bir verteksi bir satır ve dört sütundan oluşan bir matris gibi göstererek de alınabilirdi. Bu durumda aşağıdaki gibi üç tane matris elde ederdik:

&lt;a href="http://1.bp.blogspot.com/_fAqb9I3wJqQ/SATxYeTJlLI/AAAAAAAAAG8/B1pqI0UoutY/s1600-h/7.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_fAqb9I3wJqQ/SATxYeTJlLI/AAAAAAAAAG8/B1pqI0UoutY/s320/7.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5189538073390191794" /&gt;&lt;/a&gt;

İlk üç sütun vertex koordinatları, 1 de son sütun değeri olacak şekilde sıralanırdı. Ve bu matris özel bir matrisle çarpılarak, ki bu özel matris de vertex matrisinden translation transformation (çevirim dönüşümü) üretmek için oluşturulmuştur, her bir vertexin yeni koordinatları bulunabilirdi.

&lt;a href="http://2.bp.blogspot.com/_fAqb9I3wJqQ/SATxquTJlMI/AAAAAAAAAHE/_zsB30s3aSo/s1600-h/8.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_fAqb9I3wJqQ/SATxquTJlMI/AAAAAAAAAHE/_zsB30s3aSo/s320/8.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5189538386922804418" /&gt;&lt;/a&gt;

Sonuç matrisini hesaplamak için, ilk matrisin satırındaki her bir değeri almalı ve ikinci matriste karşılık gelen sütundaki her bir değer ile çarpmalıyız. Daha sonra bütün sonuçların toplamını işletmeliyiz. Bu durumda yukarıdaki örneğin hesaplanması aşağıdaki gibi olur:

&lt;a href="http://2.bp.blogspot.com/_fAqb9I3wJqQ/SATx5uTJlNI/AAAAAAAAAHM/BX5wElgYie4/s1600-h/9.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_fAqb9I3wJqQ/SATx5uTJlNI/AAAAAAAAAHM/BX5wElgYie4/s320/9.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5189538644620842194" /&gt;&lt;/a&gt;

Burada fazla detaya girmeden şunu bilmemiz yeterli olacaktır: Transformation(dönüşüm) matrisinin son satırına vereceğimiz değerler, vertex matrisindeki ilgili koordinat değerini(x,y,z) artıracaktır. Ayrıca, dönüşüm matrisindeki 1 değerini değiştirerek scaling(ölçeklendirme, boyutlandırma) yapabiliriz. Bu değerleri diyagonalden kesirliye çevirerek küçültme veya daha büyük değerler vererek objemizi genişletmemiz mümkündür. Veya herhangi bir eksen etrafında şekli döndürmek için sinüs ve kosinüs kombinasyonlarını bu matriste kullanabiliriz.

Şanslıyız ki programımızda dönüşüm kullanmak için bütün bu detaylara kafa yormak zorunda değiliz. Transformation(dönüşüm) yapabilmemiz için bilmemiz gerekenler:

• Dönüşüm matrisleri bilgi kaybetmeden birbirleri ile çarpılabilirler. Bir objeyi aynı anda çevirmek(translate) ve yönlendirmek(rotation) istersek, basit bir şekilde, translation(çevirim) matrisini yönlendirme(rotation) matrisi ile çarparız ve sonucu vertex matris(ler)imiz ile çarptığımızda istenen sonucu elde ederiz.

• Device objesi üç kullanışlı özelliğe sahiptir: 

Birincisi projeksiyon matrisini getirmek için kullanılır:

&lt;Device&gt;.Transform.Projection ‘önceki konuda açıklanmıştır.

İkincisi 3D dünyamızda istediğimiz dönüşümleri göstermek için kullanılır:

&lt;Device&gt;.Transform.World  ‘bu konuda açıklanmıştır.

Ve üçüncüsü de kamera pozisyonunu belirtmek için kullanılır:

&lt;Device&gt;.Transform.View  ‘bu konuda açıklanmıştır.

• D3DX isimli kütüphane bütün dönüşüm(transformation) matrislerini oluşturmak için, matrislerin çarpımları için ve tanımlama(identity) matrisi döndürmek için birtakım fonksiyonlar içerir. (Tanımlama(identity) matrisi, World matrisini güncellemeden önce temizlemek için kullanılan, dönüşmemiş verteksler döndüren özel bir matristir.)

kaynak: Öğretim Görevlisi Murat Güneş
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-2567942821358927658?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/2567942821358927658/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=2567942821358927658' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/2567942821358927658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/2567942821358927658'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/04/managed-directx-blm-5-matrisleri-ve-3d.html' title='Managed Directx Bölüm - 5 Matrisleri ve 3D Dönüşümleri Anlamak'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_fAqb9I3wJqQ/SATwfeTJlII/AAAAAAAAAGk/8-h094w3ekc/s72-c/4.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-6608624819746134539</id><published>2008-04-15T10:54:00.000-07:00</published><updated>2008-04-15T11:02:02.553-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DirectX'/><title type='text'>Managed Directx Bölüm - 4 3D Koordinat Sistemleri ve Projeksiyonlar</title><content type='html'>&lt;pre&gt;
&lt;b&gt;3D Koordinat Sistemleri ve Projeksiyonlar&lt;/b&gt;

Üç boyutlu oyun yazmakla hiçbir ilişkimiz olmasa dahi 3D koordinat sisteminin temel konseptlerini anlamalıyız çünkü Direct 3D'de yaptığımız her şey 3D bir dünya içindeki noktalar ve şekillerle tanımlanmıştır. Elbette z değerini ihmal edebiliriz ve 2D bir dünyada olduğumuzu farz edebiliriz ama sıfır dahi olsa z değeri hala orada duruyor olacak.

Üç kartezyen boyutla çalıştığımız zaman iki tip koordinat sistemi kullanabiliriz: sol-el(left-handed) ve sağ-el(right-handed). Bu isimler, x ve y eksenine göre değişen z eksenini referans alır. bu pozisyonu tanımlamak için, bir elinizin parmaklarıyla x ekseninin pozitif yönüne işaret edin ve y ekseninin pozitif yönüne doğru, saat yönünün tersine hareket ettirin; z ekseni baş parmağınızın işaret ettiği doğrultu olacaktır. Baş parmağınızın işaret ettiği yön ise z ekseninin pozitif bileşenlerine işaret edecektir.

&lt;a href="http://3.bp.blogspot.com/_fAqb9I3wJqQ/SATsc-TJlFI/AAAAAAAAAGM/RtAUgH1-fu4/s1600-h/1.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_fAqb9I3wJqQ/SATsc-TJlFI/AAAAAAAAAGM/RtAUgH1-fu4/s320/1.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5189532653141464146" /&gt;&lt;/a&gt;

Farklı bir açıdan bakacak olursak, sol-el koordinat sisteminde, ekrandan uzaklaştıkça, z değeri pozitif yönde büyüyecektir(x ve y ekseninin ekranda kaldığını varsayarsak). Sağ-el koordinat sistemi de tam tersi şekilde; ekrandan izleyiciye doğru geldikçe z değeri pozitif yönde küçülecektir.

Direct 3D, sol-el koordinat sistemini kullanır, bu da z'nin pozitif değerinin göründüğü anlamına gelir ve negatif değerler görünmez(ta ki biz kamera pozisyonunu değiştirene kadar ki Direct 3D ile bu da mümkün).

3D koordinat sistemlerini anladıktan sonra sıradaki adım; bu sistemlerin 3D objeleri 2D ekranımızda nasıl gösterdiğini anlamaktır.

Şanslıyız ki bütün zor matematiksel işlemler DirectX tarafından yapılmakta ama projeksiyonların konseptini ve ekranda objelerin nasıl görüneceği ile ilgili temel bilgiyi DirectX'e nasıl adapte ettiklerini bilmeliyiz.

Direct 3D iki farklı projeksiyon tipini destekler;

&lt;b&gt;• Perspektif Projeksiyonu:&lt;/b&gt;En yaygın kullanılan projeksiyon tipidir, z farkını hesaplayıp objeleri buna göre ayarlar. Bu projeksiyon tipi, ekrandan uzaklaşan objelerin daha küçük görünmesini sağlar -yani objeler gerçekte olduğu gibi deforme olurlar-. Düz bir yol üzerindeki kesikli şeritlerin ufukta birleşmiş gibi görüneceğini hatırlayın. Şekil 2 perspektif projeksiyonunu grafiksel olarak göstermektedir. 

&lt;a href="http://1.bp.blogspot.com/_fAqb9I3wJqQ/SATs7eTJlGI/AAAAAAAAAGU/pQxVHTtKGww/s1600-h/2.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_fAqb9I3wJqQ/SATs7eTJlGI/AAAAAAAAAGU/pQxVHTtKGww/s320/2.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5189533177127474274" /&gt;&lt;/a&gt;

&lt;b&gt;• Orthogonal Projeksiyon:&lt;/b&gt;Bu projeksiyon tipinde, z bileşeni ihmal edilmiştir ve ekrandan uzaklaştıkça, objeler küçülmez ya da yakınlaştıkça büyümez. Bu projeksiyon genellikle 2D oyunlarda veya basit 3D oyunlarda kullanılır. 

Projeksiyon tipini tanımlarken, koordinat sitemi tipini seçmeli ve projeksiyonun tipine bağlı olarak birtakım parametreleri belirtmeliyiz. Direct 3D altı adet ana fonksiyon sunar(bunlardan dördü özel koordinat sistemleri oluşturmak içindir) ve bu fonksiyonlarla oyunumuz için seçtiğimiz projeksiyonu açıkça belirtmemizi sağlar. Bu fonksiyonlar, Direct 3D tarafından, 3D koordinatlardan ekran koordinatlarına yapılacak dönüşümü hesaplamak için kullanılmak üzere matrisler döndürür.

&lt;b&gt;• Matrix.OrthoRH, Matrix.OrthoLH:&lt;/b&gt;Bir orthogonal projeksiyon tanımlamak için obje koordinatlarına uygulanması gereken dönüşümleri(transformations) içeren bir matris döndürür(RH =&gt;Right-Handed,LH=&gt;Left-Handed). Her iki fonksiyon da, ekranın genişlik ve yükseklik değerini ve gösterilecek olan z ekseni menzilini parametre olarak alır (ilk z değerinden önceki ve son z değerinden sonraki noktalar gösterilmeyecektir). 
&lt;b&gt;• Matrix.PerspectiveRH, Matrix.PerspectiveLH:&lt;/b&gt;Sağ ve sol-el koordinat sistemlerinde, belirtilen ekran genişlik ve yükseklik değerleri ile birlikte z ekseni menzilini(ilk ve son noktalar) parametre olarak alır ve perspektif projeksiyonu için dönüşüm(transformation) matrisi döndürür. 
&lt;b&gt;Matrix.PerspectiveFovRH, Matrix.PerspectiveFovLH:&lt;/b&gt;Sağ ve sol-el koordinat sistemlerinde, Fov'un(Field of view-görüntü alanı) radyan cinsinden açı değerini ve z ekseni menzilini parametre olarak alır ve perspektif projeksiyonu için transformation(dönüşüm) matrisi döndürür. 

&lt;a href="http://2.bp.blogspot.com/_fAqb9I3wJqQ/SATtguTJlHI/AAAAAAAAAGc/4VQqLlh6nK0/s1600-h/3.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_fAqb9I3wJqQ/SATtguTJlHI/AAAAAAAAAGc/4VQqLlh6nK0/s320/3.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5189533817077601394" /&gt;&lt;/a&gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-6608624819746134539?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/6608624819746134539/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=6608624819746134539' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/6608624819746134539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/6608624819746134539'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/04/managed-directx-blm-4-3d-koordinat.html' title='Managed Directx Bölüm - 4 3D Koordinat Sistemleri ve Projeksiyonlar'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_fAqb9I3wJqQ/SATsc-TJlFI/AAAAAAAAAGM/RtAUgH1-fu4/s72-c/1.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-518323652413967168</id><published>2008-04-15T10:50:00.000-07:00</published><updated>2008-04-15T10:52:21.376-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DirectX'/><title type='text'>Managed Directx Bölüm - 3 Mesh ve Texture Yükleme</title><content type='html'>&lt;pre&gt;
&lt;b&gt;Mesh ve Texture Yükleme&lt;/b&gt;

Bir C#.NET/Windows Application açtıktan sonra DirectX, Direct3D ve Direct3DX referanslarını projemize ekliyoruz. Ardından Editörde General Declerations kısmında using anahtar sözcüğü ile “Microsoft.DirectX” ve “Microsoft.DirectX.Direct3D” classlarına erişiyoruz. Öncelikle bir device hazırlamamız gerekiyor. Kodların hepsi aşağıdaki örnekte açıklanmıştır. Ayrıca kodlarda kameraguncelle isimli bir method var ve yön tuşları aracılığıyla kamerayı hareket ettirmenizi sağlayan birtakım matrix işlemlerini denetliyor. Onunla ilgili ayrıntılı bilgiyi de bir sonraki konu başlığında işleyeceğiz. Bu arada bir Class içerisinde bir device tanımlayıp onu farklı methodlarda kullanabilmek için device’ı “new” keywordu ile deklare ettiğimiz methodu, device’ı kullanacağımız diğer methodda handle etmemiz gerekiyor(Add Handler ile) tabi bu bir yöntem ve bu iş için başka yöntemler de var. Yazdığım örnek uygulamada bu yöntemi kullandım. 
Son olarak mesh ve texture yüklemek için;

Mesh mesh;
Texture texture;
mesh = mesh.FromFile("dosya.x", MeshFlags.SystemMemory, d3ddevice, materials);
texture = TextureLoader.FromFile(d3ddevice, "dosya.bmp");

Kaynak: Öğretim Görevlisi Murat Güneş
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-518323652413967168?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/518323652413967168/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=518323652413967168' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/518323652413967168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/518323652413967168'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/04/managed-directx-blm-3-mesh-ve-texture.html' title='Managed Directx Bölüm - 3 Mesh ve Texture Yükleme'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-4339132865382917529</id><published>2008-04-15T06:35:00.000-07:00</published><updated>2008-04-15T06:49:48.354-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DirectX'/><title type='text'>Managed Directx Bölüm - 2</title><content type='html'>&lt;pre&gt;
Bu bölümde Direct3D üzerine yoğunlaşacağız. Ve Direct3DX'in bazı yardımcı fonksiyonlarını göreceğiz.

&lt;b&gt;Adapters&lt;/b&gt;

DirectX'te, sistemimizde kullandığımız adaptör ya da birden fazla ise adaptörler(örneğin ekstradan bir 3D Accelerator kartımız varsa) hakkında bilgi veren birtakım fonksiyonlar var. Hemen şunu da belirtelim managed DirectX ile unmanaged kullanım arasındaki en temel fark; .NET öncesi programlama dillerinde DirectX kullanmaya kalktığımızda yapmamız gereken ilk iş "DirectXn"(n=DirectX sürümü) tipinde bir master obje tanımlayıp diğer bileşenleri, vs. bundan türetmemiz gerekiyordu. Managed kullanımda ise yukarıda da belirttiğimiz alt nesneleri direkt olarak türetebiliyoruz. Her neyse... DirectX'te adaptörümüz hakkında bilgi edinmemizi sağlayan hazır bir fonksiyon var adı da "AdapterDetail". Kullanımı aşağıdaki gibi;

AdapterDetail adaptor_bilgisi;
int i;

For(int i = 0;i&lt; Manager.Adapters.Count – 1,i++)
 {
 adaptor_bilgisi = Manager.Adapters(i).Information
 MessageBox.Show (adaptor_bilgisi.Description)
 }

Yukarıdaki kodda adaptörler hakkında bilgiyi getiren fonksiyonun yanında bir de Manager isimli, Direct3D ile ilgili temel işlemleri yerine getiren bir obje var.

&lt;b&gt;Device&lt;/b&gt;

DirectX'in sunduğu özel bir nesne tipi "Device" 3D hızlandırıcı katmana erişmemizi sağlar. Her bir adaptör için üç Device tipinden birini seçmeliyiz. Bunlar;

&lt;b&gt;- Hardware(Hardware Abstraction Layer):&lt;/b&gt;HAL(Donanım Soyutlama Katmanı) device türettiğimizde direkt donanım özelliklerine ve dolayısıyla da yüksek bir hıza erişiriz. Bu tip bir aygıtı türetirken sistemimizde 3D hızlandırıcı kartımız yoksa(ki yeni ekran kartlarının hepsi bu özellikte) DirectX hata verecektir.

&lt;b&gt;- Reference(Reference Resterizer):&lt;/b&gt;Bu tip bir device türettiğimizde her şey software tarafından yapılacak ve türettiğimiz device donanım bağımsız olacaktır. Ancak bu tip bir Device ile oyun yazmayı aklınızdan bile geçirmeyin çünkü inanılmaz yavaş olacaktır( işlem hızı yaklaşık 1-5 fps arasında).

Device classından bir instance aldığımızda classın Constructor'ına girmemiz gereken parametreler sırasıyla aşağıdaki gibidir;

&lt;b&gt;- Adapter:&lt;/b&gt;Burada Default adaptörümüzü kullanacağımızı belirtmek için Manager objesini kullanacağız.
&lt;b&gt;- DeiceType:&lt;/b&gt;Amacımız bir oyun yazmaksa tabii ki Hardware seçilecek.
&lt;b&gt;- WinHandle:&lt;/b&gt;Aygıtın sunum yapacağı pencerenin Handle'ı(Intptr.)
&lt;b&gt;- Create Flags:&lt;/b&gt;Bir enumeration'dır. Seçilebilecek Flaglar aşağıdaki gibidir;
   &lt;b&gt;-SoftwareVertexProcessing:&lt;/b&gt;En ideal seçenek, DirectX'e bütün vertex hesaplamalarının Software tarafından yapılacağını bildirir. Bu seçenek en yavaş çalışan seçenektir ama her durumda kullanılabilir.
   &lt;b&gt;-HardwareVertexProcessing:&lt;/b&gt;Bu seçenek DirectX'in yazılım katmanında kullanılan Shading(gölgeleme) ve Lighting(ışıklandırma) işlemleri hariç tüm vertex işlemleri için donanımı kullanmasını sağlar. 
   &lt;b&gt;-MixedVertexProcessing:&lt;/b&gt;İsminden de anlaşılacağı üzere en iyi performans için iki prosesin karışımını kullanır.
&lt;b&gt;- PresentationParameters:&lt;/b&gt;Adından da anlaşılacağı gibi programcının device’ın sunumu için kullanabileceği birtakım ince ayarlar sunar. Sunduğu özellikler aşağıda açıklanmıştır;

&lt;b&gt;- EnableAutoDepthStencil:&lt;/b&gt;Depth Buffer tabir edilen derinlik tamponu, Direct3D tarafından kullanılmak üzere derinlik bilgilerini saklayan bir Device özelliğidir. Bu konunun kavranması için derinlik algısı örneği geldi aklıma. Tek gözünüzü kapattığınızda, bakış açınıza göre, x ve y eksenleri aynı, z eksenleri farklı olan iki noktadan hangisinin size daha yakın olduğunu ayırt edemezsiniz. İşte size depth buffer’in yaptığı iş. Render edilen yüzeye yakın olan cisimler ile uzak olan cisimlerin ayırt edilebilmesi için gerekli z ekseni(derinlik) bilgilerini tutar. EnableAutoDepthStencil ise True ya da False değerlerini alır.
&lt;b&gt;- AutoDepthStencilFormat:&lt;/b&gt;Depth Buffer’da kullanılan format. Bu format değeri geçerli bir depth buffer formatına setlenmelidir. Mesela “DepthFormat.D16” 16
bitlik bir depth buffer belirtir.
&lt;b&gt;- BackBufferCount:&lt;/b&gt;1 ile 3 arasında değişen Back Bufferların numarası.
- BackBufferFormat: Format enumeration’u ile belirtilmiş her bir buffer’in formatı. Örneğimizde mevcut görüntü formatını kullanıyoruz. Burada girilen format stencil’de olduğu gibi geçerli bir format olmalıdır. Direct3D’nin CheckDeviceType methodu ile geçerli formatlar kontrol edilebilir. Windowed modda çalışılacaksa bu değere Unknown setlenerek mevcut görüntü ayarlarıyla çalışılabilir.
&lt;b&gt;- BackBufferWidth ve Height:&lt;/b&gt;BackBuffer’in pixel cinsinden genişliği ve yüksekliği. Eğer windowed modda çalışılmıyorsa, bu değerler, CheckDeviceType methodu ile alınan görüntü formatlarından birisine uymalıdır.
&lt;b&gt;- SwapEffect:&lt;/b&gt;Oyunun render edilme aşamasında back buffer’dan ekrana gönderilen her bir karenin(front buffer) oluşturduğu bir akış söz konusudur. Render methodumuz çağırıldığında ekrandaki görüntü bir önceki ile değiştirilir(swap). İşte bu değişim esnasında kullanılan SwapEffectleri; Dicard, Flip ve Copy efektleridir. Bunlar sırasıyla aşağıda açıklanmıştır;

&lt;b&gt;o Discard:&lt;/b&gt;Bu efekt titpinde değiştirme işlemi(swap)  sırasında back buffer’ın içeriği korunmaz. Bu yüzden her kare (frame) için içerik yenilenmelidir.
&lt;b&gt;o Flip:&lt;/b&gt;Bu efektte bufferların ekrana aktarılması swap chain denilen bir değiştirme zinciri ile yapılır. Front bufferları(ekran) içeren döngüsel bir sıra gibi düşünülebilir. Bu sıra içerisinde back bufferlar sıfırdan n-1’e kadar numaralanırlar(n = back buffer sayısı). Bu sıralamada 0 numaralı back buffer en son gösterilendir. Döngü devam ederken front buffer(n-1) back buffer, back buffer(0) da front buffera dönüşür ve bu şekilde devam eder.
&lt;b&gt;o Copy:&lt;/b&gt;Bu efektte ise back buffer’ın içeriği korunur. Back buffer’ın içeriği front buffer’ın üzerine kopyalanır.

&lt;b&gt;- Windowed:&lt;/b&gt;True değerini aldığında pencere, false değerini aldığında da tam ekran modunda çalışılacağını belirtir. Pencere modunda çalışıldığında back buffer formatı arka plan çözünürlüğü ile aynı olmalıdır. Ben bunun için aşağıdaki yöntemi kullanıyorum;

gmodu = Manager.Adapters [Manager.Adapters.Default.Adapter].CurrentDisplayMode;
PresentParameters d3dpp = New PresentParameters();
d3dpp.BackBufferFormat = gmodu.Format;

Pencere modunda çalışırken BackBufferWidth ve Height parametreleri verilmek    zorunda değildir. Tam ekran modunda ise width ve height parametreleri kullanılabilir bir ekran çözünürlüğü ile örtüşmelidir.
&lt;b&gt;- DeviceWindowHandle:&lt;/b&gt;DirectX tarafından kullanılacak pencerenin handle’ı(Intptr).

Yukarıdaki hikaye kısmını anlattığımıza göre asıl işimize, yani .X dosyalarımızın ve texturelerimizin yuklenmesine gelelim. Burada amacım device, presentation parameters gibi bileşenleri ayarladıktan sonra .X dosyasını yüklemenin ne kadar kolay olduğunu göstermek. Bu amaçla directX’te kullanılan iki nesneden bahsedeceğim; “mesh” ve “texture”. 

&lt;b&gt;“mesh” ve “texture” nedir, nasıl kullanılır?&lt;/b&gt;

Mesh, DirectX’te ingilizcedeki anlamına yakın bir anlamda kullanılıyor. 3D animasyon yapanlar bilirler ki, yapılan çizimler ikiye ayrılır; katı modeller ve sadece yüzeylerden oluşan meshler. İşte kullanacağımız 3D modellerimiz bu, sadece yüzeylerden oluşan meshler yani .X dosyaları. Texture ise bu yüzeylere kaplanacak bitmap dosyaları.

Kaynak: Öğretim Görevlisi Murat Güneş
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-4339132865382917529?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/4339132865382917529/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=4339132865382917529' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/4339132865382917529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/4339132865382917529'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/04/managed-directx-blm-2.html' title='Managed Directx Bölüm - 2'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-8012325628608185648</id><published>2008-04-15T06:27:00.000-07:00</published><updated>2008-04-15T06:34:07.833-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DirectX'/><title type='text'>Managed Directx Bölüm - 1</title><content type='html'>&lt;pre&gt;
&lt;b&gt;DirectX SDK&lt;/b&gt;

DirectX bilindiği üzere, Microsoft tarafından oyun geliştiricilerin hizmetine sunulmuş ileri düzey bir grafik API’sidir(Application Programming Interface). Bu API tamamen ücretsizdir ve Microsoft’un sitesinden indirilebilir. Piyasada  kullanılan tek API DirectX değildir tabii ki. Onun en büyük rakibi yine ücretsiz olarak dağıtılan ve açık kodlu bir API olan OpenGL’dir (Open Graphics Language). OpenGL Silicon Graphics firmasının geliştirdiği bir API’dir. OpenGL ile yazılan oyunlara en güzel örnek olarak Quake serisi verilebilir.

DirectX iki farklı şekilde kullanılabilir. Birinci kullanım, DirectX ile yazılmış bir oyunu oynayabilmek için makineye DirectX Runtime(Debug veya Retail seçenekleri ile) kurulmasıdır. İkinci kullanım ise, ki bizi ilgilendiren kısım da budur zaten, Oyun geliştirirken DirectX API’sinden yararlanabilmek için DirectX SDK’nın makineye kurulmasıdır. DirectX 9.0 sürümü ile birlikte .NET ile kullanımının kolaylaşması için Managed Code sistemine geçti. Yani DirectX SDK’yı makinenize kurduktan sonra .NET içerisinden dll’leri(DirectX, Direct3D, Direct3DX vs.) projenize referans olarak göstermeniz yeterli.

İşe ilk olarak DirectX’in bileşenlerini tanıtmakla başlayalım.

&lt;b&gt;Direct X Bileşenleri&lt;/b&gt;

&lt;b&gt;-Direct3D(D3D):&lt;/b&gt;3D hızlandırıcı katmanına erişmek için kullanılır.
&lt;b&gt;-Direct3DX(D3DX):&lt;/b&gt;Direct3D Extensions, Matrix Multiplications(matrix çarpımları) gibi kod yazma işlemini kolaylaştıran birtakım yardımcı fonksiyonlar sunar.
&lt;b&gt;-DirectDraw:&lt;/b&gt;Aslında DirectDraw şu anda kullanılmayan bir teknoloji fakat eski oyunların da yeni DirectX sürümleriyle çalışabilmesi için hala barındırılıyor ve yenileştirme içermiyor. 2D oyunların geliştirilmesinde kullanılıyor.
&lt;b&gt;-Direct Input:&lt;/b&gt;Input aygıtlarını denetlemede kullanılan bir directX bileşeni, Force Feedback özellikli joystickleri de destekliyor.
&lt;b&gt;-DirectPlay:&lt;/b&gt;MultiPlayer oyunlar geliştirmek için kullanılıyor. Bilgisayarlar arasında hızlı ve güvenilir data transferi sağlıyor. Bilgisayarlar arası bağlantı P to P(Peer To Peer) olabileceği gibi Client Server mimarisi ile de yapılabiliyor. İşlem temeli TCP soketlerine dayanıyor.
&lt;b&gt;-DirectAudio:&lt;/b&gt;Eski sürümlerinden gelen DirectMusic ve DirectSound isimli iki interface’i var. Aslında DirectAudio yeni bir arayüz değil sadece bu iki arayüzün birlikte kullanımını sağlıyor. Bununla beraber DirectX9.0’ın Managed kullanımı (.NET ile kullanımı) sadece DirectAudio'yu sunuyor.
&lt;b&gt;-DirectShow:&lt;/b&gt;Ses ve videoları yakalama ve oynatma için kullanılan bir DirectX bileşeni. Ancak managed kullanımda sadece belli başlı özelliklerine erişebiliyoruz. Daha fazla detaya girebilmek için directX’i unmanaged kullanmalıyız.
&lt;b&gt;-DirectSetup:&lt;/b&gt;DirectX içeren uygulamalarımızı paketlerken yardımcı olan bir bileşen.

Kaynak : Öğretim Görevlisi Murat Güneş

&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-8012325628608185648?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/8012325628608185648/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=8012325628608185648' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/8012325628608185648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/8012325628608185648'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/04/managed-directx-blm-1.html' title='Managed Directx Bölüm - 1'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-1590491571971309260</id><published>2008-03-25T06:48:00.000-07:00</published><updated>2008-03-25T06:54:49.987-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNA'/><title type='text'>Xna da Mesh Yükleme</title><content type='html'>&lt;pre&gt;
&lt;img style="display:block; border:0px; margin:0px auto 10px; text-align:center;cursor:pointer;" src="http://1.bp.blogspot.com/_fAqb9I3wJqQ/R-kDV07O-oI/AAAAAAAAAGE/drhxHQfL3ig/s320/logo.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5181676519785691778" /&gt;&lt;br&gt;
XNA da ilk adımlar...

Mesh (3 Boyutlu nesne) xna ortamına nasıl eklenir, ekranda nasıl gösterilir, transformasyon işlemleri nasıl yapılır ?

Aşağıdaki linkte bu soruların cevaplarını bulabilirsiniz.

&lt;a href="http://www.directxnedir.com/xna_mesh_yukleme.aspx"&gt;www.directxnedir.com&lt;/a&gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-1590491571971309260?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/1590491571971309260/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=1590491571971309260' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/1590491571971309260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/1590491571971309260'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/03/xna-da-mesh-ykleme.html' title='Xna da Mesh Yükleme'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_fAqb9I3wJqQ/R-kDV07O-oI/AAAAAAAAAGE/drhxHQfL3ig/s72-c/logo.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-797475972295699687</id><published>2008-03-02T14:37:00.000-08:00</published><updated>2008-03-02T14:46:55.895-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3D Studio Max'/><title type='text'>3ds max ' ta patlama sahnesi</title><content type='html'>&lt;pre&gt;ALINTIDIR!!!&lt;br&gt;
Not : ofisimde 3Dmax 3.1 var onunla yaptım. menülerde farklılıklar olabilir...
3dmaxte patlama sahnesi anlatmaya çalışacağım arkadaşlar...sahneye küre ekledim..tercih sizin.. 
Particles menüsünden "PArray Particle System" seçin..sahneye ekleyin. sonra sağ taraftan "pick object" 
seçip patlatmak istediğiniz objeyi seçin..

&lt;img src="http://img32.imageshack.us/img32/9577/12hk.jpg"&gt;&lt;br&gt;
&lt;img src="http://img227.imageshack.us/img227/7180/23eu.jpg"&gt;&lt;br&gt;
&lt;img src="http://img242.imageshack.us/img242/8289/30oi1.jpg"&gt;&lt;br&gt;

ayarlarını yapıyorum... "Viewport display" menüsünde "mesh" seçili olmalı böylece nesnemiz kendi 
parçalarına ayrılacaktır..yani noktalara ayrılmayacak...Particle Timing menüsünde "Emit Start" yazan yer patlamanın başlayacağı yeri gösterir. "Emit Stop" ise bitişini.. "Life" parçacıkların ekranda ne kadar süre kalacağını gösterir. Ben ayarlarımı şekildeki gibi yaptım. 10.frame de patlama başlicak...

&lt;img src="http://img72.imageshack.us/img72/1692/50zs.jpg"&gt;&lt;br&gt;
&lt;img src="http://img149.imageshack.us/img149/2305/63sj.jpg"&gt;&lt;br&gt;
Partical type menüsünden Object fragment seçtim ki nesne kendi parçalarına ayrılsın yani noktacıklar atmasın...

&lt;img src="http://img149.imageshack.us/img149/6672/74en.jpg"&gt;&lt;br&gt;
Object Fragment Controls menüsünde Thickness (Kalınlık) değerini biraz artırdım. Number of chunks işaretleyerek kendim bir değer girdim daha inandırıcı bir patlama olması için. parçalar daha da azaldı...Picked emitter altında get material from işaretledim. parçalar objeyle aynı dokuyu aldı...

&lt;img src="http://img149.imageshack.us/img149/5448/98yr.jpg"&gt;&lt;br&gt;
&lt;img src="http://img149.imageshack.us/img149/5269/101re1.jpg"&gt;&lt;br&gt;
&lt;img src="http://img149.imageshack.us/img149/7988/118oo2.jpg"&gt;&lt;br&gt;
şimdi geldik patlayan nesneyi patlamanın gerçekleştiği frame den sonra görünmez yapmaya...buraya kadar geldiyseniz farketmişsinizdir ki patlamanın olduğu 10. frameden sonra asıl nesne "Shape 1" hala ekranda... 0. frame e gelin "animate" butonunu tıklayın ve zaman cursorunu 10. frame kadar getirin.. sonra (animate butonu hala basılı) yapmamız gereken nesnemizin özelliklerine girerek görünmez yapmak. şu anda obje ile "parray obje" üst üste olduğu için seçmekte zorluk yaşayabilirsiniz. bu yüzden "select by name" tool ile nesneyi seçebilirsiniz. özelliklere girdikten sonra "visibility" değerini "0" yapın. okleyin ve animate butonunu kapatın. bu frameden sonra nesnemiz görünmeyecek...

&lt;img src="http://img149.imageshack.us/img149/4584/124hb.jpg"&gt;&lt;br&gt;
&lt;img src="http://img149.imageshack.us/img149/5721/133kj.jpg"&gt;&lt;br&gt;
işimiz henüz bitmedi...10.frameden sonra nesnemiz görünmeyecek ama şu an ilk framede de görünmüyor. bu yüzden az önce animate butonunu kullanarak oluşturuğumuz iki anahtar kareye müdahale edeceğiz. 0.framede oluşan keyframe sağ tıklayıp "Sphare 1 visibility" e tıklıyoruz ve şekildeki gibi değişikliği yapıyoruz. artık tamam. patlamamızı gerçekleştirdik.

&lt;img src="http://img149.imageshack.us/img149/840/143sy.jpg"&gt;&lt;br&gt;
&lt;img src="http://img149.imageshack.us/img149/7149/159aj.jpg"&gt;&lt;br&gt;
&lt;img src="http://img149.imageshack.us/img149/8048/166un.jpg"&gt;&lt;br&gt;
&lt;img src="http://img149.imageshack.us/img149/8425/179jc.jpg"&gt;&lt;br&gt;
şimdide sahnemize patlama efekti ekleyeceğiz. bunun için sahneye "sphere gizmo" ekledim ilk olarak patlayan objenin tam üstüne gelecek şekilde..rendering menüsünün altında "environments" işaretledim. açılan menüden add yazan yere tıklayarak "combustion" seçtim. "pick gizmo" yazan yere tıklayıp sahnedeki sphere gizmoyu seçtim. daha sonra environments menüsünün altındaki "explosion" yazan yeri işaretledim. karşınıza gelen kutucuk patlamanın hangi frame de başlayacağıdır. ben 12 seçtim..10.framede nesne patlamaya başlayacak 12. frameden itibaren ise alev başlayacak...en alttaki resimde render yaparken aldığım bi görüntü mevcut..seçenekleri değiştirerek farklı etkiler alabilirsiniz. kolay gelsin...

&lt;img src="http://img149.imageshack.us/img149/1583/188ij.jpg"&gt;&lt;br&gt;
&lt;img src="http://img149.imageshack.us/img149/6070/190ga.jpg"&gt;&lt;br&gt;
&lt;img src="http://img149.imageshack.us/img149/6523/208lp.jpg"&gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-797475972295699687?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/797475972295699687/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=797475972295699687' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/797475972295699687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/797475972295699687'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/03/3d-maxte-patlama-sahnesi.html' title='3ds max &apos; ta patlama sahnesi'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-4457984843162113620</id><published>2008-03-01T13:21:00.000-08:00</published><updated>2008-03-01T13:29:38.715-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hazır Araçlar'/><title type='text'>CRYSIS de MOD yapmak ...</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_fAqb9I3wJqQ/R8nKpcuTXuI/AAAAAAAAAF8/BP3dGRlDqKM/s1600-h/logo.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_fAqb9I3wJqQ/R8nKpcuTXuI/AAAAAAAAAF8/BP3dGRlDqKM/s320/logo.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5172888460445572834" /&gt;&lt;/a&gt;
&lt;pre&gt;
Artık sizde kısmen de olsa bir oyun tasarımcısı olabilirsiniz. :)
Yani bununla mümkün olmasada fikir kazanmış olursunuz :)

Crysis de ek mod yapın sizin tasarladığınız bölümler de oynansın ...
Oyun geliştirici olmak istiyorsanız böyle olanakları takip etmekte fayda var.
Mesela ben size mod yapımı için sunulan araçların oyunun yapımından önce kendilerine kolaylık sağlaması açısından oyun ekibi tarafından geliştirilip kullanıldığına inanıyorum.. Neyse fazla söze gerek yok &lt;b&gt;SDK Paketini ve yeterli dökümanı bu siteden edinebilirsiniz&lt;/b&gt;. &lt;a href="http://www.crymod.com/board.php?boardid=88"&gt;http://www.crymod.com&lt;/a&gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-4457984843162113620?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/4457984843162113620/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=4457984843162113620' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/4457984843162113620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/4457984843162113620'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/03/crysis-de-mod-yapmak.html' title='CRYSIS de MOD yapmak ...'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_fAqb9I3wJqQ/R8nKpcuTXuI/AAAAAAAAAF8/BP3dGRlDqKM/s72-c/logo.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-8985502804061092539</id><published>2008-03-01T13:13:00.000-08:00</published><updated>2008-03-01T13:17:30.399-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hazır Araçlar'/><title type='text'>Bir kaç hazır Game Editor ...</title><content type='html'>&lt;br&gt;
Crysis Game Play AMAZING GRAFICS &lt;br&gt;
&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/oaQ256lZ0ew"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/oaQ256lZ0ew" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;br&gt;
Bu editörün 2d ve 3d seçenekleri var...
&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/NXPR6PkaPuc"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/NXPR6PkaPuc" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br&gt;
Bu editör de 2d oyunlar için&lt;br&gt;&lt;br&gt;
&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/XQ64cNJui04"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/XQ64cNJui04" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-8985502804061092539?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/8985502804061092539/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=8985502804061092539' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/8985502804061092539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/8985502804061092539'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/03/bir-ka-hazr-game-editor.html' title='Bir kaç hazır Game Editor ...'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-5555723008277166812</id><published>2008-02-29T03:30:00.000-08:00</published><updated>2008-02-29T03:52:54.002-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sektör Haberleri'/><category scheme='http://www.blogger.com/atom/ns#' term='Oyun Haberleri'/><title type='text'>Türk Oyun Projeleri - Hükümran Senfoni</title><content type='html'>Hükümran Senfoni Oyun ekibi ve firma sahibi ile yapılan röportajlar...&lt;br&gt;&lt;br&gt;
&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/oK6TXgaSRKY"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/oK6TXgaSRKY" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br&gt;
&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/e2rOhVwVq98"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/e2rOhVwVq98" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br&gt;
&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Wrr0IEWHDZY"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Wrr0IEWHDZY" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br&gt;
Oyun Firmasının sitesi: http://www.ceidot.com/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-5555723008277166812?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/5555723008277166812/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=5555723008277166812' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/5555723008277166812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/5555723008277166812'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/02/trk-oyun-projeleri-hkmran-senfoni.html' title='Türk Oyun Projeleri - Hükümran Senfoni'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-7235871378277015586</id><published>2008-02-28T14:00:00.000-08:00</published><updated>2008-02-28T14:01:54.869-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual C#'/><category scheme='http://www.blogger.com/atom/ns#' term='DirectX'/><title type='text'>Managed Directx de Create Device (Sürücüyü hazırlamak)</title><content type='html'>&lt;textarea cols=70 rows=25&gt;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;

namespace Deneme
{
    public partial class Form1 : Form
    {
        Device device = null;

        public Form1()
        {
            this.Text="Directx Create Device";
        }

        public bool InitializeGraphics()
        {
            try
            {
                PresentParameters prs = new PresentParameters();
                prs.Windowed = true;
                prs.SwapEffect = SwapEffect.Discard;

                device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing,
                    prs);
                return true;
            }
            catch (DirectXException ex)
            {
                return false;
            }
        }

        private void Render()
        {
            if (device == null) return;

            device.Clear(ClearFlags.Target, Color.Blue, 1.0f, 0);

            device.BeginScene();

            device.EndScene();
            device.Present();
        }

        static void Main()
        {
            using (Form1 f1 = new Form1())
            {
                if (!f1.InitializeGraphics())
                {
                    MessageBox.Show("Hata Oluştu!");
                    return;
                }
                f1.Show();

                while (f1.Created)
                {
                    f1.Render();
                    Application.DoEvents();
                }
            }
        }
    }
}
&lt;/textarea&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-7235871378277015586?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/7235871378277015586/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=7235871378277015586' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/7235871378277015586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/7235871378277015586'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/02/managed-directx-de-create-device-srcy.html' title='Managed Directx de Create Device (Sürücüyü hazırlamak)'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-896734537803066873</id><published>2008-02-28T02:22:00.000-08:00</published><updated>2008-02-28T02:42:53.902-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNA'/><title type='text'>XNA Örnek Projeleri</title><content type='html'>&lt;b&gt;&lt;i&gt;Xna Console Uygulaması&lt;/i&gt;&lt;/b&gt;&lt;br&gt;
&lt;img src="http://www.ziggyware.com/ZiggywareImages/Console/console.png" align=center&gt;
&lt;br&gt;
&lt;a href="http://www.ziggyware.com/ZiggywareImages/Console/console.zip" target=_blank&gt;
DOWNLOAD-İNDİR&lt;/a&gt;&lt;br&gt;&lt;br&gt;

&lt;b&gt;&lt;i&gt;Path Finding in 2D&lt;/i&gt;&lt;/b&gt;&lt;br&gt;
&lt;img src="http://www.ziggyware.com/ziggywareimages/pathfinding/pathfinding2d.png" align=center&gt;
&lt;br&gt;
&lt;a href="http://www.ziggyware.com/ziggywareimages/pathfinding/pathfinding2d.zip" target=_blank&gt;
DOWNLOAD-İNDİR&lt;/a&gt;&lt;br&gt;&lt;br&gt;


&lt;b&gt;&lt;i&gt;Model Based Collision Detection&lt;/i&gt;&lt;/b&gt;&lt;br&gt;
&lt;img src="http://www.ziggyware.com/ziggywareimages/modelcollision/image001.png" align=center&gt;
&lt;br&gt;
&lt;a href="http://www.ziggyware.com/readarticle.php?article_id=156" target=_blank&gt;
KAYNAK KODLARI&lt;/a&gt;&lt;br&gt;&lt;br&gt;


&lt;b&gt;&lt;i&gt;Deformable Levels&lt;/i&gt;&lt;/b&gt;&lt;br&gt;
&lt;img src="http://www.ziggyware.com/ziggywareimages/deform/deform10.png" align=center&gt;
&lt;br&gt;
&lt;a href="http://www.ziggyware.com/readarticle.php?article_id=154" target=_blank&gt;
KAYNAK KODLARI&lt;/a&gt;&lt;br&gt;&lt;br&gt;

&lt;b&gt;&lt;i&gt;KEŞKE BU SİTE TÜRKÇE OLSAYDI www.ziggyware.com/&lt;/i&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-896734537803066873?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/896734537803066873/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=896734537803066873' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/896734537803066873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/896734537803066873'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/02/xna-rnek-projeleri.html' title='XNA Örnek Projeleri'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-5092885365169632943</id><published>2008-02-28T02:16:00.000-08:00</published><updated>2008-02-28T02:20:53.101-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XNA'/><title type='text'>Microsoft XNA Game Studio Express 1.0 Refresh</title><content type='html'>&lt;pre&gt;
XBOX ve Windows ta Oyun geliştirmek için Microsoft firmasının acemi programcılara sunduğu güzel bir olanak... 

Fakat ben C++ ve DirectX ikilisini XNA dan daha performanslı buluyorum, XNA nın avantajı ise kolaylık sağlaması, yani biyerden başlamak lazım...

XNA yı indirdikten sonra şunlarda lazım olacak;

&gt;Visual Studio 2005 veya Express Edition
&gt;Net Framework 2.0

&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=12ADCD12-7A7B-4413-A0AF-FF87242A78DE&amp;displaylang=en" target=_blank&gt;DOWNLOAD İÇİN TIKLAYIN&lt;/a&gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-5092885365169632943?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/5092885365169632943/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=5092885365169632943' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/5092885365169632943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/5092885365169632943'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/02/microsoft-xna-game-studio-express-10.html' title='Microsoft XNA Game Studio Express 1.0 Refresh'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-387027432382580749</id><published>2008-02-28T01:52:00.000-08:00</published><updated>2008-02-28T02:05:08.308-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphix'/><title type='text'>Delphix Oyun Örnekleri - 1 (ingilizce)</title><content type='html'>&lt;pre&gt;
Bu Döküman malesef ingilizce ama Delphi bilen arkadaşlar anlamakta zorlanmayacaktır..

Hello again! It has been a while but now I'm back! The last time we looked at how to create the isometrically tiled world. This time we will look at how to determine the position of the cursor and units. We will also go through basic animation of tiles. For this purpose a new set of graphics have been produced. You can get the whole package with source, graphics and the new converter at CodeCentral. If you don't have the source from my old article then you can download it here. This source is needed since we will be building on it this article. Ok, enough about that! Let's get to the topic.

&lt;b&gt;&lt;i&gt;THEORETICAL OVERVIEW&lt;/i&gt;&lt;/b&gt;
&lt;b&gt;ANIMATION&lt;/b&gt;
Animating an image in DelphiX is a really simple task. The images supplied for this article have a little different look than the old ones. First of all I've expanded the number of tiles to 16. This makes the world more diverse, which is probably needed since the old ones were quite boring. Well anyway, three of these tiles are animated. If you open the bitmaps you will notice that the frames are placed side by side. Like this:

&lt;img src="http://dn.codegear.com/article/images/26642/DeepWaterAnim.jpg"&gt;&lt;/img&gt;

Of course it doesn't have the red borders and the numbers. When you load the bitmap into the DXImageList component, there are two properties called PatternHeight and PatternWidth. These are set to the height and width of a single frame. We can now, with the Pattern Number part of the Draw Method, decide which frame to show The first frame is number 0, the second frame number 1, and so on. By changing a variable every time the map is redrawn, we can get the frames to be shown one after the other and thus get an animated tile. Like this:

&lt;img src="http://dn.codegear.com/article/images/26642/TileAnim.gif"&gt;&lt;/img&gt;

That is the basics of animation! Of course it gets more complicated when you animate units since they have different animations for different actions. But this is really all there is to it!

&lt;b&gt;WORLD POSITIONING&lt;/b&gt;
Now this is the tricky part. On a screen the coordinate system is quite easy, it looks like this:
&lt;img src="http://dn.codegear.com/article/images/26642/NormCoordinate.jpg"&gt;

But this coordinate system doesn't work very well with the isometric tile. By rotating and skewing the coordinate system we get a more suitable coordinate system. Like this: 

&lt;img src="http://dn.codegear.com/article/images/26642/IsoCoordinate.jpg"&gt;
In Delphi all positions are given according to the screen coordinate system. But the tiles use the isometric coordinate system or the world coordinate system which is the one in the second image. The hard part is converting between these two coordinate systems.

This is where those math classes you took come in handy. Finally, functions are really useful. (And, I don't mean functions as in programming.) A row of tiles is placed along, or follows, the function f(X)=0.46875X or f(X)=0.46875X depending on which axis. (Why all the decimals? Remember in the last article we used the tile height of 30, which divided by 64 is 0.46875. If we use 0.5 instead, which doesn't seem to be too much different, we will get a slight deviation in the positioning system. The cursor will start selecting tiles beside it, in some cases as many as three tiles in the wrong direction.) The X in these function refers to the screen coordinate system. These two functions look like this:

&lt;img src="http://dn.codegear.com/article/images/26642/ShadedFunctions.jpg"&gt;

The shaded area is a value above and below the function that the tile is within. Where two shaded areas cross each other we have the shape of a tile. What we have to do in order to figure out which tile the cursor is in is to determine when the tile is inside the shaded area. So, if the Y value of the cursor is between -0.46875X+14 and -0.46875X-14 then the cursor is on the same WorldY as the tile. If the Y value is between 0.46875X+14 and 0.46875X-14 then the cursor is on the same WorldX as the tile. If both these happen at the same time then the cursor is on the tile (where the shaded areas cross). This is just for one tile. What about 100x100 tiles? This picture might give you an idea of how to solve this. 

&lt;img src="http://dn.codegear.com/article/images/26642/ShadedFunctions2.jpg"&gt;

First of all, every row is offset one tile height (30 pixels) from the one above. So, what we do is enumerate through all WorldX rows until we strike the right one. Then we take the number of that row and place it in the TileX Integer. Next, we enumerate through all the WorldY rows and place the right number in the TileY Integer. Finally, we return the two values to the main program. Now, the main program can use these values to get tile info, draw the marker, etc. Ok? Let's implement it in our tiling engine.

&lt;b&gt;&lt;i&gt;PRACTICAL IMPLEMENTATION&lt;/i&gt;&lt;/b&gt;
&lt;b&gt;ANIMATION&lt;/b&gt;
First of all, delete all the old images from the image list and add the new ones. Do not add "Marker.bmp" at this point. For each image change these properties:

&lt;textarea cols=70 rows=4&gt;
PatternHeight = 32
PatternWidth = 64
&lt;/textarea&gt;

Place a new DXImageList on your form and call it Markers. Add "Marker.bmp" to this list. Then put this in the global declarations:

&lt;textarea cols=70 rows=2&gt;
Frame: Integer;
TileX, TileY: Integer;
&lt;/textarea&gt;

In the OnCreate event for the form add this:

&lt;textarea cols=70 rows=2&gt;
Frame = 0;
&lt;/textarea&gt;

And in the OnTimer event of the DXTimer add this:

&lt;textarea cols=70 rows=3&gt;
if (Frame = 5) then
  Frame=0
else
  Frame = Frame + 1;
end;
&lt;/textarea&gt;

And in the DrawTiles procedure we replace 0 with Frame in the calls to the Draw procedure. Like this:

&lt;textarea cols=70 rows=2&gt;
TileMaps.Items[TileImage].Draw(DXDraw.Surface, 
  StartX + PosX + LoopX * 64, StartY + LoopY * 16, Frame);
&lt;/textarea&gt;

Remember that this statement occurs twice in the DrawTiles procedure. Remember to change both, or you will have half your map not animating. Now save and test your program. You cannot use the old editor because of changes to the file structure. But you can download a converter from CodeCentral. This converter converts four-bit bmps to .map files. This way you can create a 50x50 pixel map in an image editor and save it as a 4bit (16 color) bitmap. And then convert it for use with the tiling engine. If your frame rate is too high then the animation may look bad. Just set Interval of the Timer to 33 to fix this. This will give you a frame rate of 30 fps. Well, that's all for animation! Now let's get to the hard part!

&lt;b&gt;WORLD POSITIONING&lt;/b&gt;
First of all we need to make some declarations. Add this to the type declaration of TTile:

&lt;textarea cols=70 rows=1&gt;
Marked: Boolean;
&lt;/textarea&gt;

Also declare this procedure:

&lt;textarea cols=70 rows=1&gt;
procedure CheckTiles(X, Y: Integer; var XTile, YTile: Integer);
&lt;/textarea&gt;

Next create the procedure with this code in it:

&lt;textarea cols=70 rows=6&gt;
procedure TMainForm.CheckTiles(X, Y: Integer; var XTile, YTile: Integer);
var LoopX, LoopY: Integer;
begin
  for LoopY := 1 to 50 do
  begin
    if (Y - ((0.46875) * (X - StartX) + StartY + (LoopY * 30)) &lt; 15) and (Y - ((0.46875) * (X - StartX) + StartY + (LoopY * 30)) &gt; (-15)) then
    YTile := LoopY;
  end;
  for LoopX := 1 to 50 do
  begin
    if (-(0.46875) * (X - StartX) + StartY + (LoopX * 30) - Y &lt; 15) and ((-0.46875) * (X - StartX) + StartY + (LoopX * 30)- Y &gt; (-15)) then
    XTile := LoopX;
  end;
end;
&lt;/textarea&gt;

Then in the OnMouse move event of the DXDraw component add this:

&lt;textarea cols=70 rows=3&gt;
Map.Map[TileX, TileY].Marked := False;
CheckTiles(X - 96, Y, TileX, TileY);
Map.Map[TileX, TileY].Marked := True;
&lt;/textarea&gt;

This unmarks the old tile and marks the new one. Then add this line under the Draw function in the DrawTiles procedure. Be sure to add it under both function calls, as each one is just for half the map.

&lt;textarea cols=70 rows=3&gt;
if Map.Map[XTile, YTile].Marked then
  begin
    Markers.Items[0].Draw(DXDraw.Surface, StartX + PosX + LoopX * 64, StartY + PosY + LoopY * 15 - 2, 0);
  end;
&lt;/textarea&gt;

This draws a marker on the marked tile making it easier to see what tile is marked. Change this line in the OnTimer event:

&lt;textarea cols=70 rows=1&gt;
Panel.Caption := 'FPS: ' + IntToStr(DXTimer.FrameRate);
&lt;/textarea&gt;

to:

&lt;textarea cols=70 rows=1&gt;
Panel.Caption := 'FPS: ' + IntToStr(DXTimer.FrameRate) + ' TileX: ' + IntToStr(TileX) + 'TileY: ' + IntToStr
&lt;/textarea&gt;


&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-387027432382580749?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/387027432382580749/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=387027432382580749' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/387027432382580749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/387027432382580749'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/02/delphix-oyun-rnekleri-1-ingilizce.html' title='Delphix Oyun Örnekleri - 1 (ingilizce)'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-7973507964718250259</id><published>2008-02-27T15:26:00.000-08:00</published><updated>2008-02-27T15:29:35.198-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DirectX'/><title type='text'>DirectX Nedir?</title><content type='html'>&lt;pre&gt;
DirectX nedir?Windows, bilgisayarınızın çoklu ortam özelliklerini artıran DirectX 8.0'ı destekler. DirectX, görüntü ve ses kartlarınızın yeteneklerine erişim olanağı vererek, programların gerçekçi üç boyutlu (3B) grafikler ve derinlikli müzik ve ses efektleri oluşturmasına olanak sağlar. DirectX, Windows programlarına donanımla hızlandırılmış yüksek performanslı çoklu ortam desteği sunan bir dizi alt düzey Uygulama Programlama Arabirimi'nden (API) oluşur. 

DirectX, programın bilgisayarınızın donanım yeteneklerini kolayca belirlemesine olanak verir, ardından da karşılık düşen program parametrelerini ayarlar. Bu, çoklu ortam uygulamalarının, DirectX uyumlu donanıma ve sürücülere sahip olan Windows tabanlı herhangi bir bilgisayarda çalışmasını sağlar ve çoklu ortam programlarının yüksek performanslı donanımdan sonuna kadar yararlanmasını güvence altına alır.

DirectX, 3B grafik hızlandırıcı yongaları ve ses kartları gibi yüksek performanslı donanımın gelişmiş özelliklerine erişim sağlayan bir API kümesi içerir. Bu API'ler, iki boyutlu (2B) grafik hızlandırma dahil alt düzey işlevleri denetler, oyun çubukları, klavyeler ve fareler gibi giriş aygıtlarını destekler ve ses karıştırma işlemini ve ses çıkışını denetler. Alt düzeyli işlevler, DirectX'i oluşturan şu bileşenler tarafından desteklenir:

&lt;b&gt;Microsoft DirectDraw&lt;/b&gt;

Microsoft DirectDraw API, bilgisayarın video bağdaştırıcısının, hızlandırılmış donanım özelliklerine çok hızlı erişimini destekler. Tüm görüntü bağdaştırıcılar üzerindeki grafikleri görüntülemenin standart yöntemlerini ve hızlandırılmış sürücülerin kullanılması sırasında daha hızlı, daha doğrudan bir erişimi destekler. DirectDraw, belirli görüntüleme aygıtlarına, bunların yetenekleri hakkında kullanıcıdan ek bilgi alma gereği kalmadan, oyunlar ve 2B grafik paketleri gibi, programlar için aygıttan bağımsız bir yol ve dijital görüntü codec bileşenleri gibi Windows sistem bileşenleri sağlar.

&lt;b&gt;Microsoft Direct3D&lt;/b&gt;

Microsoft Direct3D API (Direct3D), yeni görüntü kartlarının çoğunda yerleşik olan 3B oluşturma işlevlerine bir arabirim sağlar. Direct3D, hızlandırıcı donanımı ile verimli ve güçlü bir iletişim sağlamak için yazılım programlarına aygıttan bağımsız bir yol sağlayan alt düzey bir 3B API'dir. Direct3D, özel CPU yönerge kümeleri için destek içerdiğinden, görece yeni bilgisayarlarda daha büyük hızlanma sağlar.

&lt;b&gt;Microsoft DirectSound&lt;/b&gt;

Microsoft DirectSound API, programlar ile ses bağdaştırıcısının ses karıştırma, ses çalma ve ses yakalama yetenekleri arasında bir bağlantı sağlar. DirectSound, çoklu ortam yazılım programlarına düşük gecikme süreli karıştırma, donanım hızlandırması ve ses aygıtına erişim sağlar. Bu özelliği, var olan aygıt sürücüleri ile uyumu sürdürerek sağlar.

&lt;b&gt;Microsoft DirectMusic&lt;/b&gt;

Microsoft DirectMusic API, DirectX'in etkileşimli ses bileşenidir. DirectMusic, dijital ses örneklerini yakalayan ve çalan DirectSound API'sinden farklı olarak, hem dijital sesle, hem de ses kartınız veya kendi yerleşik yazılım birleştiricisi aracılığıyla dijital sese dönüştürülen ileti tabanlı müzik verileri ile çalışır. DirectMusic API, MIDI (Müzik Aleti Dijital Arabirimi) biçimine giriş desteği sağlar ve hem sıkıştırılmış hem de sıkıştırılmamış dijital ses biçimlerini destekler. DirectMusic, yazılım geliştiricilerine, derinlikli, yazılım ortamındaki çeşitli değişikliklere (şüphesiz bunların başında kullanıcı girdileri gelir) yanıt veren dinamik parçalar oluşturma olanağı sunar.

&lt;b&gt;Microsoft DirectInput&lt;/b&gt;

Microsoft DirectInput API, oyunlar için gelişmiş giriş sağlar ve gerek oyun çubuklarından gerekse fare, klavye ve güç yansımalı oyun denetleyicileri gibi başka ilgili aygıtlardan gelen girdileri işler.

&lt;b&gt;Microsoft DirectPlay&lt;/b&gt;

Microsoft DirectPlay API, modem, Internet veya Yerel Ağ üzerinden oyun bağlantılarını destekler. DirectPlay, iletişim hizmetlerine erişimi basitleştirir ve iletişim kuralından bağımsız olarak oyunların birbirleriyle iletişim kurmalarına veya çevrimiçi hizmete bir yol sağlar. DirectPlay, çok oyunculu oyunların başlatılmasını kolaylaştıran lobi hizmetleri sunar ve önemli oyun verilerinin ağda kaybolmamasını güvence altına almak için güvenilir iletişim kurallarını destekler. DirectPlay 8.0'deki yeni özellikler, çok oyunculu takım oyunlarının oynanabilirliğini önemli ölçüde artıracak olan, ağ üzerinden sesli iletişim desteğidir; böylece, oyunu oynayan öteki kişilerle konuşma olanağı sağlayarak, sosyal oyunlara yeni bir boyut getirmiştir.

&lt;b&gt;Microsoft DirectShow&lt;/b&gt;

Microsoft DirectShow API, bilgisayarınızda ve Internet sunucularında yer alan çoklu ortam dosyaları için yüksek kalitede yakalama ve oynatma olanağı sağlar. DirectShow, ASF (Advanced Streaming Format), AVI (Audio-Video Interleaved), DV (Digital Video), MPEG (Motion Picture Experts Group), MP3 (MPEG Audio Layer-3), Windows WMA/WMV (Media Audio/Video) ve WAV dosyaları dahil olmak üzere çok çeşitli ses ve video biçimlerini destekler. DirectShow, video yakalama, DVD oynatma, video düzenlemeye ve karıştırmaya, donanımla hızlandırılmış video kod çözmeye ve analog ve dijital televizyon sinyallerinin alınmasına olanak sağlar. 
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-7973507964718250259?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/7973507964718250259/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=7973507964718250259' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/7973507964718250259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/7973507964718250259'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/02/directx-nedir.html' title='DirectX Nedir?'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-4284651992001136928</id><published>2008-02-27T15:12:00.000-08:00</published><updated>2008-02-27T15:21:40.724-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Genel'/><title type='text'>Bir Oyunun Kısımları</title><content type='html'>&lt;pre&gt;
Bir video oyunu ,gerçekte, değişik eylemleri gerçekleştiren döngülerden meydana gelir. Programcılar, oyun programlamanın dünyasına girdiklerinde, nadiren; basit bir Pong veya Asteroid oyunu için bile gerekli olan tüm unsurları düşünür ve kolayca etkisi altına girebilirler. Bu muhtemelen olay-güdümlü yaklaşıma alışık olmadığnız anlamına gelir.

Şimdi başlığımıza, bir oyunun 7 aşamasına dönelim ve baştan sona bir dizi halinde yazıp bu evreleri açıklayalım.

&lt;a href="http://1.bp.blogspot.com/_fAqb9I3wJqQ/R8XvfYvs8aI/AAAAAAAAAF0/ytaMq7zovRI/s1600-h/1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_fAqb9I3wJqQ/R8XvfYvs8aI/AAAAAAAAAF0/ytaMq7zovRI/s320/1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5171803069602394530" /&gt;&lt;/a&gt;

&lt;b&gt;Aşama I : Programı İlk Kullanıma Hazırlamak&lt;/b&gt;

Burası gösteriye başladığınız yerdir. Oyununuz için bir pencere oluşturur; kullanmak için DirectX kurulumunu gerçekletirir; grafikler, modeller ve diğer medyaları yükler, bellek tahsisi vs. birsürü eylemi gerçekleştirirsiniz.

&lt;b&gt;Aşama II : Oyuna Başlamak&lt;/b&gt;

Bu aşama esasında oyununuzu oynanabilir kıldığınız kısımdır. Bu bir harita seçmek; oyuncunuzun konumunu belirlemek (ve herkesin) veya rasgele değerler atamak (mesela rasgele bir arazi) olabilir ki bunlar oyunun başlangıcına karar verirler.

&lt;b&gt;Aşama III : Kullanıcıdan Girdi Almak&lt;/b&gt;

Bu aşamada klavye,mouse,joystick gibi; oyuncunun kullandığı kontrollerden tüm bilgileri alırsınız. Bu evre genel olarak DirectInput dersinde ele alınacaktır.

&lt;b&gt;Aşama IV : Oyun Mantığı; Yapay Zeka ve Fizik&lt;/b&gt;

Bu aşamada dünyanızda neler olup bittiği önemlidir. Oyuncu tam olarak ne yapıyor? Hangi yöne gidiyor? Ne kadar mermisi kaldı? Gelen veya giden düşman var mı? Kendi ittifakları neler yapıyor? Bir düşmanla karşılaştığında her ikisinin tepkisi ne oluyor? Vs.vs… Tüm bunlar ve çok daha fazla olay bu aşamada ele alınır.

&lt;b&gt;Aşama V : Grafik İşlemek (Render)&lt;/b&gt;

Bu aşama, DirectX ‘in en çok kullanıldığı aşamadır. Tüm 2D ve 3D grafikler ekrana işlenir. Bu kısım da Direct3D derslerinde ele alınacaktır.

&lt;b&gt;Aşama VI : Tekrar (Restart)&lt;/b&gt;

Basitçe; 3.aşamaya döner ve herşey baştan,tekrardan yapılır.

&lt;b&gt;Aşama VII : Temizlik (Cleanup)&lt;/b&gt;

Hafızayı (mem) mı çağırmıştınız? Bu sizin bellekteki herşeyi temizlemek için son şansınız; çünkü programınız sona ermek üzere J. Çeşitli arayüzler için gerçekleştirilen DX çağrıları da kapatılmış veya ‘bırakılmış (released)’ olmalı. İşte tüm bu temizlik bu aşamada gerçekleşir!

Peki, tüm bunlar nasıl bir araya gelirler? Belki farketmişsinizdir, yukarıdaki tüm aşamalar, ‘çıkış’ talep edilene kadar bir döngü içerisinde devam eder. Ayrıca yukarıdaki şemada tüm parçaların nasıl bir araya geldiğini gördünüz

Hiç kuşkusuz bu aşamaları, sadeleştirilmiş bir biçimde sizlere sadece hızlı bir ‘gözden geçirme’ olarak sunduk.Ağ, açılış ekranları (splash), animasyonlu bir menü,ses müzik ve dahasını sizler bunların üzerine ekleyebilirsiniz (ve ileride ekleyeceksiniz de). Bunların bir kısmı oldukça kolay.Örneğin bir açılış ekranını, bir dilim kek olarak düşünebilirsiniz; çünkü yapmanız gereken sadece programın başlangıcına bir pencere eklemektir!

Bazıları kolay olduğu gibi, bazıları da gerçekten çok daha fazla karmaşık bir hal alabiliyor. Network (ağ) gibi çoklu bilgisayar (oyuncu) olanağı sağlayan sistemleri örnek olarak verebiliriz.

Bu bölümü bu kadar uzattığımız yeter… Gelecek derste, bir Windows programının nasıl çalıştığını, basit bir pencere oluşturmayı ve basit oyun döngüsü  planlamayı göreceğiz.

Buraya kadar henüz programlamaya elimizi sürmüş değiliz, ama artık nereden başlayacağımızı biliyoruz!  Bu nedenle, artık dalışa geçebiliriz!

kaynak: pcreferans.com
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-4284651992001136928?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/4284651992001136928/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=4284651992001136928' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/4284651992001136928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/4284651992001136928'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/02/bir-oyunun-ksmlar.html' title='Bir Oyunun Kısımları'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_fAqb9I3wJqQ/R8XvfYvs8aI/AAAAAAAAAF0/ytaMq7zovRI/s72-c/1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-6152310674177136069</id><published>2008-02-27T15:04:00.000-08:00</published><updated>2008-02-27T15:08:47.648-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='DirectX'/><title type='text'>Directx Vector Functions (Length, Degree)</title><content type='html'>&lt;textarea cols=70 rows=35&gt;
/*

Bu Örnekte, C++ kodu yazarken sıkça kullanacağınız bir float -&gt; char * convertion fonksiyonu

ile directX sınıflarında vector hesaplamaları yapmakta kullanacağınız:

Vector Uzunluk Hesabı için D3DXVec3Length

Vectorler arası açı hesabı için D3dXVec3Dot

Fonksiyonlarını örneklendirdim.

Oguz Bastemur 2007

*/

#include "stdio.h"//sprintf fonksiyonu için

#include "windows.h"

#include "d3dx9.h"

char* Texts[5];

char *ToChar(char* q, float n)//float -&gt; char* convertion

{

char *myc=(char*)malloc(20); 
sprintf(myc,"%s=%f",q,n);// sabit metin ve noktalı sayıyı tek bir satırda birleştiriyoruz

return myc; //Bu örneği dilediğiniz gibi şekillendirerek istediğiniz

} //biçim çevrimlerini yapabilirsiniz

void Load() 
{

Texts[0]="VECTOR 1: ( 10.0f, 5.0f, 5.0f)";

Texts[1]="VECTOR 1: ( 3.0f, 1.0f, 7.0f)";

D3DXVECTOR3 Vec1(10.0f,5.0f,5.0f);//Birinci Vector

D3DXVECTOR3 Vec2( 3.0f,1.0f,7.0f);//İkinci Vector

float Vec1Length=D3DXVec3Length(&amp;Vec1);//Vector Uzunluğu hesabı

Texts[2]=ToChar("Vector1 Lenght is : ",Vec1Length);

float Vec2Length=D3DXVec3Length(&amp;Vec2);//Vector Uzunluğu hesabı

Texts[3]=ToChar("Vector2 Lenght is : ",Vec2Length);

float dot=D3DXVec3Dot(&amp;Vec1,&amp;Vec2);// İki vector arası açı değerlendirmesi

if(dot==0)//0 ise 90 derece

Texts[4]="Degree Between 2 Vector is = 90";

else if(dot&gt;0)//0'dan küçük ise 90 dereceden küçük

Texts[4]="Degree Between 2 Vector is &lt; 90";

else if(dot&lt;0)//0'dan küçük ise 90 derecen büyük

Texts[4]="Degree Between 2 Vector is &gt; 90";

 

}

 

LRESULT CALLBACK WindowProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)

{

switch(msg) 
{

case WM_DESTROY: 
PostQuitMessage(0);

break;case WM_PAINT: 
HDC hdc=GetDC(hWnd);

SetBkMode(hdc,TRANSPARENT);

for(int i=0;i&lt;5;i++) 
TextOut(hdc,100,100+(i*20),Texts[i],strlen(Texts[i]));

}

return DefWindowProc(hWnd,msg, wParam,lParam); 
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE,LPSTR,int cmdShow) 
{

WNDCLASSEX wc;

ZeroMemory(&amp;wc,sizeof(WNDCLASSEX));wc.cbSize=sizeof(WNDCLASSEX); 
wc.hbrBackground=(HBRUSH)COLOR_WINDOW;

wc.hCursor=LoadCursor(hInstance,IDC_ARROW);

wc.hInstance=hInstance;

wc.lpfnWndProc=WindowProc;

wc.lpszClassName="Pencere";

wc.style=CS_CLASSDC;

RegisterClassEx(&amp;wc);

HWND hWnd=CreateWindowEx(NULL,"Pencere","D3DXVECTOR3",WS_OVERLAPPEDWINDOW,100,100,400,400,NULL,NULL,hInstance,NULL);

Load();

ShowWindow(hWnd,cmdShow);

UpdateWindow(hWnd);

MSG msg;

ZeroMemory(&amp;msg,sizeof(MSG));while(msg.message!=WM_QUIT) 
{

if(PeekMessage(&amp;msg,NULL,0,0,PM_REMOVE)) 
{

TranslateMessage(&amp;msg);

DispatchMessage(&amp;msg);

}

}

UnregisterClass("Pencere",hInstance);

}

&lt;/textarea&gt;&lt;br&gt;
kaynak: directx.blog.com - Oguz Bastemur&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-6152310674177136069?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/6152310674177136069/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=6152310674177136069' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/6152310674177136069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/6152310674177136069'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/02/directx-vector-functions-length-degree.html' title='Directx Vector Functions (Length, Degree)'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-4758047818303193995</id><published>2008-02-27T14:10:00.000-08:00</published><updated>2008-02-27T14:15:08.767-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oyun Motoru'/><title type='text'>Ogre3D Oyun Motoru</title><content type='html'>&lt;img src="http://www.ogre3d.org/gallery/albums/album07/album59.highlight.jpg"&gt;
&lt;img src="http://www.ogre3d.org/gallery/albums/album57/jk_shot4.highlight.jpg"&gt;
&lt;img src="http://www.ogre3d.org/gallery/albums/album56/sot_screenshot_6.highlight.jpg"&gt;
&lt;br&gt;
&lt;img src="http://www.ogre3d.org/gallery/albums/album63/WILDCAT_render800.thumb.jpg"&gt;
&lt;img src="http://www.ogre3d.org/gallery/albums/album59/gr_01_1024.thumb.jpg"&gt;
&lt;img src="http://www.ogre3d.org/gallery/albums/album59/ac_03_1024.thumb.jpg"&gt;
&lt;br&gt;
Visual C++ ile çalışır.&lt;br&gt;
SDK Paketi &lt;a href="http://www.ogre3d.org/index.php?option=com_content&amp;task=view&amp;id=406&amp;Itemid=149" target=_blank&gt;DOWNLOAD&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-4758047818303193995?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/4758047818303193995/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=4758047818303193995' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/4758047818303193995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/4758047818303193995'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/02/ogre3d-oyun-motoru.html' title='Ogre3D Oyun Motoru'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-4615677875691989648</id><published>2008-02-27T14:01:00.000-08:00</published><updated>2008-02-27T14:03:27.707-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>C++ Puanlı Sayı Tahmin Oyunu</title><content type='html'>&lt;textarea cols=75 rows=20&gt;
#include&lt;iostream.h&gt;
#include&lt;stdio.h&gt;
#include&lt;stdlib.h&gt;
#include&lt;windows.h&gt;

int rasgele_sayiuret(int aralik)
{
srand(GetTickCount());
    int sayi=rand()%aralik;
    return sayi;
}

int puan_hesapla(int sayac)
{
int sonuc=(sayac+1)*20;
return sonuc;
}

void main()
{
int girilen_sayi;
int uretilen_sayi=rasgele_sayiuret(100);
cout&lt;&lt;"urt:"&lt;&lt;uretilen_sayi&lt;&lt;endl;
bool buldu=true;
int sayac=5;
int puan;

cout&lt;&lt;"Bir sayi giriniz :"&lt;&lt;endl;
cin&gt;&gt;girilen_sayi;
sayac--;

do
{
if((girilen_sayi&gt;0)&amp;&amp;(girilen_sayi&lt;=100))
{
if(sayac&gt;=0)
{

if(girilen_sayi==uretilen_sayi)
{ 
char karar;
cout&lt;&lt;"Tebrikler, sayiyi buldunuz..."&lt;&lt;endl;
puan=puan_hesapla(sayac);
cout&lt;&lt;"***************"&lt;&lt;endl;
cout&lt;&lt;"* Puaniniz:"&lt;&lt;puan&lt;&lt;"*"&lt;&lt;endl;
cout&lt;&lt;"***************"&lt;&lt;endl;
cout&lt;&lt;"Tekrar oynamak istermisiniz? --&gt; E / H"&lt;&lt;endl;
cin&gt;&gt;karar;
if(karar=='H'|| karar=='h')
{
buldu=false;
}
else if(karar=='E'|| karar=='e')
{
sayac=5;
uretilen_sayi=rasgele_sayiuret(100);
cout&lt;&lt;"urt:"&lt;&lt;uretilen_sayi&lt;&lt;endl;
cout&lt;&lt;"Bir sayi giriniz..."&lt;&lt;endl;
cin&gt;&gt;girilen_sayi;
}
else
{
cout&lt;&lt;"Gecersiz bir karakter"&lt;&lt;endl;
}
sayac--;
}
else if(girilen_sayi&lt;uretilen_sayi)
{

if(sayac!=0)
{
cout&lt;&lt;"Buyuk bir sayi giriniz..."&lt;&lt;endl;
cin&gt;&gt;girilen_sayi;
}
sayac--;
}
else
{

if(sayac!=0)
{
cout&lt;&lt;"Kucuk bir sayi giriniz..."&lt;&lt;endl;
cin&gt;&gt;girilen_sayi;
}
sayac--;
}
}
else
{ 
char karar;
cout&lt;&lt;"Hakkiniz bitti..."&lt;&lt;endl;
cout&lt;&lt;"Tekrar oynamak istermisiniz? --&gt; E / H"&lt;&lt;endl;
cin&gt;&gt;karar;
if(karar=='H'|| karar=='h')
{
buldu=false;
}
else if(karar=='E'|| karar=='e')
{
sayac=5;
uretilen_sayi=rasgele_sayiuret(100);
cout&lt;&lt;"urt:"&lt;&lt;uretilen_sayi&lt;&lt;endl;
cout&lt;&lt;"Bir sayi giriniz..."&lt;&lt;endl;
cin&gt;&gt;girilen_sayi;
sayac--;
}
else
{
cout&lt;&lt;"Gecersiz bir karakter"&lt;&lt;endl;
}
}
}
else
{
cout&lt;&lt;"Lutfen 1-100 arasinda bir sayi giriniz..."&lt;&lt;endl;
}
}
while(buldu==true);


cout&lt;&lt;"Devam etmek icin bir tusa basiniz."&lt;&lt;endl;
getchar();
} 

&lt;/textarea&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-4615677875691989648?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/4615677875691989648/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=4615677875691989648' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/4615677875691989648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/4615677875691989648'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/02/c-puanl-say-tahmin-oyunu.html' title='C++ Puanlı Sayı Tahmin Oyunu'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-1942192353240084060</id><published>2008-02-27T13:51:00.000-08:00</published><updated>2008-02-27T13:54:13.975-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Opengl'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Opengl-Glut İle Oyun Programlama</title><content type='html'>&lt;pre&gt;
Opengl-Glut ile oyun programlama
OpenGL nedir?
Icinizde eskiden C ve C++ grafiklerini kullanarak oyun yapmaya calisan yoktur herhalde :D Ama sonucta cogumuz bir husrana ugradik ve istedigimiz destegi alamadik, Ama animasyonlari cok kolay ....... lari cok kolay yapabilecegimiz bir eklenti dir OpenGL
GLut nedir?:
Glut opengl in ozelliklerini tasiyon ama windows un pencere yaratma ..., memory islemlerini kolaylastirmis bir sekilde yapmamiza yarayan bir kit deiyebiliriz;

Ihtiyacimiz olanlar;
DevCpp yada Visual C(Borland C olmuyor, Ama yapanlar duydum :D )
Glut Kit(www.opengl.org da bulabilirsiniz)


glutdlls36.zip i indirdim ben
zip li dosyayi actik icinde .h .lib ve .dll ler var
.h leri Visual Studio nun Include\GL klasorune atariz
.lib leri Visual Studio nun Lib klasorune atariz
.dll leri de windows\system32 ye atariz
Simdi Visual C ile glut kullanarak basit bir ornek;
Visual C yi actik
File-&amp;gtNew-&amp;gtProjects-&amp;gtWIn32 Console Application proje adi olarak istediginiz bisi girebilirsiniz 
File-&amp;gtNew-&amp;gtFiles-&amp;gtC++ source file istedigimiz adi girebiliriz


Proje Ayarlari:
NOT:Simdi yapacagimiz ayarlar her proje icin tekrarlanacak
Project-&amp;gtSettings-&amp;gtLink-&amp;gtObject/Library Modules e opengl32.lib glut32.lib glu32.lib leri ekliyoruz

ve KoD:

#include &amp;ltGL/glut.h&amp;gt


void renderScene(void){//cizimleri yapacak fnksyion her zmn void olur
glClear(GL_COLOR_BUFFER_BIT);
/*gl clear bir opengl fonksiyonu ve bu fonksiyon zorunlu bu genelde temizleme yani grafiklerin gorulmesi icin on hazirlik diyebilirz*/

glBegin(GL_TRIANGLES);
/*bir GL_TRIANGLES triangles cizimine basla, GL_TRIANGLES bize bir ucgen cize ve ucgenin 3 kosesi vardir, her kosenin koordinatlarini ayri ayri girecegiz*/

/*glVertex(x,y,z); burda x,y,z float tipinde olmali, z(derinlik) simdilik sifir,Burda simdilik bu degerler en fazla 1.0 olurm bu viewport la ilgili bu onumuzdeki derste anlatacagim */
/*glColor3f(red(max1.0),green(max1.0), blue(max1.0)); bu renklendirmek icin*/
glColor3f(1.0, 0.0, 0.0);//birinci noktanin rengi

glVertex3f(-0.5,-0.5,0.0);//birici nokta

glColor3f(0.0, 1.0, 0.0);//ikinci noktanin rengi

glVertex3f(0.5,0.0,0.0);//2. nokta

glColor3f(0.0, 0.0, 1.0);//3. noktanin rengi

glVertex3f(0.0,0.5,0.0);//3. nokta
glEnd();//cizimi bitir
glFlush();//memory yi temizle...
}//cizim fonksyionu bitisi

void main(int argc, char **argv) {/*bu ana fonksyionun pencere is.vb burda int argc,char **argv openglin gonderecegi komutlari almak icin yani kisacasi bunlar yazilmak zorunda, her zaman ayni kalir bunu anlamak icin kendinizi kasmayin */

glutInit(&amp;argc, argv);//burda GLUT motorunu harekete gecirdik
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);

/* burda displaymod u ayarladik GLUT_DEPTH(derinlik olacagini soyluyor ama daha isimize yarimiyor zaten z ekseniyle oynasa niz bile bisey degismez :D), GLUT_SINGLE(program tek katmana sahip olacak, genelde animasyon,kaplama vb, de cift katman yani GLUT_DOUBLE olur), GLUT_RGBA (ise renk sinifi gibi bisi, hani rgb fln varya) | isareti ile hepsini birlikte kullanabiliyoruz*/

glutInitWindowPosition(100,100);
/*pencerenin x ve y si nereye gelecek onu belirler yani pozisyon*/
glutInitWindowSize(320,320);//pencere boyutu
glutCreateWindow("Burak Aydin");//pencere basligi
glutDisplayFunc(renderScene);
/*hng fonksiyonun cizim yapacagini belirttik*/
glutMainLoop();
/*programin surekli tekrarlamasi icin, bu olmassa pencere acilip kapanir*/
}

kaynak: www.programlama.com
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-1942192353240084060?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/1942192353240084060/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=1942192353240084060' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/1942192353240084060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/1942192353240084060'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/02/opengl-glut-ile-oyun-programlama.html' title='Opengl-Glut İle Oyun Programlama'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-8658401305004686902</id><published>2008-02-27T13:47:00.000-08:00</published><updated>2008-02-27T13:51:27.316-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>C de Yılan Oyunu</title><content type='html'>&lt;textarea cols=75 rows=25&gt;
#include&lt;stdio.h&gt;
#include&lt;dos.h&gt;
#include&lt;conio.h&gt;
#include&lt;graphics.h&gt;
#include&lt;stdlib.h&gt;
#include&lt;bios.h&gt;
#define X_LENGTH1 60
#define X_LENGTH2 580
#define Y_LENGTH1 70
#define Y_LENGTH2 400
#define RIGHT 19712
#define LEFT 19200
#define UP 18432
#define DOWN 20480
#define QUIT 283
void youlost(int);
struct SnakePart{
int fx;
int fy;
};
typedef struct SnakePart snakePart;
void drawPart(int x,int y,int color){
int i;
setcolor(color);
for(i=0;i&lt;10;i++){
line(x,y,x+10,y);
y++;
}
}
void initialize(){
   int gdriver = 0, gmode = 0, errorcode;
   int bkcol;
   initgraph(&amp;gdriver, &amp;gmode, "..");
   errorcode = graphresult();
   if (errorcode != grOk){
      printf("Graphics error: %s
Press any key to halt:", grapherrormsg(errorcode));
      getch();
      exit(1);
   }
   cleardevice();
   setbkcolor(15);
   setcolor(4);
}
void printArea(){
char buf[80];
int y=40,i,j;
int x=57;
settextstyle(4, 0, 1);
sprintf(buf,"      S n a k e   1.0   b y    T a r i k    C ö r ü t");
outtextxy(x,y,buf);
setcolor(1);
for(j=Y_LENGTH1;j&lt;Y_LENGTH2;j++)
line(X_LENGTH1,j,X_LENGTH2,j);
setcolor(4);
sprintf(buf,"P u a n:");
outtextxy(300,400,buf);
gotoxy(30,24);
while(!kbhit()){
gotoxy(30,24);
printf("Press any key to begin...");
delay(500);
gotoxy(30,24);
printf("                         ");
delay(500);
}
setcolor(1);
for(j=365;j&lt;385;j++)
line(232,j,432,j);
setcolor(4);
}
void play(){
int x=100,puan=0;
int y=150;
int len=10;
int i,j,k=1,t;
int speed=200;
char buf[10];
snakePart yem;
int yon=RIGHT;
snakePart sp[50];
for(i=1;i&lt;=len;i++){
drawPart(x,y,4);
sp[i].fx=x;
sp[i].fy=y;
x+=10;
}
drawPart(100,100,4);
yem.fx=100;
yem.fy=100;
while(1){
drawPart(sp[1].fx,sp[1].fy,1);//delete the first part of snake
for(i=1;i&lt;len;i++){
sp[i].fx=sp[i+1].fx;
sp[i].fy=sp[i+1].fy;
}
if(yon==RIGHT){
sp[len].fx=sp[len-1].fx+10;
sp[len].fy=sp[len-1].fy;
}
else if(yon==LEFT){
sp[len].fx=sp[len-1].fx-10;
sp[len].fy=sp[len-1].fy;
}
else if(yon==UP){
sp[len].fx=sp[len-1].fx;
sp[len].fy=sp[len-1].fy-10;
}
else if(yon==DOWN){
sp[len].fx=sp[len-1].fx;
sp[len].fy=sp[len-1].fy+10;
}
else if(yon==QUIT)
exit(1);
else{
sp[len].fx=sp[len-1].fx+10;
sp[len-1].fy=sp[len-1].fy;
}
if(yem.fx==sp[len].fx&amp;&amp;yem.fy==sp[len].fy){
int a=rand()%52+6;
int b=rand()%33+7;
a*=10;
b*=10;
drawPart(a,b,4);
yem.fx=a;
yem.fy=b;
len++;
sp[len].fx=sp[len-1].fx;
sp[len].fy=sp[len-1].fy;
puan+=k;
k++;
sprintf(buf,"%d",puan);
setcolor(15);
for(j=400;j&lt;420;j++)
line(400,j,500,j);
setcolor(4);
outtextxy(400,400,buf);
speed-=4;
}
if(sp[len].fx&lt;X_LENGTH1||sp[len].fx&gt;X_LENGTH2-10||sp[len].fy&lt;Y_LENGTH1||sp[len].fy&gt;Y_LENGTH2-10)
youlost(puan);
for(i=1;i&lt;len-1;i++)
if(sp[len].fx==sp[i].fx&amp;&amp;sp[len].fy==sp[i].fy)
youlost(puan);
drawPart(sp[len].fx,sp[len].fy,4);
delay(speed);
if(kbhit()){
t=bioskey(0);
if(!(t==RIGHT&amp;&amp;yon==LEFT)&amp;&amp;!(t==LEFT&amp;&amp;yon==RIGHT)&amp;&amp;!(t==UP&amp;&amp;yon==DOWN)&amp;&amp;!(t==DOWN&amp;&amp;yon==UP))
if(t==QUIT||t==RIGHT||t==LEFT||t==UP||t==DOWN)
yon=t;
}
}//while
}
void youlost(int p){
char c=0;
closegraph();
while(1){
printf("Kaybettiniz.
Puaniniz %d
Tekrar oynamak ister misiniz? (y/n) :",p);
c=getch();
if(c=='y'){
initialize();
printArea();
play();
}
else if(c=='n')
exit(1);
}
}

void main(){
srand(time(NULL));
initialize();
printArea();
play();
}
&lt;/textarea&gt;&lt;br&gt;kaynak: www.programlama.com&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-8658401305004686902?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/8658401305004686902/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=8658401305004686902' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/8658401305004686902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/8658401305004686902'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/02/c-de-ylan-oyunu.html' title='C de Yılan Oyunu'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-1904682118406860915</id><published>2008-02-27T07:42:00.000-08:00</published><updated>2008-02-27T07:59:02.853-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Opengl'/><title type='text'>C# Opengl Kullanımı</title><content type='html'>OpenGL Nedir ?&lt;br&gt;&lt;br&gt;
OpenGL, en basit anlamıyla grafik donanımına arayüz olan bir yazılımdır. Bu arayüz yüz elli ayrı fonksiyona sahiptir. Bu fonksiyonları kullanarak etkileşimli üç boyutlu (3B, 3D) uygulamalar üretme ihtiyacını giderebilir, nesne tanımlama ve benzeri işlemleri gerçekleştirebiliriz.

&lt;br&gt;&lt;br&gt;
OpenGL donanımdan bağımsız birçok farklı donanım düzleminde uygulanabilecek şekilde tasarımlanmıştır. Bu niteliği kazanabilmek için, pencere işlemleri ve kullanıcı girişi işlemlerini yapan komutlar OpenGL’de mevcut değildir. Bunun yerine, pencere işlemleri kullanılan donanımın kontrol edildiği an içerisinde çalıştırılmalıdır. Benzer olarak, OpenGL kütüphanesi üç boyutlu nesneleri modellemede yüksek seviyede fonksiyonlara sahip değildir. Bu tip fonksiyonlarla göreceli olarak karmaşık şekiller, örneğin otomobiller, vücudun bir bölgesi, uçaklar veya moleküller tanımlanabilir. Fakat istenilen model, küçük bir takım geometrik şekillerden hareketle oluşturulabilir-noktalar, çizgiler ve poligonlar gibi-.

&lt;br&gt;&lt;br&gt;
OpenGL Komut Dizisi&lt;br&gt;&lt;br&gt;
OpenGL komutları, C#’da, ’gl’ öneki ve baş harfleri büyük olarak yazılan komutu oluşturan diğer kelimelerin birleşiminden oluşmaktadır. Benzer olarak OpenGL’de sabitler ’GL’ ön eki ile başlar ve bütün harfler büyük olacak şekilde kullanılır. Ayrıca ayrı sözcüklerde alt çizgi ile birleştirilir. Aşağıda OpenGL komut örnekleri ve veri tipleri verilmiştir :

&lt;br&gt;&lt;br&gt;
&lt;textarea cols=75 rows=15&gt;
Önek Veri Tipi  C Dilinde Karşılığı OpenGL Tanımı  
B 8-bit integer Signed char GLbyte 
S 8-bit integer Short GLshort 
İ 32-bit integer Long GLint, GLsize 
F 32-bit floating-point Float GLfloat, GLclampf 
D 64-bit dfloating point Double GLdouble, GLclampf 
Ub 8-bit unsigned integer Unsigned char GLubyte,GL boolean 
Us 16-bit unsigned integer Unsigned short GLushort 
Ui 32-bitunsigned integer Unsigned long GLuint, GLenum 
&lt;/textarea&gt;&lt;br&gt;&lt;br&gt;
OpenGL’de Çizim Yapmak
&lt;br&gt;&lt;br&gt;
OpenGL’de çizim yapmak için öncelikle çizim öncesi işlemler gerçekleştirilmelidir. İlk olarak ekran temizlenmeli, ardından çizimin rengi belirlemneli, daha sonra ise geometrik şeklin ne olacağı tanımlanmalıdır.

&lt;br&gt;&lt;br&gt;
1. Ekranın Temizlenmesi
&lt;br&gt;&lt;br&gt;
’GLClear’ fonksiyonunun parametresi, arka planın hangi işleme göre temizleneceğini belirler. Tipik olarak öncelikle temizleme rengi seçilir, daha sonra temizlenmesi gerekli olan tamponlar temizlenir. ’glclearDepth’ fonksiyonu ise ayarlanacak derinlik tamponundaki her bir pikselin değerini belirler.
&lt;br&gt;&lt;br&gt;
&lt;textarea rows=5 cols=75&gt;
Tampon İsmi 
Renk Tamponu GL_COLOR_BUFFER_BIT 
Derinlik Tamponu GL_DEPTH_BUFFER_BIT 
Birikim (Accumulator) Tamponu GL_ACCUM_BUFFER_BIT 
Kalıp (Stencil) Tamponu GL_STENCIL_BUFFER_BIT 
&lt;/textarea&gt;
&lt;br&gt;&lt;br&gt;
2. Renk Belirleme
&lt;br&gt;&lt;br&gt;
Renk belirlemek için ’glColor3f’ isimli fonksiyon kullanılır. Bu komut üç parametre alır, bu parametrelerin hepsi kayan noktalı sayılardır ve 0.0 ve 1.0 aralığındadır. Parametreler, sırasıyla kırmızı, yeşil ve mavi (RGB) renk bileşenlerinden oluşur. Bu üç değeri renkleri karıştırma olarak düşünebiliriz. Örneğin 0.0 değeri o renk bileşeninden hiç kullanılmayacağı, 1.0 değeri ise o renk bileşeninin tamamen baskın kılılacağı anlamına gelmektedir. Örneğin :
&lt;br&gt;&lt;br&gt;
glColor3f(1.0f,0.0f,0.0f);
&lt;br&gt;&lt;br&gt;
ifadesi en parlak kırmızı renk sistemini çizim rengi olarak atar. Bu ifadede hiç yeşil veya mavi bileşen yoktur. Tüm bileşenleri sıfır atamak siyah renk, 1.0 atamak beyaz renk, 0.5 atamak ise gri renk anlamına gelir. Aşağıda sekiz renk atama ifadesi görülmektedir :
&lt;br&gt;&lt;br&gt;
glColor3f(0.0, 0.0, 0.0); //siyah&lt;br&gt;
glColor3f(1.0, 0.0, 0.0); //kırmızı&lt;br&gt;
glColor3f(0.0, 1.0, 0.0); //yeşil &lt;br&gt;
glColor3f(1.0, 1.0, 0.0); //sarı &lt;br&gt;
glColor3f(0.0, 0.0, 1.0); //mavi&lt;br&gt; 
glColor3f(1.0, 0.0, 1.0); //magenta &lt;br&gt;
glColor3f(0.0, 1.0, 1.0); //cyan &lt;br&gt;
glColor3f(1.0, 1.0, 1.0); //beyaz&lt;br&gt;&lt;br&gt;

Aşağıda, renk tayfı kartezyen koordinat sisteminde gösterilmiştir :

&lt;br&gt;&lt;br&gt;
&lt;img src="http://www.csharpnedir.com/mimages/YilmazUrgun/CsOpenGL1.jpg" align=center&gt;
&lt;br&gt;
3. OpenGL’de Geometrik Şeklin Çizimi
&lt;br&gt;&lt;br&gt;
Daha önceden de belirttiğimiz gibi OpenGL’de modelleme, basit geometrik şekillerin çizimine dayanır. Şimdi bunun nasıl yapıldığını inceleyelim. Her bir farklı geometrik şekil ya da nesne glBegin() ve glEnd() fonksiyonları arasına yerleştirilir. 
&lt;br&gt;&lt;br&gt;
- Nokta, Çizgi ve Poligon belirleme :
&lt;br&gt;&lt;br&gt;
OpenGL, çizim yapılırken birden çok nokta, çizgi parçası ve çokgen çizdirilebilmesi için kuvvetli ve kullanılması çok basit çizim araçlarına sahiptir. Matemetiksel olarak nokta, çizgi ve poligonun ne anlama geldiğini biliriz, fakat bu tanımlar OpenGL’de tam olarak böyle değildir. Bilgisayar tabanlı hesaplamaların sonlu duyarlı olmaları sebebiyle bir takım yuvarlama hataları oluşur. Çizgiler, noktalar ve poligonların koordinatlarında bu yuvarlama hatalarından kaynaklanan sapmalar olabilir. 
&lt;br&gt;&lt;br&gt;
- Nokta Belirleme :
&lt;br&gt;&lt;br&gt;
Cisimlerin, yüzeylerin ve kenarların belirtebilmesi için köşe noktalarına ihtiyaç duyulur. OpenGL ve bilgisayar grafiklerinde noktanın genişliğinden söz edilebilir ve bunun için glPointSize() fonksiyonu kullanılarak farklı büyüklükte noktalar tanımlanabilir.
&lt;br&gt;&lt;br&gt;
- Çizgiler :
&lt;br&gt;&lt;br&gt;
OpenGL’de çizgi terimi, matematikte her iki doğrultuda sonsuz uzunlukta doğru olarak ifade edilen terimin aksine, yalnızca sonsuz uzunluktaki çizgi parçası anlamına gelmektedir.
Birleşmiş, seri halindeki çizgi parçalarını belirtmenin kolay yolları mevcuttur.
&lt;br&gt;&lt;br&gt;
&lt;img align=center src="http://www.csharpnedir.com/mimages/YilmazUrgun/CsOpenGL2.jpg"&gt;
&lt;br&gt;
- Poligonlar :
&lt;br&gt;&lt;br&gt;
Poligonlar tipik olarak iç kısımlarındaki pikseller ile çizilir. Fakat noktalar kümesi olarak da çizilmeleri mümkündür. OpenGL de poligonların kenarları birbirleri ile kesişmezler. Buna matematikte basit poligon adı verilir. Ayrıca OpenGL poligonları konveks yani dışbükey olmalıdır.
&lt;br&gt;&lt;br&gt;
&lt;img align=center src="http://www.csharpnedir.com/mimages/YilmazUrgun/CsOpenGL3.jpg"&gt;
&lt;br&gt;
- Dörtgenler :
&lt;br&gt;&lt;br&gt;
Dörtgenler grafik uygulamalarında yaygın olarak kullanılır. OpenGL kütüphanesinde içi dolu dörtgen çizmek için kullanılan glRect isimli bir fonksiyon bulunmaktadır. Dörtgen bir poligon gibi de çizilebilir.

&lt;br&gt;&lt;br&gt;
- Eğriler : 
&lt;br&gt;&lt;br&gt;
Herhangi bir eğri, çizgi veya yüzey kısa çizgi parçalarından meydana gelen küçük poligonsal alanlar ile oluşturulabilir. Kısa çizgilerin birleşmesi ile elde edilen şekil eğri gibi görünür.
&lt;br&gt;&lt;br&gt;
&lt;img src="http://www.csharpnedir.com/mimages/YilmazUrgun/CsOpenGL4.jpg"&gt;
&lt;br&gt;
- Köşe Nktalarının Belirlenmesi : 
&lt;br&gt;&lt;br&gt;
OpenGL’de tüm geometrik nesneler, köşe noktalarından oluşan bir dizi koordinat ile tanımlanır. Bir köşe noktasının belirlenmesi için ’glVertex’ isimli fonksiyon kullanılır. Bu fonksiyon ’glBegin’ ile ’glEnd’ fonksiyon çağrıları arasında kalan bloğa yerleştirilir.
&lt;br&gt;&lt;br&gt;
&lt;textarea cols=75 rows=7&gt;
//fonksiyonun kullanımı :
Void glVertex{boyut}{s,i,f,d}[v](koordinatlar); 
    //boyut 2,3,4 olabilir
    //s : short, i : int, f : float, d : double
    //v : vektör


glVertex2s(2,3);              //2 boyutta kullanımı
glVertex(0.0,0.0,3.1415)   //3 boyutlu kullanımı

glVertex3dv(dvect);
glVertex3d(doublex,doubley,doublez)
glVertex3dv(double[] )

glVertex3f(floatx,floaty,floatz)
glVertex3fv(float[]v)

glVertex3i(intx,inty,intz)
glVertex3iv(int[]v)

glVertex3s(shortx,shorty,shortz)
glVertex3sv(short[] v)
&lt;/textarea&gt;
&lt;br&gt;’glBegin’ fonksiyonun çağrılmasından sonra gelen ifadeler, ne tip geometrik şeklin çizileceğini belirler. Aşağıdaki tabloda ’glBegin’ fonksiyonunda kullanılan on adet veri tipi gösterilmiştir :

&lt;br&gt;&lt;br&gt;
&lt;textarea cols=75 rows=7&gt;
Veri Tipi  Anlamı 
GL_POINTS Bağımsız noktalar 
GL_LINES Bağımsız çizgi parçaları 
GL_POLYGON Dışbükey poligon 
GL_TRIANGLES Üçgen 
GL_QUADS Dört-yüzlü poligonlar 
GL_LINE_STRIP Çizgi parçaları serisi 
GL_LINE_LOOP İlk ve son köşeleri ile birbirine bağlı kapalı çizgi parçaları serisi 
GL_TRIANGLE_STRIP Üçgen serisi 
GL_TRIANGLE_FAN Üçgen yelpazeleri 
GL_QUAD_STRIP Dörtgen serisi 
&lt;/textarea&gt;
&lt;br&gt;
&lt;img src="http://www.csharpnedir.com/mimages/YilmazUrgun/CsOpenGL5.jpg"&gt;
&lt;br&gt;
Uygulama : OpenGL’de Basit Bir Ev Modeli
&lt;br&gt;&lt;br&gt;
Şimdi uygulamaya geçelim. İlk olarak C#’ta oluşturulmuş bir Windows uygulamasının içinde bir form tanımlıyoruz. Görüntümüzü bu form üzerinde göstereceğiz.

&lt;br&gt;&lt;br&gt;
OpenGL fonksiyonlarını kullanabilmek için OpenGL kütüphanesini referanslara eklememiz gerekmektedir. ’csgl.dll’ dosyasını referans olarak seçmek için önce Visual Studio .NET penceremizdeki proje penceresindeki referans ekle kısmından csgl.dll dosyasını bilgisayarımızdaki sabit diskte kayıtlı olduğu yerden ekliyoruz ve ’using CsGL.OpenGL’ ifadesini kaynak kod dosyamızın başıne ekleyerek bu kütüphaneyi kullanacağımızı önceden derleyiciye bildiriyoruz. Ayrıca ’csgl.native.dll’ dosyasını C:\WINDOWS\system32 dosyasına kopyalıyoruz. ’csgl.dll’ ve ’csgl.native.dll’ dosyalarını http://csgl.sourceforge.net/ sayfasından indirebilirsiniz.

&lt;br&gt;&lt;br&gt;
Önce bir küp sınıfı tanımlıyoruz. Tüm OpenGL komutlarını, OpenGLControl sınıfından türettiğimiz Ourview isimli sınıfın içinde yapıyoruz ve her OpenGL uygulamamızda olması gereken InitGLContext() fonksiyonumuzu, bu türetilmiş sınıfta ezerek (override ederek) içindeki üye fonksiyonların parametrelerini değiştirerek istenen başlangıç koşullandırmalarını yerine getiriyoruz. Çizim işlemleri ise glDraw() fonksiyonu içerisinde tanımlanır. Burada yine glDraw() fonksiyonumuzu, türetilmiş Ourview isimli sınıfımızda ezerek fonksiyona yeni özellikler kazandırıyoruz. Çizime başlamadan önce ekran tamponunu temizliyoruz ve şeklimizi koordinat sisteminde, bize görünebilir olması için glTranslatef() fonksiyonumuz ile z ekseninde -8 birim derine öteliyoruz. Bu fonksiyonun özelliği, bir çizim başlangıç noktası oluşturmasıdır. glRotatef() ile de şeklimizi kendini sürekli yineleyen fonksiyonumuzda (ki biz bu yineleme rutinini form içindeki Main() in içinde belirteceğiz - buna daha sonra değineceğim - ) döndürerek şeklin her bir yinelemede farklı bir tarafını görme şansına sahip oluyoruz. Bu fonksiyonun tam olarak ne işe yaradığını öğrenmek için farklı parametre değerleri girerek deneyip görmek en güzel yöntemdir.

&lt;br&gt;&lt;br&gt;
Bildiğimiz gibi, şeklimizi glBegin() ve glEnd() fonksiyonları arasında tanımlıyoruz. Eğer bir dörtgen dizisi belirleyecek isek, bunu bu fonksiyonlar arasında yapmamız gereklidir. Biz uygulamamızda parametre olarak GL_QUADS girerek dörtgen çizeceğimizi belirtiyoruz. Çizeceğimiz geometrik şeklin koordinatlarını belirtmeden önce hangi renkte olması gerektiğini bildirmemiz gereklidir. Renk belirtiminin nasıl olduğuna daha önce değinmiştik.

&lt;br&gt;&lt;br&gt;
Modelimiz ev olduğu için, bir küp oluşturmalıyız. Evin çatısı için 4 farklı üçgen belirtmeliyiz. Her bir üçgenin sadece tek bir ortak Vertex’i vardır. Diğer köşe noktalarını evin duvarlarının üst köşelerine konumlandırıyoruz.

&lt;br&gt;&lt;br&gt;
Öncelikle ’Küp’ isim uzayımızın kodlarını inceleyelim. Daha sonra form sınıfının kodlarına değineceğiz. Gerekli açıklamaları kodların arasında bulabilirsiniz. Daha detaylı bilgi için, OpenGL kırmızı ve mavi kitaba başvurmanızı öneririm. 

&lt;br&gt;&lt;br&gt;
&lt;textarea cols=75 rows=20&gt;
using System;
using System.Drawing;
using CsGL.OpenGL; 
using System.Windows.Forms;

namespace Küp
{
       public class Ourview : OpenGLControl
       {
              public bool finished = false;

              public Ourview() : base() //Kurucu fonksiyonumuz
              {
                     this.KeyDown += new KeyEventHandler(Ourview_OnKeyDown);
              }


              protected void Ourview_OnKeyDown(object Sender, KeyEventArgs kea)
              {
                     //eğer escape basılırsa uygulama sona erer
                     if(kea.KeyCode==Keys.Q&amp;&amp;kea.Modifiers == Keys.Shift)
                     {
                            Application.Exit();
                     }
              } 
              //Köşe noktalarını bir değişkenle ifade ettik çünkü buradan değişitrerek şeklin ne kadar büyük olacağını belirleyebiliriz.
              private float fEksi = -1.0f; 
              private float fArti = +1.0f;
              private float fDondur = 0.0f;

              public override void glDraw()
              { 
                     GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);//Ekranı ve derinlik tamponunu siler 
                     GL.glLoadIdentity(); //O anki model matrisini sıfırlar 

                     GL.glTranslatef( 0.0f,0.0f,-8.0f );// viewport = 0 0 0 ve böylece derinlik 8 dır. 
                     GL.glRotatef( fDondur, 1.0f, 1.0f, 1.0f );//modelimizi fDondur açısıyla yerleştirdiğimiz koordinat etrafında döndürürür


                     GL.glBegin(GL.GL_QUADS); // Geometrik şeklimizin ne olacağı. Burada dörtgen belirttik.

                     //üst yüz 
                     GL.glColor3f(1.0f,1.0f,0.0f);//sarı renk
                     GL.glVertex3f( fArti, fArti, fArti);
                     GL.glVertex3f( fArti, fArti, fEksi);
                     GL.glVertex3f( fEksi, fArti, fEksi); 
                     GL.glVertex3f( fEksi, fArti, fArti); 

                     //alt yüz  
                     GL.glColor3f(0.0f,1.0f,1.0f);//cyan renk
                     GL.glVertex3f( fArti, fEksi, fArti);
                     GL.glVertex3f( fArti, fEksi, fEksi);
                     GL.glVertex3f( fEksi, fEksi, fEksi);
                     GL.glVertex3f( fEksi, fEksi, fArti); 


                     //arka yüz
                     GL.glColor3f(1.0f,0.0f,0.0f);//kırmızı renk
                     GL.glVertex3f(fArti,fArti,fEksi);
                     GL.glVertex3f(fArti,fEksi,fEksi);
                     GL.glVertex3f(fEksi,fEksi,fEksi);
                     GL.glVertex3f(fEksi,fArti,fEksi);


                     //ön yüz
                     GL.glColor3f(0.0f,0.0f,1.0f);//mavi renk
                     GL.glVertex3f(fArti,fArti,fArti);
                     GL.glVertex3f(fArti,fEksi,fArti);
                     GL.glVertex3f(fEksi,fEksi,fArti);
                     GL.glVertex3f(fEksi,fArti,fArti);

                     //Sağ yüz
                     GL.glColor3f(0.0f,1.0f,0.0f);//yeşil renk
                     GL.glVertex3f(fArti,fArti,fArti);
                     GL.glVertex3f(fArti,fEksi,fArti);
                     GL.glVertex3f(fArti,fEksi,fEksi);
                     GL.glVertex3f(fArti,fArti,fEksi);


                     //sol yüz
                     GL.glColor3f(0.5f,1.0f,0.5f);
                     GL.glVertex3f(fEksi,fEksi,fEksi);
                     GL.glVertex3f(fEksi,fArti,fEksi);
                     GL.glVertex3f(fEksi,fArti,fArti);
                     GL.glVertex3f(fEksi,fEksi,fArti);


                     GL.glEnd();

                     GL.glBegin(GL.GL_TRIANGLES);
                     //ön yüz için
                     GL.glColor3f(1.0f,0.5f,0.2f);
                     GL.glVertex3f(fArti,fArti,fArti);
                     GL.glVertex3f(fEksi,fArti,fArti);
                     GL.glVertex3f(0.0f,2*fArti,0.0f);

                     //sol yüz için 
                     GL.glColor3f(1.0f,0.2f,0.5f);
                     GL.glVertex3f(fEksi,fArti,fArti);
                     GL.glVertex3f(fEksi,fArti,fEksi);
                     GL.glVertex3f(0.0f,2*fArti,0.0f);

                     //sağ yüz için üçgen
                     GL.glColor3f(1.0f,0.25f,0.75f);
                     GL.glVertex3f(fArti,fArti,fEksi);
                     GL.glVertex3f(fArti,fArti,fArti);
                     GL.glVertex3f(0.0f,2*fArti,0.0f);

                     //arka yüz için üçgen
                     GL.glColor3f(1.0f,0.75f,0.75f);
                     GL.glVertex3f(fEksi,fArti,fEksi);
                     GL.glVertex3f(fArti,fArti,fEksi);
                     GL.glVertex3f(0.0f,2*fArti,0.0f);

                     GL.glEnd();


                     fDondur += 1.25f; // Döndürme açımız 
              }


              protected override void InitGLContext() 
              {
                     GL.glShadeModel(GL.GL_SMOOTH); // Yumuşak bir gölgelendirme sağlar
                     GL.glClearColor(1.0f, 1.0f, 1.0f, 0.5f); // arka plan rengi
                     GL.glClearDepth(1.0f); // Derinlik Tamponu kurmak için
                     GL.glEnable(GL.GL_DEPTH_TEST); // Derinlik testini etkin kılar
                     GL.glDepthFunc(GL.GL_LEQUAL); // Yapılcak derinlik testinin tipi
                     GL.glHint(GL.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST); // Çok iyi perspektif Hesaplamaları için
              } 

              //Form boyutu değiştiğinde neler yapmamız gerektiği burada verilmiştir. 
              protected override void OnSizeChanged(EventArgs e)
              {
                     base.OnSizeChanged(e);
                     Size s = Size;

                     GL.glMatrixMode(GL.GL_PROJECTION);//izdüşüm matrisini seçer
                     GL.glLoadIdentity();//model matrisini sıfırlar
                     GL.gluPerspective(45.0f, (double)s.Width /(double) s.Height, 0.1f, 100.0f);//Çerçevenin en boy oranı hesaplanarak 
                     GL.glMatrixMode(GL.GL_MODELVIEW);//model matrisini seçer
                     GL.glLoadIdentity();//ve daha sonra model matrisi tekrar sıfırlanır
              }
       }
}

&lt;/textarea&gt;
&lt;br&gt;
Windows uygulaması oluşturduğumuz için, çizimimizi ana formumuz içerisinde göstermemiz gerekmektedir. O halde form için bazı koşullamaları gerçeklememiz gerekmektedir. Oluşturduğumuz ’küp’ isim uzayının ’Ourview’ sınıfını form sınıfımızın private değişkeni olarak tanımlamalıyız. Formumuzun kurucu fonksiyonunda da bazı belirtimler yapmalıyız. Örneğin formun tamamında çizimimizi görmek için. Main fonksiyonununda ise yeni bir referans form tanımlıyoruz ve bu formun finished ve IsDisposed değişkenleri ’false’ oldukça devam etmesini sağlıyoruz. Asıl çizim olayını glDraw() fonksiyonunu çağırarak gerçekleştiriyoruz. Ve formun kendisini sürekli tazelemesini istiyoruz. Böylece süreç içinde değişen olayları her yeni tazelemede görebilmekteyiz.

&lt;br&gt;&lt;br&gt;
&lt;textarea cols=75 rows=20&gt;
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;


        /*Bu çalışma Kocaeli Üniversitesi Elektronik ve Haberleşme Mühendisliğinde İşaret ve Görüntü İşleme Laboratuvarında (KULİS)
         *OpenGL’de 3-B nesne tanımlama projesi kapsamında Yılmaz Ürgün tarafından yapılmıştır. */


namespace Küp
{
        public class Form1 : System.Windows.Forms.Form
        {
                private Küp.Ourview view;

                private System.ComponentModel.Container components = null;

                public Form1()
                {
                        InitializeComponent();

                        this.view = new Küp.Ourview(); // view sınıfı
                        this.view.Parent = this;
                        this.view.Dock = DockStyle.Fill; // Tüm formu doldurmasını sağlar
                        this.Show();
                }


                protected override void Dispose( bool disposing )
                {
                        if( disposing )
                        {
                                if (components != null) 
                                {
                                        components.Dispose();
                                }
                        }
                        base.Dispose( disposing );
                }

                #region Windows Form Designer generated code

                private void InitializeComponent()
                {

                                this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
                                this.ClientSize = new System.Drawing.Size(552, 454);
                                this.Name = "Form1";
                                this.Text = "OpenGL - KOÜ KULİS 2006";

                }
                #endregion


                [STAThread]
                static void Main() 
                {
                                Form1 form = new Form1();// yeni bir form oluşturuyoruz.

                                while((!form.view.finished) &amp;&amp; (!form.IsDisposed)) // sonlandırma false ve Dispose false ise devam et.
                                {
                                                form.view.glDraw();//Çizimi yapan fonksiyon


                                                form.Refresh();//Formu tazele
                                                Application.DoEvents();
                                }
                                form.Dispose();

                } 
       }
} 
&lt;/textarea&gt;
&lt;br&gt;
Projemizi çalıştırdıktan sonra aşağıdaki ekran çıktısını elde ettik.

&lt;br&gt;&lt;br&gt;
&lt;img src="http://www.csharpnedir.com/mimages/YilmazUrgun/CsOpenGL7.jpg" align=center&gt;
&lt;a href="http://www.csharpnedir.com/makalegoster.asp?MId=661"&gt;kaynak: http://www.csharpnedir.com/makalegoster.asp?MId=661&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-1904682118406860915?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/1904682118406860915/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=1904682118406860915' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/1904682118406860915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/1904682118406860915'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/02/c-opengl-kullanm.html' title='C# Opengl Kullanımı'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-5221103471789796040</id><published>2008-02-27T07:30:00.000-08:00</published><updated>2008-02-27T07:31:43.503-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Opengl'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Opengl Samples - Depth</title><content type='html'>&lt;a href="http://www.sgi.com/products/software/opengl/examples/samples/images/depth.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px;" src="http://www.sgi.com/products/software/opengl/examples/samples/images/depth.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br&gt;

&lt;textarea cols=75 rows=50&gt;
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;GL/glut.h&gt;


#define CI_OFFSET_1 16
#define CI_OFFSET_2 32


GLenum rgb, doubleBuffer;

GLenum antiAlias, stipple;
GLubyte stippleBits[32*4] = {
    0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
    0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
    0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
    0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
    0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
    0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
    0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
    0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
    0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
    0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
    0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
    0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
    0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
    0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
    0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
    0xAA, 0xAA, 0xAA, 0xAA, 0x55, 0x55, 0x55, 0x55,
};


static void Init(void)
{
    GLint i;

    if (!rgb) {
 for (i = 0; i &lt; 16; i++) {
     glutSetColor(i+CI_OFFSET_1, 0.0, 0.0, i/15.0);
     glutSetColor(i+CI_OFFSET_2, 0.0, i/15.0, 0.0);
 }
    }

    glClearColor(0.0, 0.0, 0.0, 0.0);
    glClearIndex(0.0);

    glPolygonStipple(stippleBits);

    antiAlias = GL_FALSE;
    stipple = GL_FALSE;
}

static void Reshape(int width, int height)
{

    glViewport(0, 0, width, height);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0);
    glMatrixMode(GL_MODELVIEW);
}

static void Key(unsigned char key, int x, int y)
{

    switch (key) {
      case '1':
 antiAlias = !antiAlias;
 glutPostRedisplay();
 break;
      case '2':
 stipple = !stipple;
 glutPostRedisplay();
 break;
      case 27:
 exit(0);
    }
}

static void Draw(void)
{
    GLint ci1, ci2;

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    if (antiAlias) {
 ci1 = CI_OFFSET_1;
 ci2 = CI_OFFSET_2;
 glBlendFunc(GL_SRC_ALPHA, GL_ONE);
 glEnable(GL_BLEND);
 glEnable(GL_POLYGON_SMOOTH);
 glDisable(GL_DEPTH_TEST);
    } else {
 ci1 = 4;
 ci2 = 2;
 glDisable(GL_BLEND);
 glDisable(GL_POLYGON_SMOOTH);
 glEnable(GL_DEPTH_TEST);
    }

    if (stipple) {
 glEnable(GL_POLYGON_STIPPLE);
    } else {
 glDisable(GL_POLYGON_STIPPLE);
    }

    glBegin(GL_TRIANGLES);
 (rgb) ? glColor3f(0.0, 0.0, 1.0) : glIndexi(ci1);
 glVertex3f( 0.9, -0.9, -30.0);
 glVertex3f( 0.9,  0.9, -30.0);
 glVertex3f(-0.9,  0.0, -30.0);
 (rgb) ? glColor3f(0.0, 1.0, 0.0) : glIndexi(ci2);
 glVertex3f(-0.9, -0.9, -40.0);
 glVertex3f(-0.9,  0.9, -40.0);
 glVertex3f( 0.9,  0.0, -25.0);
    glEnd();

    if (doubleBuffer) {
 glutSwapBuffers();
    } else {
 glFlush();
    }
}

static void Args(int argc, char **argv)
{
    GLint i;

    rgb = GL_TRUE;
    doubleBuffer = GL_FALSE;

    for (i = 1; i &lt; argc; i++) {
 if (strcmp(argv[i], "-ci") == 0) {
     rgb = GL_FALSE;
 } else if (strcmp(argv[i], "-rgb") == 0) {
     rgb = GL_TRUE;
 } else if (strcmp(argv[i], "-sb") == 0) {
     doubleBuffer = GL_FALSE;
 } else if (strcmp(argv[i], "-db") == 0) {
     doubleBuffer = GL_TRUE;
 }
    }
}

int main(int argc, char **argv)
{
    GLenum type;

    glutInit(&amp;argc, argv);
    Args(argc, argv);

    type = GLUT_DEPTH;
    type |= (rgb) ? GLUT_RGB : GLUT_INDEX;
    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;
    glutInitDisplayMode(type);
    glutInitWindowSize(300, 300);
    glutCreateWindow("Depth Test");

    Init();

    glutReshapeFunc(Reshape);
    glutKeyboardFunc(Key);
    glutDisplayFunc(Draw);
    glutMainLoop();
}


&lt;/textarea&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-5221103471789796040?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/5221103471789796040/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=5221103471789796040' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/5221103471789796040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/5221103471789796040'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/02/opengl-samples-depth.html' title='Opengl Samples - Depth'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-5591855869520570718</id><published>2008-02-27T07:28:00.000-08:00</published><updated>2008-02-27T07:29:56.322-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Opengl'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Opengl Samples - Copy</title><content type='html'>&lt;a href="http://www.sgi.com/products/software/opengl/examples/samples/images/copy.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px;" src="http://www.sgi.com/products/software/opengl/examples/samples/images/copy.jpg" border="0" alt="" /&gt;&lt;/a&gt;
&lt;br&gt;
&lt;textarea cols=75 rows=50&gt;
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;GL/glut.h&gt;
#include "rgb.h"


GLenum doubleBuffer;
GLint windW = 300, windH = 300;

RGBImageRec *image = NULL;
float point[3];
float zoom;
GLint x, y;


static void Init(void)
{

    glClearColor(0.0, 0.0, 0.0, 0.0);

    x = 0;
    y = windH;
    zoom = 1.8;
}

static void Reshape(int width, int height)
{

    windW = width;
    windH = height;

    glViewport(0, 0, windW, windH);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0, windW, 0, windH);
    glMatrixMode(GL_MODELVIEW);
}

static void Key(unsigned char key, int x, int y)
{

    switch (key) {
      case 27:
        exit(0);
    }
}

static void SpecialKey(int key, int x, int y)
{

    switch (key) {
      case GLUT_KEY_UP:
 zoom += 0.2;
 glutPostRedisplay();
 break;
      case GLUT_KEY_DOWN:
 zoom -= 0.2;
 if (zoom &lt; 0.2) {
     zoom = 0.2;
 }
 glutPostRedisplay();
 break;
    }
}

static void Mouse(int button, int state, int mouseX, int mouseY)
{

    if (state == GLUT_DOWN) {
 x = mouseX;
 y = mouseY;
 glutPostRedisplay();
    }
}

static void Draw(void)
{

    glClear(GL_COLOR_BUFFER_BIT);

    point[0] = (windW / 2) - (image-&gt;sizeX / 2);
    point[1] = (windH / 2) - (image-&gt;sizeY / 2);
    point[2] = 0;
    glRasterPos3fv(point);

    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
    glPixelZoom(1.0, 1.0);
    glDrawPixels(image-&gt;sizeX, image-&gt;sizeY, GL_RGB, GL_UNSIGNED_BYTE,
   image-&gt;data);

    point[0] = (float)x;
    point[1] = windH - (float)y;
    point[2] = 0.0;
    glRasterPos3fv(point);

    glPixelZoom(zoom, zoom);
    glCopyPixels((windW/2)-(image-&gt;sizeX/2), (windH/2)-(image-&gt;sizeY/2),
   image-&gt;sizeX, image-&gt;sizeY, GL_COLOR);

    if (doubleBuffer) {
 glutSwapBuffers();
    } else {
 glFlush();
    }
}

static void Args(int argc, char **argv)
{
    GLint i;

    doubleBuffer = GL_FALSE;

    for (i = 1; i &lt; argc; i++) {
 if (strcmp(argv[i], "-sb") == 0) {
     doubleBuffer = GL_FALSE;
 } else if (strcmp(argv[i], "-db") == 0) {
     doubleBuffer = GL_TRUE;
 } else if (strcmp(argv[i], "-f") == 0) {
     if (i+1 &gt;= argc || argv[i+1][0] == '-') {
  printf("-f (No file name).\n");
  exit(1);
     } else {
  image = rgbImageLoad(argv[++i]);
  if (image == NULL) {
      printf("-f (bad file name).\n");
      exit(1);
  }
     }
 }
    }
}

int main(int argc, char **argv)
{
    GLenum type;

    glutInit(&amp;argc, argv);
    Args(argc, argv);

    if (image == NULL) {
 printf("No texture file.\n");
 exit(1);
    }

    type = GLUT_RGB;
    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;
    glutInitDisplayMode(type);
    glutInitWindowSize(windW, windH);
    glutCreateWindow("Copy Test");

    Init();

    glutReshapeFunc(Reshape);
    glutKeyboardFunc(Key);
    glutSpecialFunc(SpecialKey);
    glutMouseFunc(Mouse);
    glutDisplayFunc(Draw);
    glutMainLoop();
}


&lt;/textarea&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-5591855869520570718?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/5591855869520570718/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=5591855869520570718' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/5591855869520570718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/5591855869520570718'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/02/opengl-samples-copy.html' title='Opengl Samples - Copy'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-1282597091046086027</id><published>2008-02-27T07:25:00.000-08:00</published><updated>2008-02-27T07:27:32.937-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Opengl'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Opengl Samples - Bitmap</title><content type='html'>&lt;a href="http://www.sgi.com/products/software/opengl/examples/samples/images/bitmap1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px;" src="http://www.sgi.com/products/software/opengl/examples/samples/images/bitmap1.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br&gt;

&lt;textarea cols=75 rows=50&gt;
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;GL/glut.h&gt;


#define OPENGL_WIDTH 24
#define OPENGL_HEIGHT 13


GLenum rgb, doubleBuffer;

float boxA[3] = {
    0, 0, 0
};
float boxB[3] = {
    -100, 0, 0
};
float boxC[3] = {
    100, 0, 0
};
float boxD[3] = {
    0, 95, 0
};
float boxE[3] = {
    0, -105, 0
};
GLubyte OpenGL_bits1[] = {
   0x00, 0x03, 0x00,
   0x7f, 0xfb, 0xff,
   0x7f, 0xfb, 0xff,
   0x00, 0x03, 0x00,
   0x3e, 0x8f, 0xb7,
   0x63, 0xdb, 0xb0,
   0x63, 0xdb, 0xb7,
   0x63, 0xdb, 0xb6,
   0x63, 0x8f, 0xf3,
   0x63, 0x00, 0x00,
   0x63, 0x00, 0x00,
   0x63, 0x00, 0x00,
   0x3e, 0x00, 0x00,
};
GLubyte OpenGL_bits2[] = {
   0x00, 0x00, 0x00,
   0xff, 0xff, 0x01,
   0xff, 0xff, 0x01, 
   0x00, 0x00, 0x00,
   0xf9, 0xfc, 0x01, 
   0x8d, 0x0d, 0x00,
   0x8d, 0x0d, 0x00, 
   0x8d, 0x0d, 0x00,
   0xcc, 0x0d, 0x00, 
   0x0c, 0x4c, 0x0a,
   0x0c, 0x4c, 0x0e, 
   0x8c, 0xed, 0x0e,
   0xf8, 0x0c, 0x00, 
};
GLubyte logo_bits[] = {
   0x00, 0x66, 0x66, 
   0xff, 0x66, 0x66, 
   0x00, 0x00, 0x00, 
   0xff, 0x3c, 0x3c, 
   0x00, 0x42, 0x40, 
   0xff, 0x42, 0x40, 
   0x00, 0x41, 0x40, 
   0xff, 0x21, 0x20, 
   0x00, 0x2f, 0x20, 
   0xff, 0x20, 0x20, 
   0x00, 0x10, 0x90, 
   0xff, 0x10, 0x90, 
   0x00, 0x0f, 0x10, 
   0xff, 0x00, 0x00, 
   0x00, 0x66, 0x66, 
   0xff, 0x66, 0x66, 
};


static void Init(void)
{

    if (!rgb) {
 glutSetColor(0, 0.0, 0.0, 0.0);
 glutSetColor(1, 1.0, 0.0, 0.0);
 glutSetColor(2, 0.0, 1.0, 0.0);
 glutSetColor(3, 1.0, 1.0, 0.0);
 glutSetColor(4, 0.0, 0.0, 1.0);
 glutSetColor(5, 1.0, 0.0, 1.0);
 glutSetColor(6, 0.0, 1.0, 1.0);
 glutSetColor(7, 1.0, 1.0, 1.0);
    }

    glClearColor(0.0, 0.0, 0.0, 0.0);
    glClearIndex(0.0);
}

static void Reshape(int width, int height)
{

    glViewport(0, 0, width, height);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(-175, 175, -175, 175);
    glMatrixMode(GL_MODELVIEW);
}

static void Key(unsigned char key, int x, int y)
{

    switch (key) {
      case 27:
 exit(0);
    }
}

static void Draw(void)
{

    glClear(GL_COLOR_BUFFER_BIT);

    glRasterPos3fv(boxA);
    glPixelStorei(GL_UNPACK_ROW_LENGTH, 24);
    glPixelStorei(GL_UNPACK_SKIP_PIXELS, 8);
    glPixelStorei(GL_UNPACK_SKIP_ROWS, 2);
    glPixelStorei(GL_UNPACK_LSB_FIRST, GL_FALSE);
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
    glBitmap(16, 12, 8.0, 0.0, 0.0, 0.0, logo_bits);
      
    glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
    glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0);
    glPixelStorei(GL_UNPACK_SKIP_ROWS, 0);
    glPixelStorei(GL_UNPACK_LSB_FIRST, GL_TRUE);
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

    (rgb) ? glColor3f(1.0, 1.0, 1.0) : glIndexi(7);
    glRasterPos3fv(boxB);
    glBitmap(OPENGL_WIDTH, OPENGL_HEIGHT, OPENGL_WIDTH, 0.0, OPENGL_WIDTH, 0.0,
      OpenGL_bits1);
    glBitmap(OPENGL_WIDTH, OPENGL_HEIGHT, OPENGL_WIDTH, 0.0, OPENGL_WIDTH, 0.0,
      OpenGL_bits2);

    (rgb) ? glColor3f(0.0, 1.0, 1.0) : glIndexi(6);
    glRasterPos3fv(boxC);
    glBitmap(OPENGL_WIDTH, OPENGL_HEIGHT, OPENGL_WIDTH, 0.0, OPENGL_WIDTH, 0.0,
      OpenGL_bits1);
    glBitmap(OPENGL_WIDTH, OPENGL_HEIGHT, OPENGL_WIDTH, 0.0, OPENGL_WIDTH, 0.0,
      OpenGL_bits2);

    (rgb) ? glColor3f(1.0, 0.0, 1.0) : glIndexi(5);
    glRasterPos3fv(boxD);
    glBitmap(OPENGL_WIDTH, OPENGL_HEIGHT, OPENGL_WIDTH, 0.0, OPENGL_WIDTH, 0.0,
      OpenGL_bits1);
    glBitmap(OPENGL_WIDTH, OPENGL_HEIGHT, OPENGL_WIDTH, 0.0, OPENGL_WIDTH, 0.0,
      OpenGL_bits2);

    (rgb) ? glColor3f(1.0, 1.0, 0.0) : glIndexi(3);
    glRasterPos3fv(boxE);
    glBitmap(OPENGL_WIDTH, OPENGL_HEIGHT, OPENGL_WIDTH, 0.0, OPENGL_WIDTH, 0.0,
      OpenGL_bits1);
    glBitmap(OPENGL_WIDTH, OPENGL_HEIGHT, OPENGL_WIDTH, 0.0, OPENGL_WIDTH, 0.0,
      OpenGL_bits2);

    if (doubleBuffer) {
 glutSwapBuffers();
    } else {
 glFlush();
    }
}

static void Args(int argc, char **argv)
{
    GLint i;

    rgb = GL_TRUE;
    doubleBuffer = GL_FALSE;

    for (i = 1; i &lt; argc; i++) {
 if (strcmp(argv[i], "-ci") == 0) {
     rgb = GL_FALSE;
 } else if (strcmp(argv[i], "-rgb") == 0) {
     rgb = GL_TRUE;
 } else if (strcmp(argv[i], "-sb") == 0) {
     doubleBuffer = GL_FALSE;
 } else if (strcmp(argv[i], "-db") == 0) {
     doubleBuffer = GL_TRUE;
 }
    }
}

int main(int argc, char **argv)
{
    GLenum type;

    glutInit(&amp;argc, argv);
    Args(argc, argv);

    type = (rgb) ? GLUT_RGB : GLUT_INDEX;
    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;
    glutInitDisplayMode(type);
    glutInitWindowSize(300, 300);
    glutCreateWindow("Bitmap Test");

    Init();

    glutReshapeFunc(Reshape);
    glutKeyboardFunc(Key);
    glutDisplayFunc(Draw);
    glutMainLoop();
}


&lt;/textarea&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-1282597091046086027?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/1282597091046086027/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=1282597091046086027' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/1282597091046086027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/1282597091046086027'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/02/opengl-samples-bitmap.html' title='Opengl Samples - Bitmap'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-4728873359236508664</id><published>2008-02-27T07:07:00.000-08:00</published><updated>2008-02-27T07:17:42.966-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Opengl'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Opengl Samples - Accum</title><content type='html'>&lt;a href="http://www.sgi.com/products/software/opengl/examples/samples/images/accum.jpg"&gt;&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 320px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://www.sgi.com/products/software/opengl/examples/samples/images/accum.jpg" border="0" /&gt;&lt;/a&gt;

&lt;textarea rows="50" cols="75"&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;
#include &lt;GL/glut.h&gt;


GLenum doubleBuffer;
GLint thing1, thing2;


static void Init(void)
{

    glClearColor(0.0, 0.0, 0.0, 0.0);
    glClearAccum(0.0, 0.0, 0.0, 0.0);

    thing1 = glGenLists(1);
    glNewList(thing1, GL_COMPILE);
    glColor3f(1.0, 0.0, 0.0);
    glRectf(-1.0, -1.0, 1.0, 0.0);
    glEndList();

    thing2 = glGenLists(1);
    glNewList(thing2, GL_COMPILE);
    glColor3f(0.0, 1.0, 0.0);
    glRectf(0.0, -1.0, 1.0, 1.0);
    glEndList();
}

static void Reshape(int width, int height)
{

    glViewport(0, 0, width, height);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

static void Key(unsigned char key, int x, int y)
{

    switch (key) {
      case '1':
 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
 glutPostRedisplay();
 break;
      case '2':
 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
 glutPostRedisplay();
 break;
      case 27:
 exit(0);
    }
}

static void Draw(void)
{

    glPushMatrix();

    glScalef(0.8, 0.8, 1.0);

    glClear(GL_COLOR_BUFFER_BIT);
    glCallList(thing1);
    glAccum(GL_LOAD, 0.5);

    glClear(GL_COLOR_BUFFER_BIT);
    glCallList(thing2);
    glAccum(GL_ACCUM, 0.5);

    glAccum(GL_RETURN, 1.0);

    glPopMatrix();

    if (doubleBuffer) {
 glutSwapBuffers();
    } else {
 glFlush();
    }
}

static void Args(int argc, char **argv)
{
    GLint i;

    doubleBuffer = GL_FALSE;

    for (i = 1; i &lt; argc; i++) {
 if (strcmp(argv[i], "-sb") == 0) {
     doubleBuffer = GL_FALSE;
 } else if (strcmp(argv[i], "-db") == 0) {
     doubleBuffer = GL_TRUE;
 }
    }
}

int main(int argc, char **argv)
{
    GLenum type;

    glutInit(&amp;argc, argv);
    Args(argc, argv);

    type = GLUT_RGB | GLUT_ACCUM;
    type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;
    glutInitDisplayMode(type);
    glutInitWindowSize(300, 300);
    glutCreateWindow("Accum Test");

    Init();

    glutReshapeFunc(Reshape);
    glutKeyboardFunc(Key);
    glutDisplayFunc(Draw);
    glutMainLoop();
}


&lt;/textarea&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-4728873359236508664?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/4728873359236508664/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=4728873359236508664' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/4728873359236508664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/4728873359236508664'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/02/opengl-samples-accum.html' title='Opengl Samples - Accum'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-3748429261903677060</id><published>2008-02-27T05:31:00.000-08:00</published><updated>2008-02-27T07:23:41.992-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual C#'/><title type='text'>Kontrol ifadeleri - if</title><content type='html'>c# ta koşul ifadesini kullanarak programın bir parçasını seçerek çalıştırabilirsiniz...&lt;br&gt;&lt;br&gt;

&lt;span style="color:#3366ff;"&gt;if&lt;/span&gt;(&lt;span style="color:#cc0000;"&gt;kosul&lt;/span&gt;) ifade;&lt;br&gt;&lt;br&gt;

Burada kosul boolean (true=dogru, false=yanlis) deyimidir...&lt;br&gt;&lt;br&gt;

&lt;span style="color:#3366ff;"&gt;if &lt;/span&gt;(10 &lt;&gt;.WriteLine("10 büyüktür 9 dan"); }&lt;br&gt;&lt;br&gt;

Burada 10, 9'dan büyük ise ekrana "10 büyüktür 9 dan" yazdırır. Yani 10, 9'dan büyük olmasa ekrana yazdırma işlemi gerçekleşmezdi...&lt;br&gt;&lt;br&gt;

if Operatörleri ve Anlamları&lt;br&gt;&lt;br&gt;

&lt;span style="color:#993300;"&gt;Operatör Anlamı&lt;/span&gt;&lt;br&gt;
&lt;span style="color:#993300;"&gt;--------- ---------&lt;/span&gt;&lt;br&gt;
&lt;span style="color:#993300;"&gt;&lt;&gt;&lt;br&gt;
&lt;span style="color:#993300;"&gt;&lt;= Küçük veya eşittir&lt;/span&gt;&lt;br&gt;
&lt;span style="color:#993300;"&gt;&gt; Büyüktür&lt;/span&gt;&lt;br&gt;
&lt;span style="color:#993300;"&gt;&gt;= Büyüktür veya eşittir&lt;/span&gt;&lt;br&gt;
&lt;span style="color:#993300;"&gt;== Eşittir&lt;/span&gt;&lt;br&gt;
&lt;span color="#993300"&gt;!= Eşit değildir&lt;/span&gt;&lt;br&gt;
&lt;br&gt;
Örnek program:&lt;br&gt;&lt;br&gt;

&lt;span style="color:#3366ff;"&gt;using&lt;/span&gt; System;&lt;br&gt;

&lt;span style="color:#3333ff;"&gt;class&lt;/span&gt; IfDemo {&lt;br&gt;
&lt;span style="color:#3366ff;"&gt;public static void&lt;/span&gt; Main()&lt;br&gt;
{&lt;br&gt;
&lt;span style="color:#3366ff;"&gt;int&lt;/span&gt; a,b,c;&lt;br&gt;
&lt;br&gt;
a=2; b=3;&lt;br&gt;
&lt;br&gt;
&lt;span style="color:#3366ff;"&gt;if&lt;/span&gt; ( a &lt; color="#009900"&gt;Console&lt;/span&gt;.WriteLine&lt;br&gt;("a küçüktür b den");&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
&lt;span style="color:#3366ff;"&gt;if&lt;/span&gt; ( a == b ) {&lt;br&gt;
&lt;span style="color:#009900;"&gt;Console.&lt;/span&gt;WriteLine("a ile b eşit"); //bu ekranda&lt;br&gt; bişey göstermez çünkü a ile b eşit değil&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
c = a - b; // c -1 olur.&lt;br&gt;
&lt;br&gt;
&lt;span style="color:#3366ff;"&gt;if&lt;/span&gt; ( c &gt;= 0) { &lt;span style="color:#009900&lt;br&gt;;"&gt;Console&lt;/span&gt;.WriteLine("c sıfırdan büyük veya eşit değil"); }&lt;br&gt;
&lt;span style="color:#3366ff;"&gt;if&lt;/span&gt; ( c &lt;&gt;.WriteLine("c sıfırdan küçük değil"); }&lt;br&gt;
&lt;br&gt;
c = b - a; // c 1 olur.&lt;br&gt;
&lt;br&gt;
&lt;span style="color:#3366ff;"&gt;if&lt;/span&gt; ( c &gt;= 0) { &lt;span style="color:#009900&lt;br&gt;;"&gt;Console&lt;/span&gt;.WriteLine("c 1 dir. sıfırdan büyüktür"); }&lt;br&gt;
&lt;span style="color:#3366ff;"&gt;if &lt;/span&gt;( c &lt;&gt;.WriteLine("c sıfırdan küçük değil bu &lt;br&gt;yazı gözükmez"); }&lt;br&gt;
}&lt;br&gt;
}&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-3748429261903677060?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/3748429261903677060/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=3748429261903677060' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/3748429261903677060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/3748429261903677060'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/02/kontrol-ifadeleri-if.html' title='Kontrol ifadeleri - if'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-3030913452379248823</id><published>2008-02-27T05:11:00.000-08:00</published><updated>2008-02-27T07:24:51.146-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual C#'/><title type='text'>İkinci Basit Programımız</title><content type='html'>Aşağıdaki program x ve y adında iki değişken oluşturur:&lt;br&gt;&lt;br&gt;

&lt;span style="color:#3366ff;"&gt;using&lt;/span&gt; System;&lt;br&gt;&lt;br&gt;

&lt;span style="color:#3366ff;"&gt;class&lt;/span&gt; Ornek2 {&lt;br&gt;
  &lt;span style="color:#3366ff;"&gt;public static void&lt;/span&gt; Main() {&lt;br&gt;
    &lt;span style="color:#3366ff;"&gt;int&lt;/span&gt; x; //integer (Tamsayı) tipinde x ve y &lt;br&gt;değişkenleri
    &lt;span style="color:#3366ff;"&gt;int&lt;/span&gt; y;&lt;br&gt;&lt;br&gt;

    x = 100; //x'e 100 değeri atandı.&lt;br&gt;&lt;br&gt;

    &lt;span style="color:#33cc00;"&gt;Console&lt;/span&gt;.WriteLine("y değişkeninin değeri: " &lt;br&gt;+ x);&lt;br&gt;

    y = x / 2;&lt;br&gt;&lt;br&gt;

    &lt;span style="color:#33cc00;"&gt;Console.&lt;/span&gt;WriteLine("y değişkeninin değeri (x in yarısı): " + y);&lt;br&gt;&lt;br&gt;
  }&lt;br&gt;
}&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-3030913452379248823?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/3030913452379248823/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=3030913452379248823' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/3030913452379248823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/3030913452379248823'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/02/ikinci-basit-programmz.html' title='İkinci Basit Programımız'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-6378153137635713652</id><published>2008-02-27T03:19:00.000-08:00</published><updated>2008-02-27T03:25:23.446-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Matematik ve Fizik'/><title type='text'>Vektör Hesaplamaları</title><content type='html'>&lt;table style="BORDER-COLLAPSE: collapse" bordercolor="#a4a4a4" cellspacing="0" cellpadding="0" width="100%" bgcolor="#f8f9fa" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td background="images/FormBaslik.gif"&gt;

&lt;td width="100%"&gt;Bütün yazı ve diğer yazılar boyunca kulanılacak işaretler ve anlamları:

&lt;b&gt;Sqrt&lt;/b&gt; -&gt;karekök alma

&lt;b&gt;Sqr&lt;/b&gt; -&gt; karesini alma

&lt;b&gt;vektör&lt;/b&gt; -&gt; vektörün boyu



&lt;b&gt;*&lt;/b&gt; -&gt;çarpma

&lt;b&gt;.&lt;/b&gt; -&gt;skaler carpım

&lt;b&gt;/&lt;/b&gt; -&gt;bölme

&lt;b&gt;+&lt;/b&gt; -&gt;toplama

&lt;b&gt;-&lt;/b&gt; -&gt;çıkarma

&lt;b&gt;sayi&lt;/b&gt; -&gt;mutlağını alma



genelde vektör verirken &lt;b&gt;A B&lt;/b&gt; diye adlandıracağım. Noktaları ise &lt;b&gt;x1,y1,z1 x2,y2,z2 .......&lt;/b&gt; olacak.



&lt;h3&gt;&lt;p align="center"&gt;VEKTÖRLER&lt;/p&gt;&lt;/h3&gt;

2 boyutlu duzlemde bir noktanın kordinatı &lt;b&gt;x y&lt;/b&gt; eksenine göre belirlenirdi .3 boyut da da &lt;b&gt;x y z&lt;/b&gt; eksenleri ile belirlenir. Nasıl ağırlık kg a göre değer buluyosa nasıl hiz m/s ile değer buluyosa 3d dede bi nokta &lt;b&gt;xyz&lt;/b&gt; eksenine göre değer bulur örn) &lt;b&gt;A&lt;/b&gt; noktasının yeri (3 birim &lt;b&gt;x&lt;/b&gt; ekseninde 4 birim &lt;b&gt;y&lt;/b&gt; ekseninde 5 birim &lt;b&gt;z&lt;/b&gt; ekseninde gibi).



&lt;img src="http://www.oyungelistir.org/resimler/makale_resimleri/vektorler/image002.gif" /&gt;



Vektör sayının yanında doğrultusu (&lt;b&gt;d&lt;/b&gt; doğrusu) ve yönü belli (kırmızı ile cizdiğim ok) bir büyüklüktür. örn)hiz, kuvvet vs. Vektörün konumunu örneklerimizde genellikle &lt;b&gt;A&lt;/b&gt; vektörü &lt;b&gt;A(x1,y1,z1)&lt;/b&gt; &lt;b&gt;B&lt;/b&gt; vektörü &lt;b&gt;B(x2,y2,z2)&lt;/b&gt; ile gösterilecek.





&lt;h3&gt;&lt;p align="center"&gt;İKİ VEKTÖRÜN TOPLAMI&lt;/p&gt;&lt;/h3&gt;



&lt;b&gt;TOPLAMA&lt;/b&gt;

&lt;img src="http://www.oyungelistir.org/resimler/makale_resimleri/vektorler/image004.gif" /&gt;



&lt;b&gt;ÇIKARMA&lt;/b&gt;

&lt;img src="http://www.oyungelistir.org/resimler/makale_resimleri/vektorler/image006.gif" /&gt;



İki vektörün toplamını veya farkını alırken ucuca ekleme metodu kulanabilriz.

Şekildede görüldüğü üzere &lt;b&gt;A&lt;/b&gt; vektörüne &lt;b&gt;B&lt;/b&gt; vektörünü ekliyelim (toplayalım)

&lt;b&gt;A&lt;/b&gt; nın bitim noktasına &lt;b&gt;B&lt;/b&gt; vektörünün başlangıcını getirip &lt;b&gt;A&lt;/b&gt; vektörünün baslangıç noktasından &lt;b&gt;B&lt;/b&gt; vektörünün bitim noktasına bir vektör çizersek bu vektör bize &lt;b&gt;A+B&lt;/b&gt; vektörünü verir.



Matematiksel eşiti ise

&lt;b&gt;Toplama&lt;/b&gt;

&lt;b&gt;A+B =R=((x1+x2),(y1+y2),(z1+z2))&lt;/b&gt;

Görüldüğü üzere &lt;b&gt;A&lt;/b&gt; vektörü ile &lt;b&gt;B&lt;/b&gt; vektörünün toplamı olan &lt;b&gt;R&lt;/b&gt; vektörü bulunurken &lt;b&gt;A&lt;/b&gt; vektörünün &lt;b&gt;x&lt;/b&gt; konumu ile &lt;b&gt;B&lt;/b&gt; vektörünün &lt;b&gt;x&lt;/b&gt; konumu &lt;b&gt;y ..y ,z…z&lt;/b&gt; toplanarak yapılıyor .



&lt;b&gt;Çıkarma&lt;/b&gt;

&lt;b&gt;A&lt;/b&gt; vektöründen &lt;b&gt;B&lt;/b&gt; vektörünü çıkardığımızı düşünelim &lt;b&gt;A&lt;/b&gt; vektörünü aynen alıyoruz çıkarılacak olan &lt;b&gt;B&lt;/b&gt; vektörünün ise tersini alıp yukardaki uç uca ekleme metodunu kulanıyoruz.



&lt;b&gt;Bir vektörün tersi ise&lt;/b&gt;

Aşağıdaki şekilde de görüldüğü gibi &lt;b&gt;A&lt;/b&gt; vektörünün tersi &lt;b&gt;A&lt;/b&gt; vektörünün &lt;b&gt;x,y,z&lt;/b&gt; konumlarının ters işaretlisinin alınması ile elde edilir (yani -1 ile çarpma)



&lt;img src="http://www.oyungelistir.org/resimler/makale_resimleri/vektorler/image008.gif" /&gt;



&lt;b&gt;A(x,y,z)&lt;/b&gt; ise &lt;b&gt;A&lt;/b&gt; nın tersi &lt;b&gt;A’(-x,-y,-z)&lt;/b&gt; dir örn( &lt;b&gt;A(4,-4,-5)&lt;/b&gt; ise &lt;b&gt;A’(-4,4,5)&lt;/b&gt; dir )

Cıkarma &lt;b&gt;A-B=((x1-x2),(y1-y2),(z1-z2))&lt;/b&gt;

Bir vektörle aynı yöndeki k kat daha büyük bi vektörü ise =&lt;b&gt;((x1*k),(y1*k),(z1*k))&lt;/b&gt; olarak buluruz.



&lt;b&gt;Peki iki nokta arasındaki vektör nasıl bulunur&lt;/b&gt;



Şimdi &lt;b&gt;A&lt;/b&gt; noktasından &lt;b&gt;B&lt;/b&gt; noktasına doğru bir &lt;b&gt;AB&lt;/b&gt; vektörü düşünün (Aşağıdaki şekildeki gibi bu vektörün doğrultusu &lt;b&gt;A&lt;/b&gt; dan &lt;b&gt;B&lt;/b&gt; ye doğru ve boyu &lt;b&gt;A&lt;/b&gt; noktası ile &lt;b&gt;B&lt;/b&gt; noktası arasındaki mesafe kadardır.



&lt;img src="http://www.oyungelistir.org/resimler/makale_resimleri/vektorler/image010.gif" /&gt;



Şimdi önemli bir nokta var &lt;b&gt;A&lt;/b&gt; noktasından &lt;b&gt;B&lt;/b&gt; noktasına doğru ve &lt;b&gt;B&lt;/b&gt; ye kadar bir vektör tanımlarken şu yolu izliyoruz orjinden &lt;b&gt;A&lt;/b&gt; noktasına kadar bir &lt;b&gt;A&lt;/b&gt; vektörü ve orjinden &lt;b&gt;B&lt;/b&gt; noktasına kadar olan başka bir &lt;b&gt;B&lt;/b&gt; vektörü düşünün şimdi bu iki vektör aşağıda görüldüğü gibi &lt;b&gt;B&lt;/b&gt; vektöründen &lt;b&gt;A&lt;/b&gt; vektörünü çıkarırsak &lt;b&gt;AB&lt;/b&gt; vektörünü elde ederiz.

&lt;img src="http://www.oyungelistir.org/resimler/makale_resimleri/vektorler/image012.gif" /&gt;



Yani &lt;b&gt;AB(x2-x1,y2-y1,z2-z1)&lt;/b&gt; (bu nun böyle olduğu zaten şekillerde gözükmekte) demekki herhangi bir &lt;b&gt;A&lt;/b&gt; noktasından &lt;b&gt;B&lt;/b&gt; noktasına doğru tanımlı vektör =&lt;b&gt;B-A&lt;/b&gt; dır. Bir vektörün boyu ise &lt;b&gt;x,y,z&lt;/b&gt; konumlarının karelerinin kare kökü dür.

&lt;b&gt;AB=B-A=sqrt(sqr(x2-x1)+sqr(y2-y1)+sqr(z2-z1))&lt;/b&gt;



Bunun isbatı da aşağıda gösterilmiştir.



&lt;img src="http://www.oyungelistir.org/resimler/makale_resimleri/vektorler/image014.gif" /&gt;



&lt;b&gt;Örnek:&lt;/b&gt;



Şimdi &lt;b&gt;A&lt;/b&gt; noktasının kordinatlarına &lt;b&gt;(1,2,2)&lt;/b&gt; diyelim &lt;b&gt;B&lt;/b&gt; ninkilere ise &lt;b&gt;(2,4,6)&lt;/b&gt;



&lt;b&gt;AB&lt;/b&gt; vektörü ise=&lt;b&gt;B-A= ((2-1),(4-2),(6-2))

AB(1,2,4)&lt;/b&gt; bulunur.



Bakın nokta ile vektörü birbirine karıştırmayın



Nokta ile Vektör ayrı seylerdir mesela &lt;b&gt;A(1,2,2)&lt;/b&gt; dedik bu &lt;b&gt;A&lt;/b&gt; nın &lt;b&gt;x&lt;/b&gt; ekseninde 1 konumunda &lt;b&gt;Y&lt;/b&gt; ekseninde 2 &lt;b&gt;Z&lt;/b&gt; eksenindede 2 konumunda bulunduğunu bildirir.



&lt;b&gt;AB&lt;/b&gt; vektörünü &lt;b&gt;AB(1,2,4)&lt;/b&gt; bulduk peki bu ne anlama geliyo bir konummu tabiyki hayır bu &lt;b&gt;AB&lt;/b&gt; vektörünün &lt;b&gt;X&lt;/b&gt; ekseninde &lt;b&gt;1&lt;/b&gt; birim &lt;b&gt;Y&lt;/b&gt; ekseninde 2 &lt;b&gt;Z&lt;/b&gt; ekseninde ise 4 birim lik şiddetinde olduğu anlamını taşır.



&lt;h3&gt;&lt;p align="center"&gt;BİRİM VEKTÖR&lt;/p&gt;&lt;/h3&gt;



Birim vektör boyu 1 birim olan vektördür. Birim vektörümüzü &lt;b&gt;B(x0,y0,z0)&lt;/b&gt; diye adlandıralım. &lt;b&gt;B=1&lt;/b&gt; olmalı şimdi aşağıdaki şekle bakalım bir rastgele kordinatlarda alınmış bir &lt;b&gt;A&lt;/b&gt; vektörü var ve bu &lt;b&gt;A&lt;/b&gt; vektörü ile aynı yönde bir &lt;b&gt;B&lt;/b&gt; birim vektörü (mavi ile çizdiğim) &lt;b&gt;A&lt;/b&gt; vektörümüz &lt;b&gt;A(5,-3,2)&lt;/b&gt; olsun.



&lt;img src="http://www.oyungelistir.org/resimler/makale_resimleri/vektorler/image016.gif" /&gt;



Peki &lt;b&gt;B&lt;/b&gt; vektörünü nasıl buluruz. &lt;b&gt;B&lt;/b&gt; birim vektörümüz &lt;b&gt;A&lt;/b&gt; vektörünün &lt;b&gt;x,y,z&lt;/b&gt; konumlarının &lt;b&gt;A&lt;/b&gt; vektörünün boyuna bölünmesi ile bulunur.



&lt;b&gt;A=sqrt(sqr(5)+sqr(-3)+sqr(2))=6,164..

x0=Ax/A= x0=5/6.164=0.81

y0=Ay/A= 3/6.164=0.48

z0=Az/A= 2/6.164=0.32

&lt;/b&gt;

&lt;b&gt;B&lt;/b&gt; vektörünün boyunu hesaplattığımızda &lt;b&gt;B=sqrt(sqr(x0)+sqr(y0)+sqr(z0)) =1&lt;/b&gt; olduğunu görürüz.

Peki bu birim vektör neye yarar? Birim vektör işlem kolaylığı sağlar. İlerdede göreceğimiz üzere bir çok işlemde vektörün boyu lazım olcak buda karekök ve karesi gibi uzun zaman alan işlemleri gerektiricek ama birim vektör kulandığımız zaman boy belli olduğu için (1) koddan ve zamandan kazanmış olcağız.



&lt;b&gt;A vektörü ile aynı yönlü herhangi bi vektör bulmak istiyoruz bunu nasıl yaparız?&lt;/b&gt;

&lt;b&gt;A(x1,y1,z1)&lt;/b&gt; vektörü ile aynı yönlü vektörümüz &lt;b&gt;B(x2,y2,z2)&lt;/b&gt; olsun.

&lt;b&gt;B=k*A&lt;/b&gt; dir &lt;b&gt;x2=k*x1 y2=k*y1 z2=k*z1&lt;/b&gt; (&lt;b&gt;B&lt;/b&gt; vektörü &lt;b&gt;A&lt;/b&gt; vektörünün &lt;b&gt;k&lt;/b&gt; katı)



&lt;img src="http://www.oyungelistir.org/resimler/makale_resimleri/vektorler/image018.gif" /&gt;



Örneğin &lt;b&gt;A&lt;/b&gt; vektörümüz &lt;b&gt;(2,4-2)&lt;/b&gt; olsun bunun anlamı &lt;b&gt;A&lt;/b&gt; vektörü &lt;b&gt;x=2 y=4 ,z=-2&lt;/b&gt; yönünde demek &lt;b&gt;B&lt;/b&gt; vetörümüz de bu &lt;b&gt;A&lt;/b&gt; vektörü ile aynı yönlü &lt;b&gt;k&lt;/b&gt; katı kadar bir vektör olsun.

&lt;b&gt;B=(2*k,4*k,2*k)&lt;/b&gt; olur &lt;b&gt;k&lt;/b&gt; ya istenilen değer verilir.



&lt;b&gt;Cross Product&lt;/b&gt;

Şimdi ise herhangi 2 vektöre dik olan başka bi vektörü bulalım.

&lt;b&gt;C (x3,y3,z3)&lt;/b&gt; dür &lt;b&gt;A(x1,y1,z1) B(x2,y2,z2)&lt;/b&gt; dir.

&lt;b&gt;x3= y1* z2 - z1 * y2

y3 = z1* x2 -x1* z2

z3 =x1* x2- y1* x2&lt;/b&gt; böylece &lt;b&gt;C&lt;/b&gt; vektörümüzü bulduk.



&lt;img src="http://www.oyungelistir.org/resimler/makale_resimleri/vektorler/image020.jpg" /&gt;



Nasılki 2d dede birim cember nekadar önemliyse ve kulanılıyorsa 3d dede okadar önemlidir.

birim vektör = boyu bir birim olan vektördür.



&lt;b&gt;Vektör yönündeki birim vektör nasıl bulunur?&lt;/b&gt;

vektörümüz &lt;b&gt;A&lt;/b&gt; vektörü &lt;b&gt;B&lt;/b&gt; de birim vektör olsun

&lt;b&gt;A(x1,y1,z1)

B(x2,y2,z2)

B=A/A&lt;/b&gt; dir. Yani &lt;b&gt;x2=x1/A y2=y1/A z2=z1/A&lt;/b&gt; dir.

Birim vektörün önemini ilerki derslerde daha iyi anlaycaksınız.



&lt;b&gt;İki vektörün skaler (sayısal) çarkılması&lt;/b&gt;

&lt;b&gt;A.B=x1*x2+y1*y2+z1*z2&lt;/b&gt;



&lt;b&gt;Dot Product&lt;/b&gt;

İki vektör arasındaki açının bulunması.

&lt;b&gt;A&lt;/b&gt; ve &lt;b&gt;B&lt;/b&gt; vektörleri arasındaki açıya &lt;b&gt;Q&lt;/b&gt; dersek

&lt;b&gt;Cos(Q)=A&lt;/b&gt; ile &lt;b&gt;B&lt;/b&gt; vektörünün skaler çarpımı bölü &lt;b&gt;A&lt;/b&gt; vektörünün boyu carpı &lt;b&gt;B&lt;/b&gt; vektörünün boyu

&lt;b&gt;cos(Q)=A.B/A*B&lt;/b&gt; dir.

&lt;b&gt;arccos&lt;/b&gt; gibi bi fonkisiyonlada &lt;b&gt;Q&lt;/b&gt; değeri bulunur (programlama diline göre değişir tabi )



&lt;img src="http://www.oyungelistir.org/resimler/makale_resimleri/vektorler/image022.gif" /&gt;



&lt;b&gt;Bir noktanın doğruya uzaklığı&lt;/b&gt;

Elimizde yönü &lt;b&gt;V&lt;/b&gt; vektörü ile belirttiğimiz ve üzerindeki herhangi bi noktası &lt;b&gt;P&lt;/b&gt; olan &lt;b&gt;d&lt;/b&gt; doğrumuz var. Birde bu doğruya olan uzaklığı bulunucak olan &lt;b&gt;A&lt;/b&gt; noktamız.



&lt;img src="http://www.oyungelistir.org/resimler/makale_resimleri/vektorler/image024.gif" /&gt;



Doğru üzerinde bulunan &lt;b&gt;P&lt;/b&gt; noktasından &lt;b&gt;A&lt;/b&gt; noktasına kadar olan bir vektör düşünelim bu vektöre &lt;b&gt;PA&lt;/b&gt; vektörü diyelim. &lt;b&gt;A&lt;/b&gt; noktasının &lt;b&gt;d&lt;/b&gt; doğrusuna uzaklığı &lt;b&gt;A&lt;/b&gt; noktasının &lt;b&gt;d&lt;/b&gt; doğrusuna olan dik uzaklığı demektir. Çünkü en kısa uzaklık(&lt;b&gt;L&lt;/b&gt; uzaklığı) dik uzaklıktır. &lt;b&gt;A&lt;/b&gt; noktasından &lt;b&gt;d&lt;/b&gt; doğrusuna dik çıkarsak &lt;b&gt;O&lt;/b&gt; noktasını buluruz.



Şekil 1

&lt;img src="http://www.oyungelistir.org/resimler/makale_resimleri/vektorler/image026.gif" /&gt;



Şekil 2 dede gördüğümüz üzere &lt;b&gt;APO&lt;/b&gt; dik üçkeni oluşu bu üçgenin yardımı ile &lt;b&gt;L&lt;/b&gt; uzaklığını bulcağız. Öncelikle &lt;b&gt;Q&lt;/b&gt; açısını bulmamız lazım. &lt;b&gt;Q&lt;/b&gt; açısı &lt;b&gt;PA&lt;/b&gt; vektörü ve &lt;b&gt;V&lt;/b&gt; vektörleri arasındaki açıdır. 2 vektör arasındaki açıyı bulmayı yukarda öğrenmiştik şimdi burada uygularsak



&lt;b&gt;Cos(Q)=PA.V/PA* V&lt;/b&gt; olcaktır.



[}bNOT:[/b] Yukarda verilen formülde &lt;b&gt;PA&lt;/b&gt; ve &lt;b&gt;V&lt;/b&gt; birim vektör olarak verilseydi boyları 1 birim olacaktı yani

&lt;b&gt;PA=1 V=1 cos(Q) da= PA.V&lt;/b&gt; olcaktı görüldüğü gibi birim vektör olması işlem kolaylığı sağlar.



Trigonometry den &lt;b&gt;Sin(Q)=sqrt(1-sqr(cos(Q))&lt;/b&gt; olur. &lt;b&gt;Q&lt;/b&gt; acısının hem cosinusunu hemde sinusunu bulduk. Şimdi &lt;b&gt;sin(Q)&lt;/b&gt; neye eşit &lt;b&gt;APO&lt;/b&gt; üçgeninde



&lt;b&gt;Sin(Q)=karşı / hipotenüsten =L/PA&lt;/b&gt; dır.

&lt;b&gt;L=sin(Q)*PA&lt;/b&gt; olur

&lt;b&gt;Cos(Q)= komşu / hipotenüsten =K/PA&lt;/b&gt; dır.



Şekil 2

&lt;img src="http://www.oyungelistir.org/resimler/makale_resimleri/vektorler/image028.gif" /&gt;



&lt;b&gt;K=cos(Q)*PA&lt;/b&gt; olur. İlere görceğiniz üzere &lt;b&gt;K&lt;/b&gt; uzunluğu &lt;b&gt;L&lt;/b&gt; uzunluğundan daha önemlidir. Çünkü birçok problemde &lt;b&gt;O&lt;/b&gt; noktasını bulmamız gerekecek &lt;b&gt;O&lt;/b&gt; noktasının yeri &lt;b&gt;P&lt;/b&gt; noktasından &lt;b&gt;V&lt;/b&gt; vektörü yönünde &lt;b&gt;K&lt;/b&gt; uzunluğu kadar gitmekle elde edilir. &lt;b&gt;L&lt;/b&gt; kullanmak istersek ayrrıca &lt;b&gt;OA&lt;/b&gt; vektörününde yönünü bilmemiz gerekir.



Şekil 3

&lt;img src="http://www.oyungelistir.org/resimler/makale_resimleri/vektorler/image030.gif" /&gt;



Örneğin (Şekil 4) birim vektör kulanmanın faydalarından biraz daha bahsedelim.

Örneğimizde &lt;b&gt;P&lt;/b&gt; noktasının yeri &lt;b&gt;P noktası=P(2,4,1)&lt;/b&gt;, doğrunun yön vektörü olan &lt;b&gt;V vektörü =V(2,1,2)&lt;/b&gt; olsun. &lt;b&gt;O&lt;/b&gt; noktasınında &lt;b&gt;P&lt;/b&gt; noktasına olan uzaklığı olan &lt;b&gt;K&lt;/b&gt; noktasını da 5 bulduk diyelim. Bizden istenen &lt;b&gt;O&lt;/b&gt; noktasının kordinatları &lt;b&gt;O&lt;/b&gt; yu bulmak için ne yapıcaz? &lt;b&gt;P&lt;/b&gt; noktasından &lt;b&gt;V&lt;/b&gt; vektörü yönünde 5 birim gideceğiz. &lt;b&gt;O=P+V*K&lt;/b&gt; diyelim şöyle bi bakınca formül doğru gibi gözüküyor. Doğru ama ufak bir püf nokta var. Yukardaki formül şöyle &lt;b&gt;O&lt;/b&gt; noktası eşittir &lt;b&gt;P&lt;/b&gt; noktasının yeri artı &lt;b&gt;V&lt;/b&gt; vektörünün 5 katı. &lt;b&gt;V&lt;/b&gt; nin 5 katını alalım. &lt;b&gt;V&lt;/b&gt; nin 5 katı=&lt;b&gt;V’(10,5,10)&lt;/b&gt; olan bi vektör elde ederiz. &lt;b&gt;P&lt;/b&gt; dende bu vektör kadar gidersek &lt;b&gt;O&lt;/b&gt; noktasının yeri &lt;b&gt;O’x=2+10 O’y=4+5 O’z=1+10&lt;/b&gt;. Görüldüğü gibi &lt;b&gt;O&lt;/b&gt; noktasının gerçek yerini bulamadık. Neden böyle oldu? Çünkü &lt;b&gt;V&lt;/b&gt; vektörümüzün boyu 3 birim 5 katını alırsak boyu 15 birimlik bir &lt;b&gt;vektör(10,5,10)&lt;/b&gt; elde ederiz. &lt;b&gt;P&lt;/b&gt; dende 15 birim gitmiş oluruz. Biz ise 5 birim gitmek istiyoruz. Bunun içinse &lt;b&gt;V&lt;/b&gt; vektörünün birim vektörünü bulmamız gerekir. &lt;b&gt;V&lt;/b&gt; nin birim vektörünün boyu 1 olduğu için &lt;b&gt;P+Birim(V)*5&lt;/b&gt;. Bizim gerçek &lt;b&gt;O&lt;/b&gt; noktamızın yerini verir. &lt;b&gt;P&lt;/b&gt; den &lt;b&gt;V&lt;/b&gt; vektörü yönünde 5 birim gitmiş oluruz.



Şekil 4

&lt;img src="http://www.oyungelistir.org/resimler/makale_resimleri/vektorler/image032.gif" /&gt;



&lt;b&gt;ÖNEMLİ&lt;/b&gt;

Eğer &lt;b&gt;PA.V&lt;/b&gt; sonucu &lt;b&gt;+&lt;/b&gt; çıkıyorsa yani &lt;b&gt;PA&lt;/b&gt; vektörünün izdüşümü(şekilde &lt;b&gt;BP&lt;/b&gt;) &lt;b&gt;V&lt;/b&gt; vektörü ile aynı yöndedir (1.durum) &lt;b&gt;–&lt;/b&gt; ise ters yönlü(2.durum) 0 ise vektörler birbirine diktir.



&lt;img src="http://www.oyungelistir.org/resimler/makale_resimleri/vektorler/image034.gif" /&gt;



&lt;b&gt;Vektörlerin döndürülmesi (XYZ Eksenine göre)&lt;/b&gt;



&lt;img src="http://www.oyungelistir.org/resimler/makale_resimleri/vektorler/image036.jpg" /&gt;



Döndürülecek vektör &lt;b&gt;A(x1,y1,z1)&lt;/b&gt;

İlk durumda &lt;b&gt;A&lt;/b&gt; vektörümüz &lt;b&gt;x1,y1,z1&lt;/b&gt; kordinatlarında bulunurken &lt;b&gt;m&lt;/b&gt; ilk acıya sahip. Vektörümüzü &lt;b&gt;Z&lt;/b&gt; ekseni etrafında &lt;b&gt;Q&lt;/b&gt; kadar döndöndürdüğümüzü düşünelim. Dikkat edilirse &lt;b&gt;z1&lt;/b&gt; konumumuz her zaman sabit kalır, &lt;b&gt;y&lt;/b&gt; ve &lt;b&gt;z&lt;/b&gt; değerleri &lt;b&gt;R&lt;/b&gt; yari caplı bir çember çizmektedir. ( tabi &lt;b&gt;Q&lt;/b&gt; kadar döndürülünce çizmez. &lt;b&gt;z&lt;/b&gt; ekseninde 360 derece döndürseydik çember çizerdi şimdiki &lt;b&gt;(m+Q)/360&lt;/b&gt; kadar bi cember)

&lt;b&gt;x1&lt;/b&gt; in dönmeden önceki ilk değeri &lt;b&gt;x1=R*cos(m)&lt;/b&gt;.

&lt;b&gt;y1&lt;/b&gt; ilk değeri &lt;b&gt;y1=R*sin(m)&lt;/b&gt; dir.

Şimdi &lt;b&gt;Q&lt;/b&gt; kadar döndürünceki konumlara &lt;b&gt;x2&lt;/b&gt; ve &lt;b&gt;y2&lt;/b&gt; dersek (zaten z1 sabitti)

&lt;b&gt;x2=R*cos(Q+m)&lt;/b&gt; ve &lt;b&gt;y2=R*sin(Q+m)&lt;/b&gt;.

Şimdi burda dikkat edilmesi gereken şu lisedeki trigonometri derslerinden hatırlayacağımız &lt;b&gt;cos(a+b)&lt;/b&gt; ve &lt;b&gt;sin(a+b)&lt;/b&gt; nin açılımıdır. Bu formülleri yukarıda uygularsak.

&lt;b&gt;x2=R*(cos(m)*cos(Q)-sin(m)*sin(Q)) x1=R*cos(m)&lt;/b&gt; ve &lt;b&gt;y1=R*sin(m)&lt;/b&gt; demistik hatırlayın bunlarıda formulde yerine korsak

&lt;b&gt;x2=x1*cos(Q)-y1*sin(Q)&lt;/b&gt; olur.

&lt;b&gt;y2=R*(sin(m)*cos(Q)+cos(m)*sin(Q))&lt;/b&gt;

&lt;b&gt;y2=y1*cos(Q)+x1*sin(Q)&lt;/b&gt; olur.

Evet &lt;b&gt;Z&lt;/b&gt; eksenine göre döndermeyi bulduk bu mantığını kavramanız içindi tabi diğer eksenlerin sonuclarını vereceğim.



&lt;b&gt;X&lt;/b&gt; ekseninde döndürme

&lt;b&gt;x2=x1&lt;/b&gt; (çünkü &lt;b&gt;X&lt;/b&gt; ekseninde çeviriyoruz)

&lt;b&gt;y2= y1*cos(Q)-z1*sin(Q)

z2= z1*cos(Q)+y1*sin(Q)&lt;/b&gt;



&lt;b&gt;Y&lt;/b&gt; ekseninde döndürme

&lt;b&gt;y2=y1&lt;/b&gt; (çünkü &lt;b&gt;Y&lt;/b&gt; ekseninde çeviriyoruz)

&lt;b&gt;x2= x1*cos(Q)+z1*sin(Q)

z2= z1*cos(Q)-x1*sin(Q)&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;
&lt;/table&gt;kaynak: &lt;a href="http://www.oyungelistir.org/"&gt;http://www.oyungelistir.org/&lt;/a&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-6378153137635713652?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/6378153137635713652/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=6378153137635713652' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/6378153137635713652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/6378153137635713652'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/02/vektr-hesaplamalar.html' title='Vektör Hesaplamaları'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-3145645326978516010</id><published>2008-02-27T03:10:00.001-08:00</published><updated>2008-02-27T03:11:50.188-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sektör Haberleri'/><title type='text'>TÜRKİYE'DE DİJİTAL OYUN SEKTÖRÜ VE OYUN GELİŞTİRİCİLERİ PANELİ</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_pLX9veDDrds/R8MTJ_pUVZI/AAAAAAAAAak/aeTaS46xzOo/s400/image002.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 216px; CURSOR: hand; HEIGHT: 298px" height="366" alt="" src="http://1.bp.blogspot.com/_pLX9veDDrds/R8MTJ_pUVZI/AAAAAAAAAak/aeTaS46xzOo/s400/image002.jpg" border="0" /&gt;&lt;/a&gt;
&lt;div&gt;&lt;/div&gt;
&lt;p&gt;"TÜBİTAK-SOBAG 107K039 no'lu ve TÜBİTAK 2007/1 tarafından desteklenen "DİJİTAL OYUN KÜLTÜRÜ ve TÜRKİYE'DE GENÇLİĞİN INTERNET CAFE KULLANIM PRATİKLERİ" proje kapsamında 4 Mart 2008 tarihinde Türkiye'de Dijital Oyun Sektörü ve Oyun Geliştiricileri konulu toplantı Başkent Üniversitesi Avni Akyol Konferans Salonunda saat 15:00-17:30 arasında gerçekleşecektir. Ceidot-Ceiron Stüdyoları ekip olarak etkinliğe katılacaktır. Ceidot-Ceiron Stüdyoları ana projeleri Hükümran Senfoni Online üzerine sunum yapacak, Türkiye'de dijital oyun sektörünün mevcut durumunu ve geleceğini de tartışmaya açacaktır.&lt;/p&gt;&lt;p&gt;4 Mart 2008 tarihinde yapılacak etkinlik, Türkiye'de dijital oyun geliştiricilerin bir araya gelmesi ve endüstrinin durumunun değerlendirilmesi açısından oldukça önemlidir. Ayrıca çalışma grubu ve paneller kayıtlanarak, daha sonra konuyla ilgili akademik yayında değerlendirilmek üzere kullanılacaktır."&lt;/p&gt;&lt;p&gt;Başkent Üniversitesi basın bülteninden alıntıdır&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-3145645326978516010?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/3145645326978516010/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=3145645326978516010' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/3145645326978516010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/3145645326978516010'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/02/trkiyede-dijital-oyun-sektr-ve-oyun.html' title='TÜRKİYE&apos;DE DİJİTAL OYUN SEKTÖRÜ VE OYUN GELİŞTİRİCİLERİ PANELİ'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_pLX9veDDrds/R8MTJ_pUVZI/AAAAAAAAAak/aeTaS46xzOo/s72-c/image002.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-6636746347754992276</id><published>2008-02-27T03:05:00.001-08:00</published><updated>2008-02-27T03:05:56.015-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Yapay Zeka'/><title type='text'>YAPAY ZEKA NEDİR?</title><content type='html'>“Yapay Zeka nedir ?” sorusunun cevabını ancak zekanın ne olduğunu tanımlayabilirsek verebiliriz.Zeka; öğrenme, anlama ve düşünme yeteneğidir. Yapay Zeka; kısaca tanımlarsak, bilgisayarların öğrenme, anlama ve düşünme yeteneğine sahip olmasıdır diyebiliriz.Yani bizdeki zekanın yapay hali.”Yapay Zeka” kuramı ilk kez bilgisayar bilimlerinde ortaya konulmuştur.Bunu derken şunu kastediyorum: öncelikle Y.Z., “yapay zeka” kuramı olarak ilk kez bilgisayar bilimlerinde ortaya çıktı.Fi tarihinde birileri Y.Z. fonksiyonunu gerçekleştirecek bir oluşumu düşünmüş ve hayal etmiş olabilir 1 .Y.Z.'nın küçük bir işlevini gerçekleştirmiş olabilir.Ama bu “yapay zeka” kavramının o zamanlarda ortaya çıktığını göstermez.

Yapay Zeka kuramını her bilim adamı kendi araştırmaları neticesinde farklı bir kefeye koyabilmektedirler.Y.Z. için somut bir kılıf biçilemezken,Y.Z. kendini aşmaya çalışan bir alan haline gelmiştir.Bu alan, öyleki, bilgisayar bilimi doğduktan çok uzun süre geçmediği halde kendine çok ilgi toplayan ve geliştirilmesi için çok çaba sarfedilen bir alan olmuştur.Y.Z.' ye uygun bir kılıf biçilememesinin nedeni üretildiği zekanın da somut bir kefeye konulamamasındandır.”Peki niye bilimadamları, bu tam olarak saptanamayan ve anlaşılamayan insan zekasını bilgisiyarlarda simule etmek istiyorlar? “ sorusunun cevabı, bu bilim adamlarının bilgisayarın gerçekleştirmiş olduğu işlevin insanın gerçekleştirmiş olduğu işlev ile paralel veya aynı olduğunu zannetmelerindendir.Bunu açmak gerkirse;bu bilim adamları insanı bilgisayar gibi hesap yapıp bu hesaba göre hareket eden bir makine olarak görmektedirler.Kısacası bir “bilgi işleme sistemi” 2 olarak gördükleri insanı bilgisayarlara uyarlayabileceklerini düşünmüşlerdir.Bu düşüncenin yanlış olup olmadığı konusuna biraz değinmek istiyorum.öncelikle insan zekası tek bir nicelik ile ölçülemez.Eğer gerçekten zekayı öğrenme,anlama ve düşünme yeteneğinden ibaret diyorsak ki öyle diyoruz,o zaman insan zekası gruplandırılabilir diyebiliriz.Bu gruplandırma safhaları olarak size, ilgi ve kimilerinde doğuştan (kalıtımsal),kimilerinde sonradan kazanılan yetenek ve kabiliyet alanlarını örnek gösterebilirim.Her kişinin matematik zekası ile sosyal veya kültürel zekası bir olmaz.Aslında bunu iki kısımla sınrlandıramayız ama burda başlangıçta sayısal ve sözel olarak ikiye ayırmayı uygun görüyorum.Zaten bunu ilerde genişleteceğim.

Her insanın sayısal ve sözel alanlara ilgisi,bu alanlardaki beceri ve kapasitesi farklıdır.Eğer aynı olsaydı ya herkes üstün zeki bir Einstein ya da herkes gerizekalı bir Bus-s-s-h olurdu.Sonuçta bizim yaradılıştan gelen ve sonradan çevre etkisiyle kazandığımız;belki doğuştan olup ama keşfedemediğimiz,ya da kullanmayıp körelttiğimiz;veya sonradan geliştirerek elde ettiğimiz bir özel yeteneğe sahip olabiliriz.Bu yetenek içerisinde tabiki zekamız en büyük etki alanı.Zeka bir yetenektir,diğer yeteneklerin de kazanılmasında büyük rol oynayan bir yetenek.Dolayısıyla bir zincir gibi düşünebiliriz.Zinicirin en büyük halkasını zeka oluşturmaktadır.

kaynak:www.ceturk.com&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-6636746347754992276?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/6636746347754992276/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=6636746347754992276' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/6636746347754992276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/6636746347754992276'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/02/yapay-zeka-nedir.html' title='YAPAY ZEKA NEDİR?'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-2906154245380827384</id><published>2008-02-27T03:04:00.001-08:00</published><updated>2008-02-27T03:04:37.038-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oyun Haberleri'/><title type='text'>Need For Speed Pro Speed</title><content type='html'>&lt;object height="373" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/2C7THbzZ9h0&amp;amp;rel=1&amp;amp;border=1"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/2C7THbzZ9h0&amp;rel=1&amp;border=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="373"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-2906154245380827384?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/2906154245380827384/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=2906154245380827384' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/2906154245380827384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/2906154245380827384'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/02/need-for-speed-pro-speed.html' title='Need For Speed Pro Speed'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-3393259778522924560</id><published>2008-02-27T03:01:00.001-08:00</published><updated>2008-02-27T03:02:50.880-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Hazır Araçlar'/><title type='text'>2D Oyun Yapmak</title><content type='html'>Artık Oyun Yapmak için bir "design+kodlayıcı " motorunuz var; RPG MAKER XP.

&lt;img style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 320px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://3.bp.blogspot.com/_fAqb9I3wJqQ/R6D-UieKVsI/AAAAAAAAADA/2PzBUR0QGpo/s320/2.bmp" border="0" /&gt;

&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
&lt;a href="http://3.bp.blogspot.com/_fAqb9I3wJqQ/R6D-UieKVsI/AAAAAAAAADA/2PzBUR0QGpo/s320/2.bmp"&gt;DOWNLOAD-İNDİR&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-3393259778522924560?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/3393259778522924560/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=3393259778522924560' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/3393259778522924560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/3393259778522924560'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/02/2d-oyun-yapmak.html' title='2D Oyun Yapmak'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_fAqb9I3wJqQ/R6D-UieKVsI/AAAAAAAAADA/2PzBUR0QGpo/s72-c/2.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-8180269015800279521</id><published>2008-02-27T02:56:00.001-08:00</published><updated>2008-02-27T02:59:06.068-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oyun Haberleri'/><title type='text'>GTA IV Nisan'da piyasalarda</title><content type='html'>&lt;a href="http://www.bilisimruzgari.com/bilisimruzgari2007Images/feimg/metin_img/GTAİV.jpg"&gt;&lt;img style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 131px; CURSOR: hand; HEIGHT: 92px" height="157" alt="" src="http://www.bilisimruzgari.com/bilisimruzgari2007Images/feimg/metin_img/GTAİV.jpg" border="0" /&gt;&lt;/a&gt;
&lt;div&gt;Oyun daha önce 16 Ekim 2007'de piyasaya sürülecekken takvim ileriye alınmıştı. Nintendo Wii oyun konsolu için de piyasaya sürülmesi beklenen oyunun PC sürümü ne yazık ki beklenmiyor.Rus aksanlı bir göçmen'in Amerika'ya gelmesi ile başlayan hikaye, etrafta dönen fragmanlarından anlaşılacağı üzere New York'un polisin bile girmeye korktuğu sokaklarında yine olabildiğine yasadışı işlere bata çıka mafya babası olmaya doğru giden çetrefilli yolda ayakta kalma üzerine dönecek. &lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;
&lt;object height="355" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/vOskZNJJII8&amp;amp;rel=1&amp;amp;border=0"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/vOskZNJJII8&amp;rel=1&amp;border=0" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-8180269015800279521?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/8180269015800279521/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=8180269015800279521' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/8180269015800279521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/8180269015800279521'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/02/gta-iv-nisanda-piyasalarda.html' title='GTA IV Nisan&apos;da piyasalarda'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-7399738023159772082</id><published>2008-02-27T02:50:00.000-08:00</published><updated>2008-02-27T02:55:46.996-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oyun Haberleri'/><title type='text'>Crysis lisansmanı Cevat Yerli ile Röportaj</title><content type='html'>&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/0ARgMODTibs&amp;rel=1&amp;border=0"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/0ARgMODTibs&amp;rel=1&amp;border=0" type="application/x-shockwave-flash" wmode="transparent"width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-7399738023159772082?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/7399738023159772082/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=7399738023159772082' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/7399738023159772082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/7399738023159772082'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/02/crysis-lansman-cevat-yerli-ile-rportaj.html' title='Crysis lisansmanı Cevat Yerli ile Röportaj'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1291941645614113917.post-8120599672391513439</id><published>2008-02-26T14:57:00.000-08:00</published><updated>2008-02-26T15:11:44.794-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual C#'/><title type='text'>İlk c# programımız</title><content type='html'>&lt;span style="color:#33cc00;"&gt;// İsim uzayları, yani kütüphaneler&lt;/span&gt;
&lt;span style="color:#3366ff;"&gt;using&lt;/span&gt; System;
&lt;span style="color:#3366ff;"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span style="color:#3366ff;"&gt;using&lt;/span&gt; System.Text;

&lt;span style="color:#3366ff;"&gt;namespace&lt;/span&gt; ConsoleApplication1
{
  class Program
  {
     &lt;span style="color:#3366ff;"&gt;static void&lt;/span&gt; Main(&lt;span style="color:#3366ff;"&gt;string&lt;/span&gt;[] args)
     {
         &lt;span style="color:#33cc00;"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color:#cc0000;"&gt;"Merhaba C# !!!"&lt;/span&gt;);
     }
  }
}

Burada "//" işaretleri arasına yazılanlar derleyici tarafından dikkate alınmaz ve programın işleyişini etkilemez. Çünkü bunlar yorum satırlarıdır.
örnekler:
&lt;span style="color:#33cc00;"&gt;//Bu bir yorum satırı&lt;/span&gt;

&lt;span style="color:#33cc00;"&gt;/* Bu birkaç&lt;/span&gt;
&lt;span style="color:#33cc00;"&gt;  * yarum&lt;/span&gt;
&lt;span style="color:#33cc00;"&gt;  * satırı &lt;/span&gt;
&lt;span style="color:#33cc00;"&gt;*/&lt;/span&gt;

Bu örnek bir console (msdos) uygulamasıdır ve Ekrana "Merhaba c# !!!" yazdırır.
Önce her programda olduğu gibi gerekli isim uzayları "using" ile eklenir, daha sonra programımızın isim uzayı adı olan "ConsoleApplication1" ve ana sınıf "class"(Program) eklenir... Her yazdığımız c# programının bir ana fonksiyonu "Main" içine de programımızın ne iş yapacağını belirten kodlar yazarız...

Kısa açıklama:
Console.Writeline("string"); ekrana yazdırmak için kullanılır.
// yorum satırıdır.
static void Main() programın ana fonksiyonu&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1291941645614113917-8120599672391513439?l=oyungelistir.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oyungelistir.blogspot.com/feeds/8120599672391513439/comments/default' title='Kayıt Yorumları'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1291941645614113917&amp;postID=8120599672391513439' title='0 Yorum'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/8120599672391513439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1291941645614113917/posts/default/8120599672391513439'/><link rel='alternate' type='text/html' href='http://oyungelistir.blogspot.com/2008/02/ilk-c-programmz.html' title='İlk c# programımız'/><author><name>caner_ad</name><uri>http://www.blogger.com/profile/00140850283060464806</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
