‘C++’ Kategorisi için Arşiv

C++ 2010 Final Soruları

Yayınlandı: Mayıs 24, 2011 / C++
Etiketler:,

İlk sorunun uzunluğundan dolayı yazamadım arkadaşlar 2. soruyu yazan harun arkadaşımıza teşekkürler Burdan indire bilirsiniz

c++

Dosyalama 2

Yayınlandı: Mayıs 8, 2011 / C++
Etiketler:, , , ,

Buda Kendi çabalarım sonucu yaptığım nacizane ödevim

#include<fstream>
#include<sstream>
#include<string>
#include<iomanip>
#include<iostream>
#include <locale.h>
#include<conio.h>

using namespace std;

class ogrenci
{
public:
string Adi;
string Soyadi;
string Numarasi;
string Sinifi;

void BilgiGir()
{
cout.setf(ios::right);
cout<<setw(20)<<“Adi…:”;
cin>>Adi;
cout<<setw(20)<<“Soyadi…:”;
cin>>Soyadi;
cout<<setw(20)<<“Numarasi…:”;
cin>>Numarasi;
cout<<setw(20)<<“Sinifi…:”;
cin>>Sinifi;
}

void BilgiYaz()
{
cout.setf(ios::right);
cout<<setw(20)<<”  “<<Adi<<”  “<<Soyadi<<”  “<<Numarasi<<”  “<<Sinifi<<”  “<<endl;

}

};

