Volkan Atasever

mühendislik, edebiyat, retro computer, yazılım, şiir, nümismatik, bilişim, podcast ve daha bir çok yazılarım...

Windows Mobile ile Direct3D Programlama

clock Ekim 5, 2009 19:45 by author Volkan Atasever

Bu yazımı CSharpnedir.Com sitesinden de okuyabilirsiniz.   

Link: http://csharpnedir.com/articles/read/?id=991&filter=unedited&title=Windows%20Mobile%20ile%20Direct3D%20Programlama

 

Bu yazımda sizlere mobil dünyanın standart 2d boyutundan 3. Boyuta geçmenin yöntemlerinden yani Direct3D’den bahsedip küçük bir uygulamayla bir direct3d penceresini çalıştıracağız. Bu uygulamamızda ki amaç mobil cihaz üstünde nasıl Direct3D programlama yapabileceğimizi incelemek. Küçük bir demo ile de pekiştireceğimiz bu dünya, geleceğin en temel teknolojisini yani windows mobile cihazlarımızda 3 boyutlu bir dünyaya merhaba dememizi sağlamaktadır. Klasik görünümünden sıyrılıp tam bir bilgisayar olduğunu anlamımıza yarayacak. Şu aşamada XNA’in desteklediği platformlar üstünde windows mobile olmadığı için bu cihazlarda direct3d kullanmaktayız.

 Öncelikle temel olarak hangi referanslara ihtiyacımız olduğunu burada belirtmek isterim;

using Microsoft.WindowsMobile.DirectX;
using Microsoft.WindowsMobile.DirectX.Direct3D;
using System.Runtime.InteropServices;
using System.Drawing;
using System.Windows.Forms;

Klasik referanslarımız olan DirectX argümanlarına WindowsMobile isim uzayı altından ulaşmaktayız. Bunun için DirectX’in ve SDK’larının bilgisayarınızda kurulu olması gerekmektedir. Using cümleciğiyle ihtiyacımız olan namespaceleri tanımlamış bulunmaktayız. Ardından Direct3D aygıtı için değişken tanımlamamız gereklidir.        

Bunun içinde;

Device device = null;

şeklinde aygıtımızı tanımladık. Artık 3 boyutlu dünyaya mobil cihazımızda merhaba demiş bulunuyoruz. Bunun için ilk aygıtımızın (Device) ayarlamalarıyla mobil cihaza uygun hale getirmek için gerekli kod parametrelerini vermek istiyorum. Bu sayede programlamaya hazır bir Direct3D penceresi karşımıza gelecektir. Kullanmamız gereken diğer namespace’ler;

using System;
using System.Drawing;
using System.Windows.Forms;

ardından ana sınıfımız ve kurucu metodumuz;

// Uygulamanın ana sınıfı
public class DeviceYarat : Form
{

      // Uygulamamızın global değişkeni bundan sonra aygıt diye anacağız
     Device device = null;

     public DeviceYarat()
     {
           // başlığı düzenle
           this.Text = "D3D dünyasına hoşgeldin";
           this.MinimizeBox = false;
     }
}

         Penceremizin üstünde D3D dünyasına hoşgeldin yazacaktır. Bu uygulama Direct3D programlamanın iskeletini içermektedir. Aşağıdaki metottaki presentparameters sınıfı aygıt oluşturulurken gerekli olan bazı parametreleri içinde bulundurmaktadır. InitializeGraphics metodunda ise; presentParams.Windowed = true ile uygulamanın bir pencereye sahip olacağını söylemektedir.

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


                   device = new Device(0, DeviceType.Default, this,
                   CreateFlags.None, presentParams);
            }
           catch (DirectXException)
           {  
                   return false; 
           }
            return true;
       }

           Aygıt dediğimiz device sınıfı ise burada canlanacak ve aldığı parametrelerin anlamları ise şöyledir; İlk 0 olan parametre System.Int32 türünden bir değer oluğ D3D uygulamadaki adaptörlerin sıra numarasıdır, varsayılan parametre ise 0’dır.

