Ana Menü
· Ana Sayfa
· Dosyalar
· Dökümanlar
· Forum
· Günün Resmi
· Haber Arşivi
· WWW Linkleri
· Üye Listesi

     Forumlar

 strncpy ve strncpy_s
 Konu adi : Borland c++ Builder ile Amiral Batti
 Rady10 - YerliOyun
 Kabusta Kaybolmak
 Konsol da programı bekletmek
 Oyun programlama icin hangi programlama dilli ?
 flash! şanlıurfa bilgisayar oyununda(no rapid)
 Sevgilim Olur musun?
 Directx'e başlamak isteyenler bi bakın
 PSP programlama
 Flash tan php
 Bilgisyr oyunu yapmam için üniverstde hangi bölüme girmeliym
 www.arshiv.gen.ms
 Cimg.h ilgilenenler icin
 müttefik oyunu

Konu Disi
 Emraah
 Yeni sitemiz açıldı
 Kalp krizi durumunda ne yapılmalı?
 Oyun sektöründe hangi görevde çalışmak isterdiniz?
 Takım arkadaşı sorunu
 msn de renklı nıck
 pc hata veriyor ! YARDIM!!
 Gülmek isteyenler Buraya
 İnanılmaz hl 2 modu görüntüsü
 Computer Languages History

[ Forumlara Git ]


oyunyapimi.org: Forums

www.oyunyapimi.org :: Başlığı Görüntüle - Function Pointer Nedir ne ise yarar
 SSSSSS   AramaArama   Kullanıcı GruplarıKullanıcı Grupları   ProfilProfil   LoginLogin 

Function Pointer Nedir ne ise yarar

 
Bu forum kilitlenmiştir, yeni bir başlık açamazsınız, cevap gönderebilir ya da mesajları değiştirebilirsiniz   Bu başlık kilitlenmiştir, cevap yazamaz ya da mesajları değiştiremezsiniz    www.oyunyapimi.org Forum Ana Sayfası -> OyunYapımı
Önceki başlık :: Sonraki başlık  
Yazar Mesaj
Darklight



Kayıt: Oct 31, 2002
Mesajlar: 185
Nereden: Ankara

MesajTarih: Mon May 03, 2004 12:35 am    Mesaj konusu: Alıntıyla Cevap Ver

Function pointer ismindende anlasildigi gibi yazdiginiz bir fonksiyona pointer tutan degiskendir. Peki yararı ne heryere type switch yazmaktan kurtarir insani ve her objenize cok esnek bir sekilde RENDERER ve BEHAVIOUR yazmanızı saglar. Yani inanilmaz bir ozgurluk ve esneklik (Denedim calisiyorda baya güzel yani)

diyelimki sahnedeki objelerinizi temsil eden SahneObjeniz var

typedef struct _sceneObj{
int ID;
int type; //ENTITY / LIGHT / CAM / GROUP
Matrix TM;
entityObj *entity;
lightObj *light;
camObj *cam;
void (*renderingfunc)(int);
struct _sceneObj *child,*parent,*next,*prev;
}sceneObj;

bu kısımda entity nesnelerinden kasteddigim sahnenizdeki renderlediginiz objeler
//Mesela bende
GLUT
GLU
BUFFERED
MESH
tipinde veriyapisinda tuttugum entityler var hepsinin kendisine gore farkli avantajlari var tabiii


Sİmdi Bunun Rendererimizi yazdigimizda SceneGraphimizi renderleyen asagidaki basit fonksiyona bakalim

sObj->renderingfunc(sObj->entity); fonksiyonu ile istedigimiz tipteki entity istedigimiz renderer fonksiyonın içine sokariz ayni zamanda

sObj->behaviourfunc(sObj->entity); fonksiyonu ile istedigimiz tipteki entity istedigimiz behaviour fonksiyonın içine sokariz ayni zamanda