class Ajanda
{
ogrenci O;
string Baslik;
char evet;
fstream Ogr;
fstream Ajd;
ogrenci temp;

public:
void Ogrenci_Kayit()
{
Ogr.open(“ogrenciler.txt”,ios::out|ios::in|ios::app);
Ogr.setf(ios::left);

O.BilgiGir();

Ogr<<setw(20)<<O.Numarasi<<setw(20)<<O.Adi<<setw(20)<<O.Soyadi<<setw(20)<<O.Sinifi<<endl;

Ogr.close();
cout<<“Başka bir işlem yapmak istermisiniz ? e/h”<<endl; cin>>evet;
if(evet==’e’) menu();
}

void Kayit_Ara()
{
Ogr.open(“ogrenciler.txt”,ios::out|ios::in|ios::app);
Ogr.setf(ios::left);
int Kontrol=0;
string no;
cout<<“Öğrenci Nosunu girin : “; cin>>no;
while(!Ogr.eof())
{
Ogr>>O.Numarasi>>O.Adi>>O.Soyadi>>O.Sinifi;
if(no==O.Numarasi)
{ Kontrol=1; O.BilgiYaz(); }

}

if(Kontrol==0)
cout<<“Öğrenci Kayıtlı değil”;

Ogr.close();
cout<<“Başka bir işlem yapmak istermisiniz ? e/h”<<endl; cin>>evet;
if(evet==’e’) menu();
}

void Randevu_Al()
{
Ajd.open(“Ajanda.txt”,ios::out|ios::in|ios::app);
Ogr.setf(ios::left);
Ogr.open(“ogrenciler.txt”,ios::out|ios::in|ios::app);
string no;

int Kontrol=0;
cout<<“Öğrenci Nosunu girin : “; cin>>no;
while(!Ogr.eof())
{
Ogr>>O.Numarasi>>O.Adi>>O.Soyadi>>O.Sinifi;
if(no==O.Numarasi)
{
Kontrol=1;
cout<<“Randevu Konusunu Girin”;
cin>>Baslik;
Ajd<<setw(20)<<O.Numarasi<<setw(20)<<O.Adi<<setw(20)<<O.Soyadi<<setw(20)<<Baslik<<endl;
cout<<“Randevunuz Kaydedildi”;
}

}

if(Kontrol==0)
cout<<“Öğrenci Kayıtlı değil”;

Ogr.close();
Ajd.close();
cout<<“Başka bir işlem yapmak istermisiniz ? e/h”<<endl; cin>>evet;
if(evet==’e’) menu();
}

void Kayit_Sil()
{
Ogr.open(“ogrenciler.txt”,ios::out|ios::in|ios::app);

fstream temp;
temp.open(“temp.txt”,ios::out|ios::in|ios::app);
temp.setf(ios::left);
string no;
int Kontrol=0;
cout<<“Silmek istediğiniz öğrencinin numarasını girin”;
cin>>no;

while(!Ogr.eof())
{
Ogr>>O.Numarasi>>O.Adi>>O.Soyadi>>O.Sinifi;
if(no!=O.Numarasi)
{
Kontrol=1;
temp<<setw(20)<<O.Numarasi<<setw(20)<<O.Adi<<setw(20)<<O.Soyadi<<setw(20)<<O.Sinifi<<endl;
}

if(Kontrol==0)
cout<<“Zaten bu öğrenci kayıtlı değil”<<endl;
Ogr.close();
temp.close();

remove(“ogrenciler.txt”);
rename(“temp”,”ogrenciler.txt”);
cout<<“Kayıt Silindi”<<endl;
cout<<“Başka bir işlem yapmak istermisiniz ? e/h”<<endl; cin>>evet;
if(evet==’e’) menu();
}

}

void Randevu_Sil()
{
Ajd.open(“Ajanda.txt”,ios::out|ios::in|ios::app);

fstream temp2;
temp2.open(“temp2.txt”,ios::out|ios::in|ios::app);
temp2.setf(ios::left);
string no;
int Kontrol=0;
cout<<“Silmek istediğiniz öğrencinin numarasını girin”;
cin>>no;

while(!Ogr.eof())
{
Ajd>>O.Numarasi>>O.Adi>>O.Soyadi>>Baslik;
if(no!=O.Numarasi)
{
Kontrol=1;
temp2<<setw(20)<<O.Numarasi<<setw(20)<<O.Adi<<setw(20)<<O.Soyadi<<setw(20)<<Baslik<<endl;
}

if(Kontrol==0)
cout<<“Zaten bu öğrenci kayıtlı değil”<<endl;
Ajd.close();
temp2.close();

remove(“Ajanda.txt”);
rename(“temp2″,”Ajanda.txt”);

cout<<“Başka bir işlem yapmak istermisiniz ? e/h”<<endl; cin>>evet;
if(evet==’e’) menu();
}
};

void Randevu_Ara()
{
Ajd.open(“Ajanda.txt”,ios::out|ios::in|ios::app);
Ajd.setf(ios::left);
int Kontrol=0;
string no;
cout<<“öğrencinin numarasını girin”;
cin>>no;
while(!Ajd.eof())
{
Ajd>>O.Numarasi>>O.Adi>>O.Soyadi>>Baslik;
if(no==O.Numarasi)
{
Kontrol=1;
cout<<O.Numarasi<<”  “<<O.Adi<<”  “<<O.Soyadi<<” Konu: “<<Baslik<<endl;

}

}

if(Kontrol==0)
cout<<“Öğrenci Randevu almamış”;

Ajd.close();
cout<<“Başka bir işlem yapmak istermisiniz ? e/h”<<endl; cin>>evet;
if(evet==’e’) menu();
}

void menu()
{
int tmm;
cout<<“Sistemimizde aşağıdaki işlemleri yapabilirsiniz:”<<endl<<endl;
cout<<“Kayıt eklemek için 1        :”<<endl<<endl;
cout<<“Randevu almak için 2        :”<<endl<<endl;
cout<<“Randevu Silmek için 3    :”<<endl<<endl;
cout<<“Kayıt silmek için 4         :”<<endl<<endl;
cout<<“Kayıt bulmak için 5         :”<<endl<<endl;
cout<<“Randevu Kontrolü için 6         :”<<endl<<endl;
cout<<“Çıkış için ise 7′ ya basınız:”<<endl<<endl;
cin>>tmm;
system(“cls”);
switch(tmm)
{
case 1:Ogrenci_Kayit(); break;
case 2:Randevu_Al(); break;
case 3:Randevu_Sil(); break;
case 4:Kayit_Sil(); break;
case 5:Kayit_Ara(); break;
case 6:Randevu_Ara(); break;
case 7:exit(0); break;
default: cout<<“Yalnış bir seçim yaptınız lütfen menüdeki seçeneklerden birini giriniz:”<<endl; menu();
}
}
};
int main()
{
setlocale(LC_ALL,”Turkish”) ;

Ajanda A;
A.menu();

getch();
}

Dosyalama Ödevi

Yayınlandı: Mayıs 8, 2011 / C++