İkinci parametre olan devicetype ise aşağıdaki değerlerden birini alabilmektedir;

DeviceType.Hardware
DeviceType.Reference
DeviceType.Software

           Biz burada default olanını seçtik. Diğer parametre ise görüntüyü gösterebileceğimiz pencere olarak o anki çalışan pencereyi seçmek için this anahtar kelimesini kullandık. CreateFlags ise uygulamada kullanılacak olan özellikler kümesini kendinde barındırmaktadır. Yine belli bir değer seçmemize rağmen brada seçebileceğimiz bayrakları belirtelim;      

CreateFlags.AdapterroupDevice
CreateFlags.DisableDriverMAnagement
CreateFlags.MixedVertexProcessing
CreateFlags.HardwareVertexProcessing
CreateFlags.SoftwareVertexProcessing
CreateFlags.PureDevice
CreateFlags.Mutithreaded

Örnek olarak CreateFlags.HardwareVertexProcessing; tüm bağlantı noktalarının donanımda işleyeceğini söylemektedir. Son parametre ise PresentParameters sınıfından türettiğimiz ve yukarıda anlattığım özellikleri aygıta kazandırır.


private void Render()
{
    if (device != null) 
    {
        device.Clear(ClearFlags.Target, System.Drawing.Color.Blue,
        1.0f, 0);
        device.BeginScene();

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

           Aygıtımızı ayarladıktan sonra sıra render işlemlerine geldi. Render metodumuzda öncelikle render işlermelerine başamadan aygıtımızı ve önbelleğimizi(buffer) temizliyoruz bunun içinde Clear metodunu kullanırken bazı parametreler vermekteyiz. Bunlar; ClearFlags.Target yani belirli bir hedefe göre temizlerken ikinci parametre ise temizledikten sonra mobil cihazımızın ekranının alacağı renktir. Üçüncü parametre derinlik tamponunun değeridir. 1.0f ile herşeyi sıfırlamış oluyoruz. Ardından render işlemine başlamak için BeginScene metodunu kullanıyoruz bu sayede aygıtın çizime hazır olduğunu belirtmekteyiz. Her BeginScene yaptığımızda EndScene’de kullanmalıyız çünkü endscene yapmadan bir daha beginscene metodunu çağıramayız. Fakat bu çağrılar ekranımızı güncellememizi sağlamaz bunun için ekranı güncellemek için ise present metodunu kullanmaktayız.


Diğer olaylarımıza bakmak istersek;

protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
        this.Render();

        this.Invalidate(); 
}

protected override void OnPaintBackground(
System.Windows.Forms.PaintEventArgs e)
{
}


Bu sayede çıkış tuşuna basıldığında programdan çıkılacaktır.

protected override void OnKeyPress(
System.Windows.Forms.KeyPressEventArgs e)
{
        if ((int)(byte)e.KeyChar == (int)System.Windows.Forms.Keys.Escape)
        this.Close();
}


Main metodumuz;

static void Main() 
{
        DeviceYarat frm = new DeviceYarat();

        if (!frm.InitializeGraphics())
        {
                MessageBox.Show("Direct3D başlatılamadı. " + 
                "programdan çıkıldı.");
                return;
        }

        Application.Run(frm);
}

           Gördüğünüz gibi Main metodumuzda ana sınıfımızdan bir nesne yaratarak küçük bir if deyimi ile yazdığımız InitializeGraphics() metodumuzun geri dönüş değerini kontrol edip uygulamamızı çalıştırıyoruz.


Çıktımız; 
 



Windows Mobile ve IrDA

clock Ekim 2, 2009 09:20 by author Volkan Atasever

 

InfraredData Association (ing.) kısa adıyla IrDA, bir çeşit kızılötesiiletişim teknolojisidir. Windows Mobile kullanan cihazlar ise çoğunlukla birIrDA donanımıyla birlikte gelmektedir. Bu teknoloji bluetooth ve usbbağlantılarına göre ilkel bir bağlantı noktası olmakla beraber hala büyükolmayan bilgi ve kısa mesafeler için kullanışlılığını korumaktadır. Biruygulama yapmak istersek aşağıdaki gibi bir form oluşturalım. Bu form birdatagrid ve bir butondan oluşmaktadır.

ArdındanIrDA için gerekli olan referansımızı ekleyelim

 

System.Net.Irdareferansımızı projeye ekledikten sonra ise butonumuzun koduna;

        privatevoid button1_Click(objectsender, EventArgs e)

        {

            IrDAClientic = new IrDAClient();

            IrDADeviceInfo[]devices = ic.DiscoverDevices(6);

            dataGrid1.DataSource = devices;

        }

Satırlarınıyazalım artık IrDA kullanan cihazlar dataGrid’de listelenecektir. 



Windows Mobile Programlamaya Giriş

clock Ekim 2, 2009 09:14 by author Volkan Atasever

 

C#’ın.Net Framework’ün resmi dili olduğu herkes tarafından bilinen bir gerçektir..Net Framework’ün bize vermiş olduğu imkanlar oldukça geniş ve tatmin edici olmakla beraber her geçen zaman ile birlikte yeni bir versiyonu ve yeni standartlarla birlikte kendini yenilemektedir. Mobil Dünya’ya baktığımızda ise.Net Compact framework ile karşılaşmakta eskiden assembly veya C++ ile yazdığımız programların bu ortamın verdiği kolaylıklar ve yeni zamana uygunolarak daha hızlı bir şekilde C# dili ile yazdığımızı görmekteyiz. Microsoft ise Windows Mobile 5.0, 6.0 ve en son 6.5 sürümleri ile devrimlerine devametmekte Mobil dünyanın gelecek için neler vadettiğini bize şimdiden haber vermektedir. Bu yazı serimde sizlere C# ile Windows Mobile programlamaya girişyapıp ardından hangi araçların ne işe yarayıp hangi uygulamaları kullanarak profosyonel Mobil programlama yapacağını öğretme amacı taşımaktayım.

KullanacağımOrtamlar ve Gereksinimler

-         VisualStudio 2008 (Herhangi bir sürümü)

-         WindowsMobile 6.0 Standart and Professional SDK

Buiki araç bize şimdilik yeterli olacaktır. Visual Studio 2008’in varoldığını veWindows Mobile SDK’nın kurulduğunu varsayıyorum.

Öncelikleryeni bir proje oluşturalım;

Visual Studio 2008-> File -> NewSekmesinden

SmartDeviceardından Smart Device Project seçeneğini seçiyoruz.

 

Hedefplatform olarak Windows Mobile 6 Professional SDK yı ve compact frameworkversiyonu olarak ise 3.5 versiyonunu işaretleyip Device Applicationtemplate’ini seçerek ok butonuna basıyoruz.

 

Şekil1.

Karşımızaçıkan form penceresi şekil 1. Deki gibi olmaktadır ve bizim mobil cihazımız dagörmüş olacağımız ve programlarımızı yazıp belli bir dizayn vereceğimizpenceredir bu pencere.

 

Sağtıkladığımızda ise view code sekmesini görmekteyiz. Karşımıza çıkan kod ise şuşekildedir.

using System;

usingSystem.Linq;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Text;

usingSystem.Windows.Forms;

 

namespace yeniproje

{

    public partial class Form1 : Form

    {

        publicForm1()

        {

            InitializeComponent();

        }

    }

}

AslındaWindows Uygulaması yapmaya aşina olanlar için Windows Mobile uygulamasınispeten basit bir şekilde öğrenilecektir. Tabiki yapı olarak çok daha farklı noktalarıvardır. Öncelikle toolbox sekmesinden bir buton sürükleyelim ve butona çifttıklayıp şu kodu yazalım;

MessageBox.Show("deneme");

Kodumuzşu şekilde olacaktır;

        privatevoid button1_Click(objectsender, EventArgs e)

        {

            MessageBox.Show("deneme");

        }

Şimdiise deneme amaçlı yazdığımız bu uygulamayı çalıştırma kısmına gelelim.

Debug-> Start without debugging sekmesine tıklıyoruz.

 

Gördüğünüzgibi ilk programımızı yazdık. Windows Mobile programının temel adımlarınıişletmiş olduk böylece. Programımızı yazarken .Net Compact Framework 3.5’useçtik peki 2.0 veya 1.0 da aynı platformları desteklemekte mi? Bunun içinaşağıdaki grafikte compact framework versiyonlarının desteklediği platformalarıgörebiliriz.

 

.NetCompact Framework v2.0 ve v3.5 Windows Mobile 6.0’ı desteklemektedir.



Mobil-Star Finalisti oldum

clock Mayıs 11, 2009 07:15 by author Volkan Atasever

 

Finalistler Belli Oldu!!! Türkiye'nin Mobil-Star'ını seçmek için yola çıkan Microsoft ve Turkcell'in düzenlediği yarışmada 20 kişi ile beraber finale kaldım 15 Mayıs Cuma günü ise ilk 3 belirlenecek.

Bu yarışma epey ses getirdi. Yankılardan bazıları;

http://www.hurriyet.com.tr/teknoloji/11080581.asp

http://www.chip.com.tr/konu/Turkiye-nin-Mobil-Star-i-kim-olacak_11126.html

http://www.pcnet.com.tr/mobil-aygitlar/746-mobil-star-yarismasi-yenilikciligi-odullendiriyor

http://www.nuricankaya.com/default.asp?gunluk_id=411

Final günü projemin içeriğini de öğrenebilirsiniz. Herkesi sunumuma destek vermeye beklerim :)



