C++ / OpenGL [ 11 – FPS Kamera ]

FPS Kamera

Fps tarzi kamera (call of duty) de kisinin gozunden yonlendirebildigimiz kamera cesidi.

bu dersimizde callbacks ,Kamera ve Array2 derslerimizden yararlanacagiz.

yeni kamera degiskenlerimizi tanimliyoruz.

[c language=”++”]
.
..
static int downX, downY;
float sphi=-120.0, stheta=90.0;
..
.
[/c]

fonksiyonumuzu cagiriyoruz

[c language=”++”]
.
..
void PassiveMotionCallback(int x, int y) ;
..
.
[/c]

Ve ana fonksiyonumuza eklemeler yapiyoruz

[c language=”++”]
{
.
..
ShowCursor(TRUE);
glutSetCursor(GLUT_CURSOR_CROSSHAIR);

glutPassiveMotionFunc(PassiveMotionCallback);
..
.
}
[/c]

burada gordugumuz yeni fonksiyonlarimizdan
ShowCursor(TRUE); // mouse imlecimizi gorunur yapiyor.
glutSetCursor(GLUT_CURSOR_CROSSHAIR); // mouse imlecimizi degistiriyoruz

imlec cesitlerimiz;

GLUT_CURSOR_RIGHT_ARROW
GLUT_CURSOR_LEFT_ARROW
GLUT_CURSOR_INFO
GLUT_CURSOR_DESTROY
GLUT_CURSOR_HELP
GLUT_CURSOR_CYCLE
GLUT_CURSOR_SPRAY
GLUT_CURSOR_WAIT
GLUT_CURSOR_TEXT
GLUT_CURSOR_CROSSHAIR
GLUT_CURSOR_UP_DOWN
GLUT_CURSOR_LEFT_RIGHT
GLUT_CURSOR_TOP_SIDE
GLUT_CURSOR_BOTTOM_SIDE
GLUT_CURSOR_LEFT_SIDE
GLUT_CURSOR_RIGHT_SIDE
GLUT_CURSOR_TOP_LEFT_CORNER
GLUT_CURSOR_TOP_RIGHT_CORNER
GLUT_CURSOR_BOTTOM_RIGHT_CORNER
GLUT_CURSOR_BOTTOM_LEFT_CORNER
GLUT_CURSOR_FULL_CROSSHAIR
GLUT_CURSOR_NONE
GLUT_CURSOR_INHERIT

ve son olarak
glutPassiveMotionFunc(PassiveMotionCallback); // Birseye tiklamadan
mouse hareketlerini algilayan fonksiyonumuz.

devam ediyoruz;

[c language=”++”]
void Init()
{
.
..
glutWarpPointer(width_window/2,height_window/2);
..
.
}
[/c]

glutWarpPointer(width_window/2,height_window/2); // mouse imlecimizi
ekrana ortaliyoruz.

sirada kamera fonksiyonumuzdaki degisikliklerde;

[c language=”++”]
// Kameramiz icin donus ve hareket methodlarimizi ekledik
void kamera()
{
glRotatef(-stheta, 1.0, 0.0, 0.0);
glRotatef(sphi, 0.0, 1.0, 0.0);
glTranslatef(hareketX, hareketY, hareketZ);
}
[/c]

klavye fonksiyonumuzda bazi degisiklikler yapiyoruz.

[c language=”++”]
//KeyboardFonksiyonumuz
void keyboard(unsigned char key, int x, int y)
{

switch (key) {
case 27: // ESC tusu exit icin ASCII
exit(0);
break;
case ‘a’:

hareketX = (hareketX + 0.2);
glutPostRedisplay();

break;
case ‘d’:

hareketX = (hareketX – 0.2);
glutPostRedisplay();

break;
case ‘w’:

hareketZ = (hareketZ + 0.2);
glutPostRedisplay();

break;
case ‘s’:

hareketZ = (hareketZ – 0.2);
glutPostRedisplay();

break;
default:
break;
}
}
[/c]

w,s,d,a tuslarimizla saga sola ileri geri gidebilmemiz icin tuslarimizi tanimladik.

son olarak Pasif mouse hareketlerimiz icin fonksiyonumuzu tanimliyoruz.

[c language=”++”]
void PassiveMotionCallback(int x, int y) {
sphi+=(float)(x-downX)/4.0;stheta+=(float)(downY-y)/4.0;
downX = x; downY = y;

glutPostRedisplay();
}
[/c]

bazi matematik islemleriyle acilarimizi belirliyoruz.
glutPostRedisplay(); ilen her mouse hareketinde ekrani yeniliyoruz.

Ders sonunda olusturdugumuz projenin .cpp kaynak dosyalarini buradan indirebilirsiniz.

ders11

Leave a Reply

Your email address will not be published. Required fields are marked *