Yapmayan kalmasın dedik. Cemil hocanın önünde kimsenin yüzü kızarmasın dedik ve Dosyalama ödevini yapıp Size sunduk 😀

Arkadaşlar yukardaki saçma sapan bi seçim slagonu gibi oldu buyrun kodlar

#include<iostream>
#include<fstream>
#include<locale>
#include<string>
#include<iomanip>
using namespace std;
class Ogrenciler
{
private:
string adi,soyadi,no,rnd;
char evet;
public:
void Ogrenci_kaydet()
{
ofstream yaz(“kayıtdef.txt”,ios_base::app);
cout<<“Öğrenci No girin:”;
cin>>no;
cout<<“Adınızı giriniz:”;
cin>>adi;
cout<<“Soyadınızı giriniz:”;
cin>>soyadi;
cout<<“Randevu tarihinizi giriniz:”;
cin>>rnd;
system(“cls”);
yaz<<no<<” “<<adi<<” “<<soyadi<<” “<<rnd<<“\n”;
yaz.close();
cout<<“***Kayıt Yazıldı***\n\n”;
cout<<“Başka bir işlem yapmak istermisiniz ? e/h”<<endl; cin>>evet;
system(“cls”);
if(evet==’e’) menu();
}
void kayitbul()
{
int kontrol=0;
string a,b,c,d,e,gtc;
ifstream oku(“kayıtdef.txt”);
cout<<“Aramak istediğiniz öğrencini numarasını giriniz:”<<endl; cin>>gtc;
while(!oku.eof())
{
oku>>a>>b>>c>>e;
if(gtc==a)
{
kontrol=1;
cout<<“Aradiğiniz kayıt:”<<endl;
cout<<“—————–“<<endl;
cout<<“Öğrenci numarası: “<<a<<endl; cout<<“Adı: “<<b<<endl; cout<<“Soyadı “<<c<<endl; cout<<“Randeve tarihi “<<e<<endl;
cout<<“———————————————-“<<endl;
break;
}
}
if(kontrol==0) cout<<“\n—Kayit bulunamadi—\n”;
cout<<endl;
oku.close();
cout<<“Başka bir işlem yapmak istermisiniz ? e/h”<<endl; cin>>evet;
if(evet==’e’) menu();
}
void randevu_kaydet()
{
int kontrol1=0;
string x,y,z,t,v,rgtc;
cout<<“Öğrenci numaranızı giriniz:”<<endl;
cin>>rgtc;
ifstream roku(“kayıtdef.txt”);
while(!roku.eof())
{
ofstream ryaz(“RandevuDef.txt”,ios_base::app);
roku>>x>>y>>z>>v;
if(rgtc==x)
{
kontrol1=1;
cout<<“Sayın “<<y<<”  “<<z<<” “<<“Randevunuz kaydediliyor…”<<endl;
ryaz<<x<<” “<<y<<” “<<z<<” “<<v<<“\n”;
ryaz.close();
roku.close();
}
}
if(kontrol1==0)
{
cout<<“Kaydınız mevcut değil lütfen kaydınızı yaptırınız:”<<endl;
menu();
}
cout<<“Başka bir işlem yapmak istermisiniz ? e/h”<<endl; cin>>evet;
if(evet==’e’) menu();
}
void randevu_Llistele()
{

ifstream Listele(“RandevuDef.txt”);
string n,a,s,rd;
while(!Listele.eof())
{
Listele>>n>>a>>rd;
cout<<n<<a<<rd<<endl;
}
}
void kayit_degistir()
{
int kontrol2=0;
string gtc2;
string ga,gb,gc,gd,ge;
cout<<“Lütfen değiştirmek istediğiniz kişinin Öğrenci numarasını giriniz:”<<endl;
cin>>gtc2;
ofstream gcckyt(“geçici kayıt.txt”);
ifstream okug(“kayıtdef.txt”);
while(!okug.eof())
{
okug>>ga>>gb>>gc>>gd>>ge;
if(gtc2==ga)
{
kontrol2=1;
cout<<“Değiştirmek istediğiniz kayıt:”<<endl;
cout<<“——————————-“<<endl;
cout<<“Öğrenci numarası: “<<ga<<endl; cout<<“Adı: “<<gb<<endl; cout<<“Soyadı “<<gc<<endl;  cout<<“Randeve tarihi “<<ge<<endl;
cout<<“——————————-“<<endl;
cout<<“Lütfen yeni bilgileri giriniz:”<<endl;
cout<<“Öğrenci numaranızı giriniz:”; cin>>no;
cout<<“Adınızı giriniz:”; cin>>adi;
cout<<“Soyadınızı giriniz:”; cin>>soyadi;

cout<<“Randevu tarihinizi giriniz:”; cin>>rnd;
gcckyt<<no<<” “<<adi<<” “<<soyadi<<” “<<rnd<<“\n”;
}
else
{
gcckyt<<ga<<” “<<gb<<” “<<gc<<” “<<ge<<“\n”;
}
if(kontrol2==0){ cout<<“Kayit Değiştirildi.”<<endl;}
}
gcckyt.close();
okug.close();
remove(“kayıtdef.txt”);
rename(“geçici kayıt.txt”,”kayıtdef.txt”);
cout<<“Başka bir işlem yapmak istermisiniz ? e/h”<<endl; cin>>evet;
if(evet==’e’) menu();
}
void kayit_sil()
{
int kontrol3=0;
string gtc3;
string ga2,gb2,gc2,gd2,ge2;
cout<<“Lütfen silmek istediğiniz kişinin öğrenci numarasını giriniz:”<<endl;
cin>>gtc3;
ofstream gcckyt2(“geçici kayıt.txt”);
ifstream okug2(“kayıtdef.txt”);
while(!okug2.eof())
{
okug2>>ga2>>gb2>>gc2>>ge2;
if(gtc3==ga2)
{
kontrol3=1;
cout<<“Silmek istediğiniz kayıt:”<<endl;
cout<<“——————————-“<<endl;
cout<<“Öğrenci numarası: “<<ga2<<endl; cout<<“Adı: “<<gb2<<endl; cout<<“Soyadı “<<gc2<<endl;  cout<<“Randeve tarihi “<<ge2<<endl;
}
else
{
gcckyt2<<ga2<<” “<<gb2<<” “<<gc2<<” “<<ge2<<“\n”;
}
if(kontrol3==0){ cout<<“Kayit Silindi.”<<endl;}
}
gcckyt2.close();
okug2.close();
remove(“kayıtdef.txt”);
rename(“geçici kayıt.txt”,”kayıtdef.txt”);
cout<<“Başka bir işlem yapmak istermisiniz ? e/h”<<endl; cin>>evet;
if(evet==’e’) menu();
}
void menu()
{
int tmm;
cout<<“Sistemimizde aşağıdaki işlemleri yapabilirsiniz:”<<endl<<endl;
cout<<“Kayıt eklemek için 1        :”<<endl<<endl;
cout<<“Randevu almak için 2        :”<<endl<<endl;
cout<<“Kayıt değiştirmek için 3    :”<<endl<<endl;
cout<<“Kayıt silmek için 4         :”<<endl<<endl;
cout<<“Kayıt bulmak için 5         :”<<endl<<endl;
cout<<“Randevuları listelemek için 6         :”<<endl<<endl;
cout<<“Çıkış için ise 7′ ya basınız:”<<endl<<endl;
cin>>tmm;
system(“cls”);
switch(tmm)
{
case 1:Ogrenci_kaydet(); break;
case 2:randevu_kaydet(); break;
case 3:kayit_degistir(); break;
case 4:kayit_sil(); break;
case 5:kayitbul(); break;
case 6:randevu_Llistele(); break;
case 7:exit(0); break;
default: cout<<“Yalnış bir seçim yaptınız lütfen menüdeki seçeneklerden birini giriniz:”<<endl; menu();
}
}
};
int main()
{
setlocale(LC_ALL,”turkish”);
Ogrenciler h;
h.menu();
system(“pause”);
return 0;
}