10 Mayıs'ta Boğaziçi Üniversitesinde "SeminarMania Boğaziçi"

clock Nisan 25, 2009 16:59 by author Volkan Atasever
10 Mayıs'ta Boğaziçi üniversitesinde COMPEC(Boğaziçi Üniversitesi Bilişim Kulübü) işbirliğiyle DM ekibi olarak seminer etkiliğimizi düzenleyeceğiz.

 

COMPEC desteklemektedir. INETA desteklemektedir.

 Facebook Event Linki: Event Linki

 DeveloperMania.Net Linki: http://www.developermania.net/post/2009/04/20/10-Mayc4b1s-SeminarMania-Bogazici.aspx

 

10:00 - 11:00 Yazılım Geliştiriciler için SQL Server 2008 - Volkan Atasever
10 dakika ara
11:10 - 12:40 Web Teknolojileri & ASP.NET Ajax -   Yusuf Karakaş
12:40 - 13:30 Öğle arası
13:30 - 14:30 SOA Patterns - Pamir Erdem
10 dakika ara
14:40- 15:40 WCF ve TCP Hosting - Onur Şimşek
10 dakika ara
15:50 - 16:50 Yazılım dünyasına bir bakış - Volkan Atasever


Volkan Atasever Kimdir ?

E-Mail: volkan(et)volkanatasever.com

Genel Müdür/S4G 
Bilgisayar Mühendisi

mühendislik, edebiyat, retro computer, yazılım, şiir, nümismatik, bilişim, podcast ve bir çok kategoride yazılarım...

Yazılım Kitaplarım

   

Şiir Kitaplarım

Dergi Yazılarım

 

Sosyal Ağlarım

 

 

 

 

Retro Bilgisayar Dergimiz

Türkçe Retro Bilgisayar dergimiz haziran 2016'da ilk sayısını çıkardı. ilk sayı yeni bir internet sitesinden tekrar yayınlanacaktır. Retro camiası tüm dünyada oldukça eğlenceli bir camia. Sizde katkıda bulunmak isterseniz bana mail atmanız yeterli. Dergimiz PDF formatında ve tamamen ücretsizdir.

Yasal Bilgi

Sitedeki yazıları,kodlar ve diğer materyaller Volkan Atasever'e aittir. Yazarı ve siteyi kaynak göstererek yazıları paylaşabilirsiniz.  Copyright(c)2004-2017

Sign In

Yazılım