29 Şubat 2008 Cuma

Türk Oyun Projeleri - Hükümran Senfoni

Hükümran Senfoni Oyun ekibi ve firma sahibi ile yapılan röportajlar...




Oyun Firmasının sitesi: http://www.ceidot.com/

28 Şubat 2008 Perşembe

Managed Directx de Create Device (Sürücüyü hazırlamak)

XNA Örnek Projeleri

Xna Console Uygulaması

DOWNLOAD-İNDİR

Path Finding in 2D

DOWNLOAD-İNDİR

Model Based Collision Detection

KAYNAK KODLARI

Deformable Levels

KAYNAK KODLARI

KEŞKE BU SİTE TÜRKÇE OLSAYDI www.ziggyware.com/

Microsoft XNA Game Studio Express 1.0 Refresh

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;

>Visual Studio 2005 veya Express Edition
>Net Framework 2.0

DOWNLOAD İÇİN TIKLAYIN

Delphix Oyun Örnekleri - 1 (ingilizce)

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.

THEORETICAL OVERVIEW
ANIMATION
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:



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:



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!

WORLD POSITIONING
Now this is the tricky part. On a screen the coordinate system is quite easy, it looks like this:


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: 


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:



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. 



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.

PRACTICAL IMPLEMENTATION
ANIMATION
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:



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



In the OnCreate event for the form add this:



And in the OnTimer event of the DXTimer add this:



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



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!

WORLD POSITIONING
First of all we need to make some declarations. Add this to the type declaration of TTile:



Also declare this procedure:



Next create the procedure with this code in it:



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



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.



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



to:




27 Şubat 2008 Çarşamba

DirectX Nedir?

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:

Microsoft DirectDraw

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.

Microsoft Direct3D

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.

Microsoft DirectSound

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.

Microsoft DirectMusic

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.

Microsoft DirectInput

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.

Microsoft DirectPlay

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.

Microsoft DirectShow

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. 

Bir Oyunun Kısımları

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.



Aşama I : Programı İlk Kullanıma Hazırlamak

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.

Aşama II : Oyuna Başlamak

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.

Aşama III : Kullanıcıdan Girdi Almak

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.

Aşama IV : Oyun Mantığı; Yapay Zeka ve Fizik

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.

Aşama V : Grafik İşlemek (Render)

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.

Aşama VI : Tekrar (Restart)

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

Aşama VII : Temizlik (Cleanup)

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

Directx Vector Functions (Length, Degree)


kaynak: directx.blog.com - Oguz Bastemur

Ogre3D Oyun Motoru



Visual C++ ile çalışır.
SDK Paketi DOWNLOAD

C++ Puanlı Sayı Tahmin Oyunu

Opengl-Glut İle Oyun Programlama

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->New->Projects->WIn32 Console Application proje adi olarak istediginiz bisi girebilirsiniz 
File->New->Files->C++ source file istedigimiz adi girebiliriz


Proje Ayarlari:
NOT:Simdi yapacagimiz ayarlar her proje icin tekrarlanacak
Project->Settings->Link->Object/Library Modules e opengl32.lib glut32.lib glu32.lib leri ekliyoruz

ve KoD:

#include <GL/glut.h>


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(&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

C de Yılan Oyunu


kaynak: www.programlama.com

C# Opengl Kullanımı

OpenGL Nedir ?

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.

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-.

OpenGL Komut Dizisi

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 :



OpenGL’de Çizim Yapmak

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.

1. Ekranın Temizlenmesi

’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.



2. Renk Belirleme

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 :

glColor3f(1.0f,0.0f,0.0f);

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 :

glColor3f(0.0, 0.0, 0.0); //siyah
glColor3f(1.0, 0.0, 0.0); //kırmızı
glColor3f(0.0, 1.0, 0.0); //yeşil
glColor3f(1.0, 1.0, 0.0); //sarı
glColor3f(0.0, 0.0, 1.0); //mavi
glColor3f(1.0, 0.0, 1.0); //magenta
glColor3f(0.0, 1.0, 1.0); //cyan
glColor3f(1.0, 1.0, 1.0); //beyaz

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


3. OpenGL’de Geometrik Şeklin Çizimi

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.

- Nokta, Çizgi ve Poligon belirleme :

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.

- Nokta Belirleme :

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.

- Çizgiler :

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.


- Poligonlar :

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.


- Dörtgenler :

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.

- Eğriler :

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.


- Köşe Nktalarının Belirlenmesi :

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.


’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 :



Uygulama : OpenGL’de Basit Bir Ev Modeli

Ş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.

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.

Ö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.

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.

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.

Ö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.


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.


Projemizi çalıştırdıktan sonra aşağıdaki ekran çıktısını elde ettik.

kaynak: http://www.csharpnedir.com/makalegoster.asp?MId=661

Opengl Samples - Depth


Opengl Samples - Copy


Opengl Samples - Bitmap


Opengl Samples - Accum

Kontrol ifadeleri - if

c# ta koşul ifadesini kullanarak programın bir parçasını seçerek çalıştırabilirsiniz...

if(kosul) ifade;

Burada kosul boolean (true=dogru, false=yanlis) deyimidir...

if (10 <>.WriteLine("10 büyüktür 9 dan"); }

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...

if Operatörleri ve Anlamları

Operatör Anlamı
--------- ---------
<>
<= Küçük veya eşittir
> Büyüktür
>= Büyüktür veya eşittir
== Eşittir
!= Eşit değildir

Örnek program:

using System;
class IfDemo {
public static void Main()
{
int a,b,c;

a=2; b=3;

if ( a < color="#009900">Console
.WriteLine
("a küçüktür b den");
}

if ( a == b ) {
Console.WriteLine("a ile b eşit"); //bu ekranda
bişey göstermez çünkü a ile b eşit değil
}

c = a - b; // c -1 olur.

if ( c >= 0) { Console.WriteLine("c sıfırdan büyük veya eşit değil"); }
if ( c <>.WriteLine("c sıfırdan küçük değil"); }

c = b - a; // c 1 olur.

if ( c >= 0) { Console.WriteLine("c 1 dir. sıfırdan büyüktür"); }
if ( c <>.WriteLine("c sıfırdan küçük değil bu
yazı gözükmez"); }
}
}

İkinci Basit Programımız

Aşağıdaki program x ve y adında iki değişken oluşturur:

using System;

class Ornek2 {
public static void Main() {
int x; //integer (Tamsayı) tipinde x ve y
değişkenleri int y;

x = 100; //x'e 100 değeri atandı.

Console.WriteLine("y değişkeninin değeri: "
+ x);
y = x / 2;

Console.WriteLine("y değişkeninin değeri (x in yarısı): " + y);

}
}

Vektör Hesaplamaları

Bütün yazı ve diğer yazılar boyunca kulanılacak işaretler ve anlamları: Sqrt ->karekök alma Sqr -> karesini alma vektör -> vektörün boyu * ->çarpma . ->skaler carpım / ->bölme + ->toplama - ->çıkarma sayi ->mutlağını alma genelde vektör verirken A B diye adlandıracağım. Noktaları ise x1,y1,z1 x2,y2,z2 ....... olacak.

VEKTÖRLER

2 boyutlu duzlemde bir noktanın kordinatı x y eksenine göre belirlenirdi .3 boyut da da x y z 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 xyz eksenine göre değer bulur örn) A noktasının yeri (3 birim x ekseninde 4 birim y ekseninde 5 birim z ekseninde gibi). Vektör sayının yanında doğrultusu (d 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 A vektörü A(x1,y1,z1) B vektörü B(x2,y2,z2) ile gösterilecek.

İKİ VEKTÖRÜN TOPLAMI

TOPLAMA ÇIKARMA İki vektörün toplamını veya farkını alırken ucuca ekleme metodu kulanabilriz. Şekildede görüldüğü üzere A vektörüne B vektörünü ekliyelim (toplayalım) A nın bitim noktasına B vektörünün başlangıcını getirip A vektörünün baslangıç noktasından B vektörünün bitim noktasına bir vektör çizersek bu vektör bize A+B vektörünü verir. Matematiksel eşiti ise Toplama A+B =R=((x1+x2),(y1+y2),(z1+z2)) Görüldüğü üzere A vektörü ile B vektörünün toplamı olan R vektörü bulunurken A vektörünün x konumu ile B vektörünün x konumu y ..y ,z…z toplanarak yapılıyor . Çıkarma A vektöründen B vektörünü çıkardığımızı düşünelim A vektörünü aynen alıyoruz çıkarılacak olan B vektörünün ise tersini alıp yukardaki uç uca ekleme metodunu kulanıyoruz. Bir vektörün tersi ise Aşağıdaki şekilde de görüldüğü gibi A vektörünün tersi A vektörünün x,y,z konumlarının ters işaretlisinin alınması ile elde edilir (yani -1 ile çarpma) A(x,y,z) ise A nın tersi A’(-x,-y,-z) dir örn( A(4,-4,-5) ise A’(-4,4,5) dir ) Cıkarma A-B=((x1-x2),(y1-y2),(z1-z2)) Bir vektörle aynı yöndeki k kat daha büyük bi vektörü ise =((x1*k),(y1*k),(z1*k)) olarak buluruz. Peki iki nokta arasındaki vektör nasıl bulunur Şimdi A noktasından B noktasına doğru bir AB vektörü düşünün (Aşağıdaki şekildeki gibi bu vektörün doğrultusu A dan B ye doğru ve boyu A noktası ile B noktası arasındaki mesafe kadardır. Şimdi önemli bir nokta var A noktasından B noktasına doğru ve B ye kadar bir vektör tanımlarken şu yolu izliyoruz orjinden A noktasına kadar bir A vektörü ve orjinden B noktasına kadar olan başka bir B vektörü düşünün şimdi bu iki vektör aşağıda görüldüğü gibi B vektöründen A vektörünü çıkarırsak AB vektörünü elde ederiz. Yani AB(x2-x1,y2-y1,z2-z1) (bu nun böyle olduğu zaten şekillerde gözükmekte) demekki herhangi bir A noktasından B noktasına doğru tanımlı vektör =B-A dır. Bir vektörün boyu ise x,y,z konumlarının karelerinin kare kökü dür. AB=B-A=sqrt(sqr(x2-x1)+sqr(y2-y1)+sqr(z2-z1)) Bunun isbatı da aşağıda gösterilmiştir. Örnek: Şimdi A noktasının kordinatlarına (1,2,2) diyelim B ninkilere ise (2,4,6) AB vektörü ise=B-A= ((2-1),(4-2),(6-2)) AB(1,2,4) bulunur. Bakın nokta ile vektörü birbirine karıştırmayın Nokta ile Vektör ayrı seylerdir mesela A(1,2,2) dedik bu A nın x ekseninde 1 konumunda Y ekseninde 2 Z eksenindede 2 konumunda bulunduğunu bildirir. AB vektörünü AB(1,2,4) bulduk peki bu ne anlama geliyo bir konummu tabiyki hayır bu AB vektörünün X ekseninde 1 birim Y ekseninde 2 Z ekseninde ise 4 birim lik şiddetinde olduğu anlamını taşır.

BİRİM VEKTÖR

Birim vektör boyu 1 birim olan vektördür. Birim vektörümüzü B(x0,y0,z0) diye adlandıralım. B=1 olmalı şimdi aşağıdaki şekle bakalım bir rastgele kordinatlarda alınmış bir A vektörü var ve bu A vektörü ile aynı yönde bir B birim vektörü (mavi ile çizdiğim) A vektörümüz A(5,-3,2) olsun. Peki B vektörünü nasıl buluruz. B birim vektörümüz A vektörünün x,y,z konumlarının A vektörünün boyuna bölünmesi ile bulunur. 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 B vektörünün boyunu hesaplattığımızda B=sqrt(sqr(x0)+sqr(y0)+sqr(z0)) =1 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. A vektörü ile aynı yönlü herhangi bi vektör bulmak istiyoruz bunu nasıl yaparız? A(x1,y1,z1) vektörü ile aynı yönlü vektörümüz B(x2,y2,z2) olsun. B=k*A dir x2=k*x1 y2=k*y1 z2=k*z1 (B vektörü A vektörünün k katı) Örneğin A vektörümüz (2,4-2) olsun bunun anlamı A vektörü x=2 y=4 ,z=-2 yönünde demek B vetörümüz de bu A vektörü ile aynı yönlü k katı kadar bir vektör olsun. B=(2*k,4*k,2*k) olur k ya istenilen değer verilir. Cross Product Şimdi ise herhangi 2 vektöre dik olan başka bi vektörü bulalım. C (x3,y3,z3) dür A(x1,y1,z1) B(x2,y2,z2) dir. x3= y1* z2 - z1 * y2 y3 = z1* x2 -x1* z2 z3 =x1* x2- y1* x2 böylece C vektörümüzü bulduk. 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. Vektör yönündeki birim vektör nasıl bulunur? vektörümüz A vektörü B de birim vektör olsun A(x1,y1,z1) B(x2,y2,z2) B=A/A dir. Yani x2=x1/A y2=y1/A z2=z1/A dir. Birim vektörün önemini ilerki derslerde daha iyi anlaycaksınız. İki vektörün skaler (sayısal) çarkılması A.B=x1*x2+y1*y2+z1*z2 Dot Product İki vektör arasındaki açının bulunması. A ve B vektörleri arasındaki açıya Q dersek Cos(Q)=A ile B vektörünün skaler çarpımı bölü A vektörünün boyu carpı B vektörünün boyu cos(Q)=A.B/A*B dir. arccos gibi bi fonkisiyonlada Q değeri bulunur (programlama diline göre değişir tabi ) Bir noktanın doğruya uzaklığı Elimizde yönü V vektörü ile belirttiğimiz ve üzerindeki herhangi bi noktası P olan d doğrumuz var. Birde bu doğruya olan uzaklığı bulunucak olan A noktamız. Doğru üzerinde bulunan P noktasından A noktasına kadar olan bir vektör düşünelim bu vektöre PA vektörü diyelim. A noktasının d doğrusuna uzaklığı A noktasının d doğrusuna olan dik uzaklığı demektir. Çünkü en kısa uzaklık(L uzaklığı) dik uzaklıktır. A noktasından d doğrusuna dik çıkarsak O noktasını buluruz. Şekil 1 Şekil 2 dede gördüğümüz üzere APO dik üçkeni oluşu bu üçgenin yardımı ile L uzaklığını bulcağız. Öncelikle Q açısını bulmamız lazım. Q açısı PA vektörü ve V vektörleri arasındaki açıdır. 2 vektör arasındaki açıyı bulmayı yukarda öğrenmiştik şimdi burada uygularsak Cos(Q)=PA.V/PA* V olcaktır. [}bNOT:[/b] Yukarda verilen formülde PA ve V birim vektör olarak verilseydi boyları 1 birim olacaktı yani PA=1 V=1 cos(Q) da= PA.V olcaktı görüldüğü gibi birim vektör olması işlem kolaylığı sağlar. Trigonometry den Sin(Q)=sqrt(1-sqr(cos(Q)) olur. Q acısının hem cosinusunu hemde sinusunu bulduk. Şimdi sin(Q) neye eşit APO üçgeninde Sin(Q)=karşı / hipotenüsten =L/PA dır. L=sin(Q)*PA olur Cos(Q)= komşu / hipotenüsten =K/PA dır. Şekil 2 K=cos(Q)*PA olur. İlere görceğiniz üzere K uzunluğu L uzunluğundan daha önemlidir. Çünkü birçok problemde O noktasını bulmamız gerekecek O noktasının yeri P noktasından V vektörü yönünde K uzunluğu kadar gitmekle elde edilir. L kullanmak istersek ayrrıca OA vektörününde yönünü bilmemiz gerekir. Şekil 3 Örneğin (Şekil 4) birim vektör kulanmanın faydalarından biraz daha bahsedelim. Örneğimizde P noktasının yeri P noktası=P(2,4,1), doğrunun yön vektörü olan V vektörü =V(2,1,2) olsun. O noktasınında P noktasına olan uzaklığı olan K noktasını da 5 bulduk diyelim. Bizden istenen O noktasının kordinatları O yu bulmak için ne yapıcaz? P noktasından V vektörü yönünde 5 birim gideceğiz. O=P+V*K 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 O noktası eşittir P noktasının yeri artı V vektörünün 5 katı. V nin 5 katını alalım. V nin 5 katı=V’(10,5,10) olan bi vektör elde ederiz. P dende bu vektör kadar gidersek O noktasının yeri O’x=2+10 O’y=4+5 O’z=1+10. Görüldüğü gibi O noktasının gerçek yerini bulamadık. Neden böyle oldu? Çünkü V vektörümüzün boyu 3 birim 5 katını alırsak boyu 15 birimlik bir vektör(10,5,10) elde ederiz. P dende 15 birim gitmiş oluruz. Biz ise 5 birim gitmek istiyoruz. Bunun içinse V vektörünün birim vektörünü bulmamız gerekir. V nin birim vektörünün boyu 1 olduğu için P+Birim(V)*5. Bizim gerçek O noktamızın yerini verir. P den V vektörü yönünde 5 birim gitmiş oluruz. Şekil 4 ÖNEMLİ Eğer PA.V sonucu + çıkıyorsa yani PA vektörünün izdüşümü(şekilde BP) V vektörü ile aynı yöndedir (1.durum) ise ters yönlü(2.durum) 0 ise vektörler birbirine diktir. Vektörlerin döndürülmesi (XYZ Eksenine göre) Döndürülecek vektör A(x1,y1,z1) İlk durumda A vektörümüz x1,y1,z1 kordinatlarında bulunurken m ilk acıya sahip. Vektörümüzü Z ekseni etrafında Q kadar döndöndürdüğümüzü düşünelim. Dikkat edilirse z1 konumumuz her zaman sabit kalır, y ve z değerleri R yari caplı bir çember çizmektedir. ( tabi Q kadar döndürülünce çizmez. z ekseninde 360 derece döndürseydik çember çizerdi şimdiki (m+Q)/360 kadar bi cember) x1 in dönmeden önceki ilk değeri x1=R*cos(m). y1 ilk değeri y1=R*sin(m) dir. Şimdi Q kadar döndürünceki konumlara x2 ve y2 dersek (zaten z1 sabitti) x2=R*cos(Q+m) ve y2=R*sin(Q+m). Şimdi burda dikkat edilmesi gereken şu lisedeki trigonometri derslerinden hatırlayacağımız cos(a+b) ve sin(a+b) nin açılımıdır. Bu formülleri yukarıda uygularsak. x2=R*(cos(m)*cos(Q)-sin(m)*sin(Q)) x1=R*cos(m) ve y1=R*sin(m) demistik hatırlayın bunlarıda formulde yerine korsak x2=x1*cos(Q)-y1*sin(Q) olur. y2=R*(sin(m)*cos(Q)+cos(m)*sin(Q)) y2=y1*cos(Q)+x1*sin(Q) olur. Evet Z eksenine göre döndermeyi bulduk bu mantığını kavramanız içindi tabi diğer eksenlerin sonuclarını vereceğim. X ekseninde döndürme x2=x1 (çünkü X ekseninde çeviriyoruz) y2= y1*cos(Q)-z1*sin(Q) z2= z1*cos(Q)+y1*sin(Q) Y ekseninde döndürme y2=y1 (çünkü Y ekseninde çeviriyoruz) x2= x1*cos(Q)+z1*sin(Q) z2= z1*cos(Q)-x1*sin(Q)
kaynak: http://www.oyungelistir.org/

TÜRKİYE'DE DİJİTAL OYUN SEKTÖRÜ VE OYUN GELİŞTİRİCİLERİ PANELİ

"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.

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."

Başkent Üniversitesi basın bülteninden alıntıdır

YAPAY ZEKA NEDİR?

“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

Need For Speed Pro Speed

2D Oyun Yapmak

Artık Oyun Yapmak için bir "design+kodlayıcı " motorunuz var; RPG MAKER XP.

DOWNLOAD-İNDİR

GTA IV Nisan'da piyasalarda

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.

Crysis lisansmanı Cevat Yerli ile Röportaj

26 Şubat 2008 Salı

İlk c# programımız

// İsim uzayları, yani kütüphaneler using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Console.WriteLine("Merhaba C# !!!"); } } } 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: //Bu bir yorum satırı /* Bu birkaç * yarum * satırı */ 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