Yavuz Akpınarın payı da unutmamak lazım Teşekkürler Yaavuz:)

OPENAL

Yayınlandı: Nisan 21, 2011 / C++
Etiketler:, , ,

Giriş

Ses kart ve API’lerinin kabiliyetlerinin yılar geçtikçe artmasıyla 3D ses oyunlarda gittikçe önemli bir rol oynar hale geldi. Oyunculara 3Boyut tecrübesini yaşatmak, güzel görünen grafiklerinin ötesine geçti. Doğru şekilde yapılan ortam ses ve müziği oyunları tamamen yeni bir seviyeye götürür. Bu etkiyi başarmak için,  Microsoft tarafından DirectSound ve DirectSound3D, Aureal tarafından A3D ve Creative Labs tarafından EAX gibi farklı ses programlama API’leri geliştirildi. Daha yakın zamanda, Loki ve Creative Labs OpenAL’i geliştirdi. Hangi isim cisimde olursa olsun geliştiricilere platformdan bağımsız API ile sesi kullanmaya imkan verecek bir standart oluşturma gayretiyle bu yapıldı. Bu makale, OpenAL’in temellerini ve projenize 3D sesi nasıl dahil edeceğinizi açıklayacak.
OpenAL, basitçe bir oyun ortamında ses ve müziği çalacak fonksiyonlar içeren bir ses kütüphanesidir. O programcıya sesleri diledikleri gibi yüklemesine Ve ses gelişimini belirleyen pozisyon, güç, yön,koni açısı gibi belirli karakteristikleri kontrol etmesine imkan verir. Bütün sesler, kullanıcının olduğu oyun evreninde geçerli yeri temsil eden listener’a(dinleyiciye) göreli olarak yerleştirilir. Yakındaki dinleyicinin(listener) bir sesi alması daha yüksek şiddette olur. OpenAL, müzik çalmak içinde kullanılabilir. OpenAL, arkada müziği aralıksız devamlı çalmak için streamlemeyi kullanabilir. OpenAL, DirectSound3D ve EAX’in kullanımını destekler. Herhangi ekstra programlama olmadan , kütüphanede bunların API’lerini kullanıma imkan veren fonksiyonlar vardır .
OpenAL’in DirectSound ve EAX ‘e göre  ana avantajı, OpenAL’in, platformdan bağımsız API olarak tasarlanmasıdır. Windows, Mac ve Linux binarylerini yüklemek mümkün olup, birçok işletim sisteminde kullanılabilir. DirectSound ve DirectSound3D, sadece Windows için tasarlandı ve EAX temelde DirectSound3D’un bir uzantısıdır. Birçok işletim sistemi için bir uygulama yaratmayı arzulayanlar için OpenAL uygun olabilir. Bu ders, size windows’da OpenAL’in  temel işlevlerini göstermek üzere tasarlandı. Burada gösterilen kod, yükleyebileceğiniz örnekte tümü bulunan demo uygulamasındandır. Demoda, OpenGL ve OpenAL’in arasında benzerliği göstermek için OpenGL kullanıldı.