SceneGraphimizi renderleyelim simdide
/*------
FONKSIYON ISMI:renderSceneObj
YAPTIGI IS:
------*/
void renderSceneObj(sceneObj *sObj){
switch(sObj->type){
case SCENEOBJ_GROUP:
glPushMatrix();
glMultMatrixf(sObj->TM.index);
if(sObj->child!=NULL){
renderSceneObj(sObj->child);
}else if(sObj->next!=NULL){
glPopMatrix();
renderSceneObj(sObj->next);
}
glPopMatrix();
break;

case SCENEOBJ_CAMERA:
glPushMatrix();
glMultMatrixf(sObj->TM.index);
//renderCamera();
if(sObj->child!=NULL){
renderSceneObj(sObj->child);
}else if(sObj->next!=NULL){
glPopMatrix();
renderSceneObj(sObj->next);
}
glPopMatrix();
break;

case SCENEOBJ_ENTITY:
glPushMatrix();
glMultMatrixf(sObj->TM.index);
sObj->renderingfunc(sObj->entity);
if(sObj->child!=NULL) {
renderSceneObj(sObj->child);
}else if(sObj->next!=NULL){
glPopMatrix();
renderSceneObj(sObj->next);
}
glPopMatrix();
break;
}

}

/*------
FONKSIYON ISMI:renderTextureGluObj
YAPTIGI IS:Ekrana GLUObjlerini Renderler
-----*/
void renderTextureGluObj(entityObj *e){
disk *d;
sphere *s;
cylinder *c;

gluQuadricDrawStyle(quadric,GL_FILL);
gluQuadricNormals(quadric,GL_FLAT);
setGraphicMode(MODE_TEXTURE_NORMAL);
glBindTexture(GL_TEXTURE_2D, e->texID);
gluQuadricTexture(quadric, TRUE);

switch(e->pgluobj.type){
case GLUOBJ_SPHERE:
s=e->pgluobj.psphere;
gluSphere(quadric,s->radious,s->slices,s->stacks);
break;
case GLUOBJ_DISK:
d=e->pgluobj.pdisk;
gluDisk(quadric, d->innerRadious,d->outerRadious,d->slices, d->loops);
break;
case GLUOBJ_CYLINDER:
c=e->pgluobj.pcylinder;
gluCylinder(quadric, c->baseRadious,c->topRadious,c->height, c->slices, c->stacks);
break;
}
}


/*------
FONKSIYON ISMI:renderTextureBufferedObj
YAPTIGI IS:Ekran Buffered Objelerini Renderler
-----*/
void renderTextureBufferedObj(entityObj *e){
int ivertexDimension=3;
int itexDimension=2;
glShadeModel(GL_FLAT);
glBindTexture(GL_TEXTURE_2D, e->texID);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);
glTexCoordPointer(itexDimension,GL_FLOAT,0,e->pbuffered.t);
glVertexPointer(ivertexDimension,GL_FLOAT,0,e->pbuffered.v);
glDrawArrays(GL_QUADS,0,e->pbuffered.size);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glBindTexture(GL_TEXTURE_2D,0);
}



Eger bu fonksiyon olmasaydı ne yapacaktiniz her bir rendering fonksiyonu için switch case fonksiyonu yazacaktiniz. Hızlı deneme ve test için kodlarda kullanılması gerekli bence

Nasil calisiyor peki
http://www.function-pointer.org
http://www.function-pointer.org

[ Bu mesajı düzenleyen: Darklight _FIL 03-05-2004 01:39 ]
Başa dön
Kullanıcı profilini gör Kullanıcının web sitesini ziyaret et
Mesajları göster:   
Bu forum kilitlenmiştir, yeni bir başlık açamazsınız, cevap gönderebilir ya da mesajları değiştirebilirsiniz   Bu başlık kilitlenmiştir, cevap yazamaz ya da mesajları değiştiremezsiniz    www.oyunyapimi.org Forum Ana Sayfası -> OyunYapımı Tüm saatler GMT +2 Saat
1. sayfa (Toplam 1 sayfa)

 
Forum Seçin:  
Bu forumda yeni konular açamazsınız
Bu forumdaki mesajlara cevap veremezsiniz
Bu forumdaki mesajlarınızı değiştiremezsiniz
Bu forumdaki mesajlarınızı silemezsiniz
Bu forumdaki anketlerde oy kullanamazsınız


Powered by phpBB 2.x.x © 200x phpBB Group
Türkçe Çeviri : Onur Turgay & Erdem Çorapçıoğlu
Türkçe Düzenleme: Alexis Canver
Version 2.x.x of PHP-Nuke Port by Tom Nitzschner © 200x www.toms-home.com




Web site powered by PHP-Nuke
Web site engine\'s code is Copyright © 2002 by PHP-Nuke. All Rights Reserved. PHP-Nuke is Free Software released under the GNU/GPL license.
Sayfa Üretimi: 0.164 Saniye