Başlarken

Yapılacak ilk şey OpenAL SDK’i elde etmektir . Bu, geliştirici Creative Labs’ın http://developer.creative.com sitesinden elde edilebilir. SDK kurulduğu andan itibaren fonksiyonları kullanılmaya başlanabilir. İlkin oyun veya uygulamanızın başında OpenAL’i ilklemeye ihtiyaç duyarsınız. Uygulamamda ben DirectSound3D’u kullanmayı seçtim tabi aynı şekilde EAX’dan yararlanmakta mümkündür. İlkleme kodu şuna benzer:
ALCcontext *Context;
ALCdevice *Device;
Device = alcOpenDevice((ALubyte*)"DirectSound3D");

if (Device == NULL)
    exit(-1);

//Context’i(‘leri) yarat
Context=alcCreateContext(Device, NULL);
//aktif geçerli context olarak set et
alcMakeContextCurrent(Context);
// hata kodunu aydınlat
alGetError();

Seslerin Yüklenmesi

OpenAL’in ilklenmesiyle, bufferlar seslerle doldurulmaya başlanabilir. Birinci adım, alutLoadWAVFile fonksiyonunu kullanarak ses ile bir buffer’ı doldurmaktır. Buffer’ı doldurduktan sonra, bir source’ü ona bağlamaya ihtiyaç duyarsın. Bu source sonra sesi çalmak üzere kullanılacak. Bir sesi yükleyen kodlar şuna benzer:
char* alBuffer;            //buffer
ALenum alFormatBuffer;     //buffer formatı için
ALsizei alFreqBuffer;      //buffer’ın frekansı için
long alBufferLen;          //derinlik biti 
ALboolean alLoop;          //döngüleme
unsigned int alSource;     //source
unsigned int alSampleSet; 
//wave dosyasını yükle
alutLoadWAVFile("test.wav",&alFormatBuffer, (void**) &alBuffer, (unsigned int *)&alBufferLen, &alFreqBuffer, &loop);

//1 source yarat
alGenSources(1, &alSource);

//1 buffer yarat
alGenBuffers(1, &alSampleSet);

//örnek setini alBuffer’dan buffer datasıyla doldur
alBufferData(alSampleSet, alFormatBuffer, alBuffer, alBufferLen, alFreqBuffer);

//bu source’ü buffer’a bağla
alSourcei(alSource, AL_BUFFER, alSampleSet);

//datayı serbest bırak
alutUnloadWAV(alFormatBuffer, alBuffer, alBufferLen, alFreqBuffer);
Burada İlk yapılan  “Test. Wav” dosyasını yüklemektir. Data okunup alBuffer’da depolanır . Sonra bir buffer ve source yaratılır. Ondan sonra buffer ,alBuffer’dan datayla doldurulur. Sonrada buffer source ‘e tahsis edilip wave datası serbest bırakılır.

Source Özelliklerinin Ayarlanması

Sesin source olarak kurgulanmışına sahip olunmasıyla onun bazı özelliklerini set etmeye ihtiyaç duyarsınız. Bunu yapmak için alSource komutunu kullanırsınız. alSourcei, alSourcef, alSource3f vb gibi farklı uyarlamaları olan fonksiyon, OpenGL’deki mevcut fonksiyonlara benzer çalışır. Set edeceğiniz özellikler, hangi fonksiyonu kullanacağınızı belirler. Örneğin sadece bir kayan noktalı parametreyse bu o zaman alSource3f kullanılır. Fonksiyonun ilk parametresi, modifelemeyi istediğini source’i belirtir. İkinci parametre,  ne özelliği getirileceğine karşılık gelir. Kalan parametreler bu özellik için aktüel değerlerdir. Buradaki bir source için pozisyon ve gücünü ayarlamanın bir örneğidir:

//source pozisyonunu set et
alSource3f(alSource,AL_POSITION, xposition, yposition, zposition);

//source gücünü set et
alSource3f(alSource,AL_VELOCITY, xvelocity, yvelocity, zvelocity);

Buradaki alSource bizim ses source’imiz ve AL_POSITION ve AL_VELOCITY, bizim, pozisyon ve güç özelliklerini değiştirmek istediğimizi gösterir. Kalan, kayan noktalı sayılar bu özellikler için ilk değerlerine karşılık gelir.

Listener’ın Kullanımı

3D sesde bir listener’ının kullanımı önemlidir bununla seslerin duyulacağı bir referans noktasına sahip olursunuz. Bir listener’ın bir ses source pozisyonuna yakınlığı daha yüksek sesin alınmasına mani değildir. OpenAL listener nesnesini ayarlar Böylece tümünü sizin yapmanız gerekirken ihtiyaç duyulduğu gibi özellikleri değiştirilir. Listener’ın en önemli özellikleri listener’ın pozisyon ve yönüdür. Bu özellikler,  bir oyunda her döngü için birer kez genellikle güncelleştirilir. Pozisyon, listener’ın hali hazırda yüzünün dönük olduğu yerin yönü gösterir. Örneğin, eğer bir listener batıya yüzü dönük  ve ses kuzeyden geliyorsa, Ses, sağdan geliyormuş gibi olacak. Bununla birlikte eğer kullanıcı yönünü değiştirip yüzünü kuzeye dönerse, Ses düz ilerden geliyormuş gibi olacak.

Bir listener’ın özelliklerini değiştirmek , ses source’nin özelliklerini değiştirme şeklinize benzer şekilde çalışır. alListener fonksiyonu kullanıp değiştireceğin özelliğe bağlı çeşitlenir. Örneğin,listener(dinleyici) pozisyonunu set etmek için alListener3f’i çağırıp 3 ayrı kayan noktalı sayı belirtebilirsiniz veya alListenerfv’i çağırıp kayan noktalı sayılarının bir dizisini geçebilirdiniz. Pozisyon parametreleri,  oyun dünyası içinde listener’ın x, y ve z değerleridir. Yön özelliği bununla birlikte 6 parametre alır. İlk 3ü listener’ın kullanıcıya mevcut bakışına karşılık gelen vektör için. Sonraki 3 vektör listener’ın yüzünü döndüğü yön içindir. Aşağıdaki, listener’ın pozisyon ve yönünü set etme örneğidir:

float listenerx, listenery, listenerz;
float vec[6];

listenerx=10.0f;
listenery=0.0f;
listenerz=5.0f;

vec[0] = fvecx; //forward vector x değeri
vec[1] = fvecy; //forward vector y değeri
vec[2] = fvecz; //forward vector z değeri
vec[3] = uvecx; //up vector x değeri
vec[4] = uvecy; //up vector y değeri
vec[5] = uvecz; //up vector z değeri
//mevcut listener pozisyonunu set et
alListener3f(AL_POSITION, listenerx, listenery, listenerz);

//mevcut listener yönünü set et
alListenerfv(AL_ORIENTATION, vec);

İlk fonksiyon çağrısında, 3 ayrı kayan noktalı sayı listener’ın x,y,z pozisyonuna geçilir. İkinci çağrı, vec isimli bir diziyi geçer. Bu dizi, listener’ın yönüyle ilgili olan altı değerden oluşan iki vektör içindir.

Seslerin Çalınması

Sesleriniz yüklenip listener özelliklerini set ettikten sonra seslerinizi çaldırabilirsiniz. alSourcePlay fonksiyonunu çağırmanız bunu sağlar. Bu fonksiyon,  çalmayı istediğiniz source olan tek bir parametre alır. Bir sesi durdurmak için yine durdurmayı istediğiniz source ismiyle alSourceStop fonksiyonunu çağırırsınız. Eğer sesin döngülenme etkisini istiyorsan Mesela su akış sesi gibisine sahipsen, Sesi çaldırmadan önce sesin döngülenme özelliğini true’e getirmelisin. örnek kod bölümü bu:
//sesin sürekli döngüleneceğini söyle
alSourcei(alSource,AL_LOOPING,AL_TRUE);

//sesi çal
alSourcePlay(alSource);

// sesi durdur
alSourceStop(alSource);

Bitiş

Programınızla işiniz bitince, source’lerinizi ve bufferlarınızı serbest bırakıp OpenAL’ı sonlamaya ihtiyaç duyarsınız. Komutlar göreli basittir. source’lerinizi ve buffer’larınız nasıl silineceği burada:

//source’umuzu sil
alDeleteSources(1,&alSource);
//buffer’ımızı sil
alDeleteBuffers(1,&alSampleSet);
Burada her birinin ilk parametresi silinecek buffer veya sourcelerin sayısıdır  Ve ikincisi silinicek buffer veya source’dir. Son adım,  OpenAL’i n kendisini sonlamaktır. Bu, takip eden gibi yapılır:
//aktif gaçerli context’i elde et
Context=alcGetCurrentContext();
//aktif context aygıtını elde et
Device=alcGetContextsDevice(Context);
//aktif geçerli context’i etkisizleştir
alcMakeContextCurrent(NULL);
//context’i(‘leri) serbest bırak
alcDestroyContext(Context);
//aygıtı kapa
alcCloseDevice(Device);

OpenAL’de sesleri çalma hakkındaki temeller bunlar. Temel adımlardan, ilki OpenAL’i ilklemek, sonra, ihtiyaç duyduğun sesleri yükleyip, Seslerin ve listener’ın özelliklerini set etmek ve sonra sesleri çalmaktır. OpenAL’le yapabileceğin daha çoğu var Ama bu sadece bir kısım temelleri tanımlamak için yazıldı. Bununla beraber gelen kaynak kodu, bir OpenGL demosunda bunların tümünün kullanımı göstermekte. Demoda, listener’ı kontrol ediyorsunuz, bir döngüde pozisyona sizin mevcut konumunuz set ediliyor. Eğer herhangi bir soru veya düşünceye sahipseniz, ricart3@tcnj.edu ‘e bana mail atın.

C++Vize Soruları

Yayınlandı: Nisan 11, 2011 / C++
Etiketler:, , ,

Biraz  geç oldu ama ancak fırsatım oldum uyanık olanlara buyrun geçenyılın C++ Vize soru ve cvpları


Sorular

Cevaplar