Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako koristiti GLScene

[es] :: Pascal / Delphi / Kylix :: Kako koristiti GLScene
(TOP topic, by morlic)
Strane: < .. 1 2 3 4

[ Pregleda: 39586 | Odgovora: 77 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Kako koristiti GLScene12.06.2005. u 11:07 - pre 229 meseci
Desila se mala havarija sa ES bazom i nestali su neki primeri... i... sad moram ponovo da ih pisem Sreca pa sam i ja na svom racunaro obrisao source svih primercica pa cu i programe morati ponovo da kuckam Blago meni
Ovog puta pravimo kisu (opet). Pocnimo postavljanjem scene i na njoj kameru, svetlo i jednu kocku koja ce se nalaziti na 0, 0, -4, a CubeDepth = 2, CubeHeighte = 0.2 i CubeWidth = 5. Ovo ce biti nas oblak iz kojeg ce da pada kisa (i bice to bas jak pljusak). Kisu cemo kreirati GLPointLightPFXManager komponentom sa GLScene PFX palete. Svi PFX manageri rade na istom principu samo koriste drugacice cestice... PointLight koristi sprajt sa texturom (krug koji je na sredini beo, a sto se ide dalje sve je tamniji), Polygon koristi poligone (moze se birati broj strana i centralni vertex je beo, a krajnji su crni), Custom moze da koristi bilo koji objekat, CustomSprite koristi sprajt sa bilo kakvom texturom, Perlin koristi perlin noise algoritam da bi napravio texturu za sprajt, Line koristi linije. To je otprilike to... sve sto cemo raditi sad sa GLPointLightPFXManagerom moze se raditi i sa bilo koji drugim managerom i rezultati ce biti skoro isti.
Sad cemo podesiti osobine cestica. Podesimo Acceleration na 0, -5, 0 kako bi kapljice brzo padale, AspectRatio na 0.1 da bi cestica bila vertikalno izduzena, ColorInner na belo (to je boja koju cestica ima kad se kreira), ParticleSize na 0,05 jer nam ne trebaju ogromne cestice. Treba jos da definisemo koliko ce dugo cestica biti vidljiva. To radimo uz pomoc LifeColors propertya. Kliknimo na '...' i otvorice nam se prozorcic u kojem pise vreme i boje cestica. Vreme predstavlja vreme u sekundama od nastanka cestice, a boja odredjuje u koju boju ce se cestica promenuti kad dodje to definisanog vremena. Vreme poslednjeg unosa je tagodje i vreme kada ce cestica nestati. Nase kapi ne treba da menjaju boju tako da cemo ColorInner postaviti na belo, a treba samo kratko da se vide pa cemo postaviti vreme na 0.5 sekundi. Skoro da smo zavrsili.
Da bi PFX Manager mogao da se iscrtava moramo na scenu ubaciti PFX Renderer (Add object->Particle systems->PFX Renderer). On je zaduzen za iscrtavanja i ima nekoliko propertya, ali ce nam njihova default vrednost skoro uvek odgovarati pa necemo sad o tome. Postavimo Cadencer i Rendere property za PointLightPFXManager i sada je spreman.
Sve sto nam ostaje je da povezemo cestice sa nasim oblakom. To cemo uraditi tako sto cemo dodati PFX Source efekat nasoj kocki i podesiti proertye. Manager cemo postaviti na PointLightPFXManager koji smo postavili na formu, InitialVelocity na 0, -5, 0 kako bi kapljice odmah imale neku brzinu kad se kreiraju (odmah padaju), ParticleInterval na 0.001 i imacemo pljusak jer ce cestice da se pojavljuju bas brzo, PositionDispersionRange na 3, 0, 1 i PositionDispersion na 0.8 tako da ce cestice da se rasporedjuju po povrsini kocke (random u x i z pravcima), ali nece ici ispod i iznda jer smo Y postavili na 0. To je skoro to. Za kraj podesimo da se forma svaki put iscrtava kako bi smo videli nas efekat
Code:
procedure TForm1.GLCadencer1Progress(Sender: TObject; const deltaTime,
  newTime: Double);
begin
  GLSceneViewer1.Invalidate;
end;

Pokrenimo program i uzivajmo u kisi



Eksperimentisite malo s osobinama PointLightPFXManagera i PFX Source efekta... malim modifikacijama moze se napraviti kao da pada sneg, da duva vetar gok kisa pada... da pada krv iz kocke Experimentisite
Prikačeni fajlovi
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Kako koristiti GLScene12.06.2005. u 11:31 - pre 229 meseci
Sledeci efekat je dim (opet ). Koristicemo isti princip kao i kod stvaranja kise samo sa drugim parametrima i ovog puta cemo koristiti PolygonPFXManager, ali, kao sto rekoh, mogli smo koristiti i neki grugi (mozda Perlin... imao bi bas lepe texture za dim). Znaci scena, PolygonPFXManager, na sceni kamera, svetlo, kocka i PFX Renderer. Kocku cemo staviti na -2, -1, -4 i to ce nam biti odzak. Cestice dima cemo ovako da podesimo... Acceleration 0.3, 0, 0 tako da ce dim da ide na desno, ColorInner na belo, ParticleSize na 0.4 i u LifeColor cemo ostaviti samo jedan unos. Boju cemo istaviti na Transparent pa ce dim vremenom da postaje sve providinji, a vreme cemo postaviti na 5 sekundi. Sad jos da podesimo PFX Source efekat za kocku. InitialPosition postavimo na 0.4 tako da se cestice kreiraju malo ispod gornje ivice kocke, InitialVelocity na 0, 0.5, 0 i VelocitiDispersion na 0.1 tako da dim krece na gore, ali da cestice imaju malo razlicite brzine, ParticleInterval na 0,03 da imamo lep gust dim, PositionDispersionRange na 1, 0, 1 i PositionDispersion na 0.2 da dim ne izlazi samo iz jedne tacke i to je to. Napisimo samo jos i OnProgress event
Code:
procedure TForm1.GLCadencer1Progress(Sender: TObject; const deltaTime,
  newTime: Double);
begin
  GLSceneViewer1.Invalidate;
end;

Pokrenimo program i dim ce da izlazi iz odzaka



Probajte da menjate verdnosti managera i efekta da vidite kako uticu na izgled dima.
Prikačeni fajlovi
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Kako koristiti GLScene12.06.2005. u 13:41 - pre 229 meseci
Poslednji od tutoriala koji je "nestao" zbog havarije baze je ponovo tu
Ucitavanje 3d objekta i animacija iz fajla kao i menjanje texture objektu u runtime.
Radicemo sa GLActor objektom. On je dizajniran tako da se fajlovi lako ucitavaju i animacije lako biraju i pustaju.
Postavicemo na formu scenu i cadencer, a na sceni ce biti kamera, svetlo i jedan GLActor objekat (Add object->Mash objects->Actor). Postavicemo ga na 0, 0, -4, posto je objekat prilicno velik moracemo da ga malo smanjimo pa cemo Scale postaviti na 0.05, 0.05, 0.05 i jos cemo PitchAngle postaviti na 90 jer je orientacija Quake 2 modela (koristicemo Quake 2 model... samo da znate) malo drugacija od GLScene. Model mozete skinuti ovde. Sada cete videti kako je lako ucitati objekat i njegovu texturu. Napisimo OnCreate event za formu
Code:
procedure TForm1.FormCreate(Sender: TObject);
begin
  GLActor1.LoadFromFile('waste.md2');
  GLActor1.Material.Texture.Image.LoadFromFile('waste.jpg');
  GLActor1.Material.Texture.Disabled := False;
end;

I to je to



Ovo cak i ucitava animacije iz Quake 2 modela. Jedino sto moramo da uradimo je da dodamo u unit deo GLFileMD2 i JPEG unite da bi fajlovi mogli da se ucitaju. Prilicno lako, zar ne?
Sada cemo napraviti da se textura objekta menja kliknom na formu. Zajedno sa modelom se nalaze i dve texture Waste.jpg i WasteCell.jpg. WasteCell.jpg je malo modivikovana verzija obicnog skina za nas model i klikom na formu ce se ove texture menjati. Dodacemo jednu globalnu promenljivu
Code:
var
  TextureName: String;

Malo modifikovati OnCreate event forme
Code:
procedure TForm1.FormCreate(Sender: TObject);
begin
  GLActor1.LoadFromFile('waste.md2');
  GLActor1.Material.Texture.Image.LoadFromFile('waste.jpg');
  GLActor1.Material.Texture.Disabled := False;
  TextureName := 'waste.jpg';
end;

i dodati OnClick event za SceneViewer
Code:
procedure TForm1.GLSceneViewer1Click(Sender: TObject);
begin
  if TextureName = 'waste.jpg' then
    TextureName := 'wastecell.jpg'
  else
    TextureName := 'waste.jpg';
  GLActor1.Material.Texture.Image.LoadFromFile(TextureName);
end;

Opet nista komplikovano... jednostavno ucitavamo novu texturu umesto stare
I za kraj... konacno... animacija Dodacemo jedan ComboBox pomocu kojeg cemo birati animacije i postavicemo Style na DropDownList. Prva stvar je da napunimo ComboBox nazivima animacija. Za to ce nam posluziti Funkcija GLActor.Animations.SetToStrings. Ona ubacuje u bilo koju promenljivu tipa TStrings (ili neke klase koja je nasledjuje) nazive animacija. Sledece sto treba da uradimo je da prilikom promene izabrane stavke u ComboBoxu pustimo animaciju. Animacija se pusta tako sto se izabere ime animacije ili njen redni broj funkcijom GLActor.SwitchToAnimation i postavi zeljeni nacin pustanja animacije GLActor.AnimationMode koji moze biti aamNone (nema animacije), aamPlayOnce (animacija se samo jednom pusti), aamLoop (animacija se stalno vrti), aamBounceForward (ide od pocetka do kraja, pa od nazad do pocetka), aamBounceBackward (od nazad ka pocetku, pa od pocetka prema kraju) ,aamLoopBackward (vrti se unazad), aamExternal (animacija stoji i pozivanjem NextFrame ili PrevFrame menjamo trenutni frejm).
Modifikovacemo malo OnCreate event forme i dodati OnChange evet ComboBoxu
Code:
procedure TForm1.FormCreate(Sender: TObject);
begin
  GLActor1.LoadFromFile('waste.md2');
  GLActor1.Material.Texture.Image.LoadFromFile('waste.jpg');
  GLActor1.Material.Texture.Disabled := False;
  TextureName := 'waste.jpg';
  GLActor1.Animations.SetToStrings(ComboBox1.Items);
  ComboBox1.ItemIndex := 0;
  ComboBox1Change(ComboBox1);
end;

Code:
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  GLActor1.SwitchToAnimation(ComboBox1.Text);
  GLActor1.AnimationMode := aamLoop;
end;

I to je sve... objekat se animira i mozemo da mu menjamo texturu i to prilicno lako



Eto... konacno sam ispisao sve tutoriale koji su nestali... i sad mozemo na nove. Sledeci ce biti neverovatno laki, ali i prilicno korisni. Uradicemo GLBlur (zamucuje scenu ili samo neki objekat) i GLTrial (pravi trag iza objekta) komponente. Biti potrebno da kucamo program... sve cemo zavrsiti u Scene Editoru i ObjectInspectoru u designtime
Prikačeni fajlovi
 
Odgovor na temu

PeraKojotSuperGenije
Sasa Popovic
Beograd

Član broj: 44507
Poruke: 126
*.18.EUnet.yu.



Profil

icon Re: Kako koristiti GLScene12.06.2005. u 13:54 - pre 229 meseci
Svaka cast Srki_82! Tutorijal je odlican i lako razumljiv. Samo tako nastavi!

Prosao sam kroz vecinu lekcija, a malo sam i sam eksperimentisao i napravio sam malu animaciju...

Koristio sam nekoliko novih stvari:

1) Scene Objects->Add object->Doaded Objects->Tree. Oblik drveta mozete promeniti podesavanjem parametara drveta (depth, branch*, leaf*, seed, ...). Da bi listovi bili zeleni a stablo i grane braon boje neopodno je koristiti GLMaterialLibrary u kome cete napraviti potrebne materijale/boje i obavezno im dati imena. U polja LeafMaterialName i BranchMaterialName treba uneti zeljene materijale (OVA POLJA SU CASESENSITIVE!!!).

2) AsyncTimer (sa palete GLSceneUntils), koji se ponasa isto kao i standardni tajmer sa palete System. AsyncTimer-u mozete podesavati prioritet i to je cini mi se jedina razlika u odnosu na TTimer.

3) Scene Objects->Add object->Basic Geometry->Points. Tacku sam koristio kao izvor za grom i vatru

4) Scene Objects->Add object->Basic Geometry->Plane. Ravan je sluzila kao sivo nebo koje je izvor kise i cini mi se da je ovo malo stedljivije resenje od GLCube. Pomocu ravni sam napravio i zelenu podlogu.

Boju pozadine GLSceneViewer-a je ista kao i boja neba!

GLPoint1, koja je izvor groma se nalazi malo iznad ravni koja predstavlja nebo. Dok grom udara u drvo, dva puta mi se menjaju koordinate za Target i tako je dobijen efekat "setanja" groma.

GLPoint1/2/3, koje su izvor vatre se nalaze "negde na drvetu". Tri razlicita izvora i tri razlicite vatre sam koristio kako bih napravio "realistican" efekat sirenja vatre, postepenim paljenjem jednog po jednog izvora. Negde u centru drveta nalazi se i jedan narandzast iyvor svelosti koji je na pocetku animacije ugasen, pa se postepeno pojacava kako se vatra siri.

AsyncTimer aktivira i gasi efekte, a cini mi se da je sve moglo da se odradi jednostavnije i udobnije komponentom TimeEvents (sa tog casa sam povegao:-)).

Pitanja: Kako napraviti dim sive boje. Ja sam probao, ali ne umem.
Sendvic uvek pada na namazanu stranu!
Prikačeni fajlovi
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Kako koristiti GLScene12.06.2005. u 14:28 - pre 229 meseci
Pricao sam vam o texturama i blending modovima, zar ne?
Po defaultu BlendingMode za PFX efekte stoji na Aditive sto znaci da se boja cestice sabere sa bojom pozadine i tako se dobije nova boja... posto je siva boje jednostavno zatamnjena bela kada je postavimo dim samo posvetli pozadinu... logicno Da bi boja bila siva potrebno je BlendingMode postaviti na Transparency. Evo primera sa dimom koji koristi PerlinPFXManager... svi podaci su isti kao i kod prethodnog primera sa dimom jedino sto se koristi drugi generator i drugi BlendingMode.



BTW: Odlican ti je demo, samo tako nastavi
Prikačeni fajlovi
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Kako koristiti GLScene12.06.2005. u 15:54 - pre 229 meseci
U ovom primeru cemo raditi sa GLBlur objektom. On "zamucuje" objekta u koji je postavljen. Postoje nekoliko modova u kojima moze da radi. Vrlo je bitno samo postaviti GLSceneViewer.Buffer.BackgroundColor na crno inace ce GLBlur da zezne celu scenu (cela scena ce biti boje pozadine sa nekim mrljama... probajte pa cete videti). Postavicemo scenu i cadencer i na sceni kameru, svetlo, kocku (na 0, 0, -3 sa zutom bojom) i u kocki GLBlur (Add object->Speciao objects->GLBlur). I to je to Nista vise nije potrebno da bi blur radio. Da smo ga postavili direkno na scenu tada bi cela scena bila zamucena. Pogledajte property Presets i probajte da ga menjate i vidite kako sve objekat moze da bude zamucen.
Da scena ne bi bila bas nepomicna dodacemo Simple Inertia behaviour kocki i podesiti PitchSpeed na 20 i RollSpeed na 30. Moracemo samo da dodamo u unit deo i GLBehaviours.
Pokrenimo program i gledajmo kako se kocka zamucuje



Ovako je lako koristiti i GLTrial... videcete u sledecem primeru
Prikačeni fajlovi
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Član broj: 32202
Poruke: 4391
62.108.102.*

Sajt: https://avramovic.info


+46 Profil

icon Re: Kako koristiti GLScene12.06.2005. u 21:59 - pre 229 meseci
Imam ja sacuvanu jednu ipo html stranu od starih primera... evo linka:
http://rapidshare.de/files/2343224/GLScene_tutorials.zip.html
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Kako koristiti GLScene12.06.2005. u 23:42 - pre 229 meseci
Vec sam ponovo napisao tutoriale koji nisu bili tu... tako da... sve je ponovo tu

BTW: Sta kazete da posle GLTrial komponente predjemo malo na zvuk... tu se necemo mnogo zadrzati jer je prilicno lako. Ako neko bude hteo da napravi demo kao PeraKojotSuperGenije mocice da koristi i zvuk Onda zvuk ili nesto drugo?
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Član broj: 32202
Poruke: 4391
62.108.102.*

Sajt: https://avramovic.info


+46 Profil

icon Re: Kako koristiti GLScene12.06.2005. u 23:52 - pre 229 meseci
ja predlazem kuliranje od 15-20 dana, dok prodje prijemni
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Kako koristiti GLScene13.06.2005. u 00:27 - pre 229 meseci
@tamnicar
Izvini sto si cekao... zurio sam da vratim stare tutoriale i da dodam bar jedan nov.
Ovako... tutorial za model imas ponovo, a sto se tice pomeranja ubaci nesto ovako u Cadencer.OnProgress event
Code:
procedure GLCadencer1.OnProgress(...);
begin
  if GLActor1.Position.DirectZ < -40 then
    // Ako ide sporo postavi vecu vrednost od 5
    GLActor1.Position.Translate(0, 0, 5 * deltaTime)
  else
    GLActor1.Position.DirectZ := -40;
end;

Nadam se da je to ono sto ti treba.

@JaHvram
Nema sanse
 
Odgovor na temu

tamnicar
sremska mitrovica

Član broj: 54010
Poruke: 67
*.panline.net.



Profil

icon Re: Kako koristiti GLScene13.06.2005. u 10:31 - pre 229 meseci
samo da ispravim: :)
Code:

procedure GLCadencer1.OnProgress(...);
......
    GLActor1.Translate(0, 0, 5 * deltaTime)
 ......
end;

hvala na code-u, radi odlicno!
p.s.
nisi morao sve sam da vratish od tutoriala, mogli smo ti i mi pomoci, kad si i ti nama!
ja sve stranice dzim u cache-u za svakodnevni pregled!!!
 
Odgovor na temu

PeraKojotSuperGenije
Sasa Popovic
Beograd

Član broj: 44507
Poruke: 126
*.35.eunet.yu.



Profil

icon Re: Kako koristiti GLScene13.06.2005. u 12:05 - pre 229 meseci
@Srki_82: Zvuk!
Sendvic uvek pada na namazanu stranu!
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Kako koristiti GLScene13.06.2005. u 18:44 - pre 229 meseci
Jos jedan ultra lak za napraviti efekat GLTrail objekat ostavlja trag iza objekta koji se pomera (cesto se koristi taj efekat u borilackim igrama kada se igrac pomera neveroavtno brzo i slicno). Hajde da probamo da uradimo primercic sa ovom komponentom. Postavimo scenu i cadencer, a na sceni kameru, svetlo, DummyCube (0, 0, -4) i u njoj npr. GLIcosahedron (0, 1.5, 0). Na kraju dodajmo i GLTrial (ovaj objekat ne bi trebalo da se nalazi u drugim objektima jer trag moze da se pomeri na neku bezveznu poziciju), a TrialObject na GLIcosahedron koji smo kreirali. Ovo je sve sto je potrebno da bi TrialObject radio... ustvari... da bi videli trag objekat mora da se krece. Zato smo postavili DummyCube... dodacemo joj Simple Inertia i postaviri RollSpeed na 120. Da Simple Inertia moze da radi moramo u uses dodati GLBehaviours (to je jedino sto moramo da kuckamo u programu) i pokrenimo ga



Prilicno lako i jednostavno
Sledece na repertoaru su zvukovi (2d i 3d).
Prikačeni fajlovi
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Kako koristiti GLScene13.06.2005. u 21:02 - pre 229 meseci
Danas ce se u nasem i vasem GLScene tutorialu po prvi put pustati TON FILMOVI
Konacno i malo zvuka... pocecemo sa direknim pristupom BASS Sound engine-u. Necemo koristiti nikakve komponente jedino Bass unit iz GLScene.
Evo nekih informacija o BASS Sound Engine

Da pocnemo... postavite dva dugmeta na formu. Prvo ce nam sluziti za pustanje, a drugo za zaustavljanje muzike. Dodajte jedan CheckBox... kada bude "ukljucen" fajl ce se ponavljati, a ako ne bude odsvirace jednom i kraj. Za kraj dodacemo jos i OpenDialog da bi smo lakse nalazili fajlove za pustanje, a sad kod.
Da bi BASS radio moramo dodati u uses deo Bass unit
Code:
uses
  Bass;

Podesimo OnCreate event za formu
Code:
procedure TForm1.FormCreate(Sender: TObject);
begin
  BASS_Load(BASS_DLL);
  BASS_Init(1, 44100, 0, Application.Handle, nil);
  BASS_Start;
end;

Kao prvo moramo ucitati Bass.dll i to radi BASS_Load funkcija. BASS_DLL je samo konstanta (string) definisana u Bass.pas unitu i ima vrednost 'bass.dll'. Ako budete menjali ime dlla ne onda cete umesto BASS_DLL upisati to novo ime.
Sledece je incijalizacija engine-a. BASS_Init uzima kao prvi parametar redni broj uredjaja na kojem ce se pustati zvuk, zatim frekvencija zvuka (44100 se koristi za snimanje CD-ova), zatim Handle prozora koji ce se koristiti za poruke (Application.Handle se moze uvek koristiti), i na kraju mozemo uneti pointer na GUID kartice koju zelimo da koristimo... ako postavimo nil koristice se default kartica (uglavnom svi imaju samo jednu karticu pa uvek mozemo stavljati nil).
Na praju pokrecemo engine (pritiskamo play) pozivom na BASS_Start.

Sad cemo dodati OnDestroy event za formu
Code:
procedure TForm1.FormDestroy(Sender: TObject);
begin
  BASS_Stop;
  BASS_Free;
  BASS_Unload;
end;

Ovde je sve jasno... zaustavljamo engine, oslobadjamo memoriju koju jeengine zauzeo i na kraj ga oslobadjamo dll koji smo na pocetku ucitali.

Hajde da pustimo neku muzikicu Da bi smo mogli da pustimo muziku moramo imati jednu promenljivu koja ce drzati trenutno aktivni fajl pa cemo dodati globalnu promenljivu
Code:
var
  S: HStream;

Podesimo sada OnClick event drugog dugmeta (ono dugme koje ce zaustavljati muziku)
Code:
procedure TForm1.Button2Click(Sender: TObject);
begin
  if S <> 0 then BASS_StreamFree(S);
  CheckBox1.Enabled := True;
end;

Kada ni jedan fajl nije ucitan S ima vrednost 0, a ako ima neku drugu vrednost oslobadjamo taj fajl i on se zaustavlja.
Sad ide ton OnClick event prvog dugmeta izgleda ovako
Code:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
    Button2.Click;
    S := BASS_StreamCreateFile(False, PChar(OpenDialog1.FileName), 0, 0, BASS_STREAM_AUTOFREE);
    if CheckBox1.Checked then
      BASS_StreamPlay(S, False, BASS_SAMPLE_LOOP)
    else
      BASS_StreamPlay(S, False, 0);
  end;
  CheckBox1.Enabled := False;
end;

Ako izaberemo neki fajl u OpenDialogu prvo zaustavljamo muziku klikom na Button2 i zatim otvaramo fajl funkcijom BASS_StreamCreateFile. Prvi parametar oznacava da li je fajl ucitan u memoriju (npr. imate neki buffer u koji ste prethodno ucitali fajl i pustate muziku iz njega). Drugi parametar je naziv fajla ako pustamo sa diska, a ako pustamo iz memorije onda je to pointer na pocetak buffera. Sledeca dva parametra oznacavaju pocetak i duzinu u fajlu koji ce se svirati u semplovima (ako je fajl snimljen u 44100Hz onda je 1 sekunda 44100 semplova). Ako su oba parametra 0 svira se zeo fajl. I na kraju je flag koji oznacava kako se fajl svira. BASS_STREAM_AUTOFREE znaci da ce fajl biti automatski oslobodjen cim se odsvira do kraja. To je to vezano za ucitavanje. Sledece je na redu pustanje... funkcija BASS_StreamPlay pusta fajl koji mu prosledimo kao prvi parametar. Drugi parametar oznacava da li da se svi podaci snime u fajl pre pustanja ako je nesto bilo snimljeno u njemu pre pozivanja BASS_StreamPlay funkcije. I na kraju imamo flag koji moze da natera fajl da se pusta iz pocetka, da svira kao da je mono zvuk, kao da je 8bit, 16bit, 32bit, itd... Nama je sad interesantan BASS_SAMPLE_LOOP koji govori engine-u da stalno ponavlja zvuk.

I to je to... pokrenite program i probajte da nesto pustite. BASS zahteva da imate instaliran bar DirectX 3 pa... ako nemate nece raditi
Prikačeni fajlovi
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Kako koristiti GLScene14.06.2005. u 18:31 - pre 229 meseci
Sada cemo koristiti komponentu GLSMBASS koja ce umesto nas odraditi svu inicijalizaciju kao i oslobadjanje memorije na kraju. Takodje cemo pokazati kako se pustaju 3D zvukovi.
Odmah da napomenem... muzika koju smo pustali u proslom primeru moze da bude mono, stereo, 5.1... ne bitno je, ali kada se zvik pusta u 3D prostoru mora biti mnono. Ako zvuk nije mono program ce prijaviti gresku. Malo je nemoguce pustiti stereo zvuk iz jedne tacke u protoru, zar ne? Zvuk ce se automatski prebacivati sa levog na desni ili na neki drugi ako imate vise zvucnika u zavisnosti od mesta gde je zvuk nastao i mesta u prostoru gde se nalazi objekat koji prima zvukove.
Pocecemo postavljanjem scene, cadencera i jos dve komponente koje do sad nismo koristili... GLSoundLibrary i GLSMBass. Bitno je da prvo postavimo GLSMBass jer on mora da se kreira pre ostalih komponenti koje koriste zvuk. GLSoundLibrary je otprilike kao i GLMaterialLibrary samo sto ne cuva texture i boje nego zvukove. GLSMBass je sound manager i on je zaduzen da pusta zvukove. Sound Manager moze pustati samo zvukove koji su u SoundManageru. Naravno, koriscenjem funkcija za ucitavanje i pustanje muzike koje smo koristili u proslom primeru moguce je pustati i zvukove koji nisu u SoundLibrary. Jos nesto da napomenem... sve fajlove koje ubacimo u SoundLibrary bice snimljeni zajedno sa exe fajlom.
Hajde prvo da dodamo neki fajl u SoundLibrary. Kliknimo na '...' u Samples propertyu. Otvorice nam se prozorce u kojem cemo videti sve fajlove koje smo ucitali. Kliknimo na Add new. Svaki fajl tj. sample ima 2 propertya... Data (podaci koji su potrebni za sviranje) i Name (naziv sempla). Kliknimo na '...' u Data property i izaberimo fajl koji hocemo da ucitamo. SoundLibrary podrzava samo mp3 i wav fajlove pa smo ograniceni na njih. Izabracemo, recimo, C:\Windows\Media\RingOut.wav... taj fajl bi svi trebalo da imaju (zapamtite, mora da bude mono). To nam je dovoljno za nas primer.
Sledece sto cemo da uradimo je da graficki prikaz polozaja zvuka i mesta odakle slusamo. Dodajmo kameru, svetlo, ArrowLine, DummyCube i u njoj Sphere na scenu. Za ArrowLine postavimo poziciju na 0, 0, -10, Direction na 0, 1, 0 i Up na 0, 0, 1. DummyCube postavimo na 0, 0, -10, a Sphere na 0, 5, 0. Da bi strelica bila objekat koji "slusa" postavimo GLSMBass.Listener na ArrowLine koji smo kreiarli. Kad smo vec tu postavimo i GLSMBass.Cadencer na cadencer objekat koji je na formi i Active na True da bi uopste nesto culi
Jos malo i zavrsili smo Sada treba da pustimo zvuk iz lopte. Dodacemo Sound Emitter iz Add behaviour menija. Kliknimo na Sound Emitter u Scene Editoru da bi smo editovali propertye. Postavimo Source.SoundLibrari na GLSoundLibrary1 objekta koji je na formi, a Source.SoundName na 'ringout.wav'. NbLoops oznacava koliko ce se puta zvuk ponavljati. Ova funkcionalnost jos nije zavrsena pa za sve brojeve preko 1 zvuk se ponavlja dok ga mi ne zaustavimo. Postavicemo NbLoops na 2 da nam zvukic stalno svira. Poslednje sto cemo uraditi ovde je postavljanje Playing propertya na True
Ovde postoje jos nekoliko korisnih propertya koje nismo koristili. Volume je vrednost od 0 do 1 koja ozvacava glasnocu. Min i Max Distance odredjuju koliko daleko od izvora se cuje zvuk... experimentisite malo s osobinama da ih bolje razumete.
Da zvuk ne bi dolazio samo iz jednog smera postavicemo Simple Inertia za DummyCube objekat i staviti RollSpeed na 20 (moramo dodati u uses GLBehaviours, ne zaboravite). I pokrenimo sada primer... kao sto vidite kako se lopta okrece oko strelice tako i zvuk kruzi sa desnog na levi zvucnik i obrnuto
Ne znam za vas, ali meni je bilo zaista drago kad sam ukapirao kako se lako koriste 3D zvukovi
GLSMFMOD se koristi POTPUNO ISTO kao i GLSMBASS. Ako neko zeli moze probati da uradi isti ovaj primer, ali sa GLSMFMOD objektom. Nemojte samo zaboraviti da Sound Manager objekat mora prvi da se stavi na formu inace zvuk nece raditi.
Prikačeni fajlovi
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Kako koristiti GLScene18.06.2005. u 18:13 - pre 229 meseci
Pa... sad znamo dosta stvari koje nam mogu olaksati pravljenje 3d aplikacija... ali jos ne znamo kako da detektujemo sudar dva objekta i sad cemo to da naucimo. Kao i sve ostalo u GLScene i ovaj problem je jednostavno resiti
Koristicemo CollisionManager komponentu sa GLScene Utils palete i ona ce proveravati umesto nas da li se nesto sudarilo na sceni.
Pre nego sto pocnemo vrlo je bitno znato da CollisionManager nije savrsen... ovo je tabela koja nam govori sta radi precizno, a sta ne



Da pocnemo... postavimo sve sto nam treba za scenu (ukljucujuci i cadencer) i dodajmo CollisionManager. Dodajmo na scenu kameru, svetlo, DummyCube ( -3, 0, -10 ) i u njoj GLSphere ( -5, 0, 0 ), i jos jednu DummyCube ( 4, 0, -10 ) i u njoj GLCube ( 3, 0, 0 ). DummyCube ce nam sluziti da rotiramo nase objekte kako bi se oni s vremena na vreme dodirnuli. Dodajmo za DummyCube sa loptom Simple Intertia behaviour i postavimo RollSpeed na 50, i dodajmo za DummyCube koja sadrzi kocku takodje Simple Inertia behaviour i postavimo RollSpeed na 120. Posto smo koristili Simple Inertia moramo u uses dodati GLBehaviours unit. Pokrenimo program i videcemo kako se lopta i kocka okrecu i dodiruju se u odredjenim trenucima. Sada cemo dodati deo koji ce detektovati sudar. Dodajmo za loptu i kocku Collision behaviour. Ova osobina povezuje objekte sa CollisionManagerom i omogucava mu da odradjuje kad su se dodirnuli. Podesimo prvo Collision behaviour za loptu. Podesimo prvo Manager property na CollisionManager1 koji smo postavili na formu. Ovaj property oderdjuje koji ce manager biti zaduzen za ovaj objekat. Zatim BoundigMode postavimo na Sphere. Ovo je nacin na osnovu kojeg ce se odredjivati da li se objekat sudario. Kada je ovaj property on se tretira kao kocka u koju moze da stane ceo objekta, ako je Ellipsoid onda je to izduzena lopta, ako je Faces onda se koristi bas oblik objekta (ovo je najsporiji nacin), ako je Point koristi se samo tacka u sredini objekta (ubedljivo najbrzi i najneprecizniji nacin), i ako je sphere koristi se lopta u koji staje ceo objekat. Posto koristimo loptu logicno je da cemo izabrati Sphere. GroupIndex je property koji odredjuje sa kojim objektima ce biti proveravano da li su sudareni. Samo objekti sa istim GroupIndexom ce biti provereni da li se dodiruju. GroupIndex necemo dirati. Za kocku cemo postaviti Manager, a BoundingMode postaviti na Cube.
To je dovoljno informacija za CollisionManager da oderdi da li se nasi objekti dodiruju. Dodajmo sada globalnu promenljivu Sudar: Boolean koja ce biti True ako su se objekti sudarili i postavimo CollisionManager.OnCollision event na
Code:
procedure TForm1.CollisionManager1Collision(Sender: TObject; object1,
  object2: TGLBaseSceneObject);
begin
  Sudar := True;
end;

Ovaj event nam prosledjuje koji su se objekti sudarili. Ovo nam je vrlo vazno ako imamo vise objekata, ali u nasem slucaju imamo samo 2 pa znamo da su se oni sudarili i postavljamo Sudar na True.
Moramo i vizuelno prikazati da li su se objekti sudarili ili ne i to cemo uraditi bojama. Dodajmo jedan GLMaterialLibrary i napravimo material No koji ce biti plave boje i materijal Yes koji ce biti crvene. Postavimo za pocetak i za loptu i za kocku material No. Sada cemo u GLCadencer.OnProgress da detektujemo sudar i da promenimo boju objekata ako je potrebno
Code:
procedure TForm1.GLCadencer1Progress(Sender: TObject; const deltaTime,
  newTime: Double);
var
  oldSudar: Boolean;
begin
  oldSudar := Sudar;
  Sudar := False;
  CollisionManager1.CheckCollisions;
  if Sudar <> oldSudar then
    if Sudar then
    begin
      GLSphere1.Material.LibMaterialName := 'Yes';
      GLCube1.Material.LibMaterialName := 'Yes';
    end
    else
    begin
      GLSphere1.Material.LibMaterialName := 'No';
      GLCube1.Material.LibMaterialName := 'No';
    end;
end;

oldSudar nam sluzi samo da ne bismo postavljali nov material pri svakom iscrtavanju jer do znatno smanjuje FPS. Prvo postavljamo Sudar na False (predpostavljamo da se objekti nisu sudarili) i onda pocivamo CollisionManager.CheckCollisions da proveri da li ima nekih sudara. Ako ima poziva se OnCollision event koji u nasem slucaju postavlja Sudar na True. U zavisnosti od vrednosti Sudar promenljive postavljamo boje nasih objekata. To je sve



Sledeci primer ce pokazati kako je jos moguce izvrsiti proveru sudaranja (napravicemo lopticu koja se odbija od zidova)
Prikačeni fajlovi
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Kako koristiti GLScene20.06.2005. u 22:53 - pre 229 meseci
Napravio sam jedan kratak demo u kojem sam koristio ovo sto smo do sad odradili... ucitavanje 3d objekata, postavljanje textura, pomeranje i rotiranje objekata, efekte sa cesticama, zvukovi (Sound Emitter + pozadinska muzika)... mozda jos nesto, ali mislim da je to to... demo traje oko 60 sekundi, ali je exe (nema koda ovog puta... probajte sami da napravite nesto slicno ) "malo" tezi zbog modela, textura i zvukova... ima oko 3MB, a mene veceras nesto mnogo zeza wierless pa ne znam da li cu uspeti da posaljem fajl, ali ovih dana cu ga sigurno postaviti.
Nadam se da ce vam se svideti bar malo... izgubih skoro pola sata rada na ovome
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Kako koristiti GLScene21.06.2005. u 16:36 - pre 229 meseci
I, evo demo o kojem sam pricao. GeoCities nesto ne dozvoljava da se ovako velik fajl skine van njega morate otici ovde da bi ste skinuli program.

Imate u zipu sve sto je potrebno da pokrenete program. Model mozete slobodno koristiti u nekomercijalnim programima... pa... mozda neko napravi neki mnogo bolji demo od mene.
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: Kako koristiti GLScene21.06.2005. u 20:36 - pre 229 meseci
Ako neko nema dovoljno dobru karticu da pokrene demo evo par slicica







I... kako vam se cini demo?
 
Odgovor na temu

PeraKojotSuperGenije
Sasa Popovic
Beograd

Član broj: 44507
Poruke: 126
*.97.EUnet.yu.



Profil

icon Re: Kako koristiti GLScene21.06.2005. u 23:49 - pre 229 meseci
Demo je odlican!
Kako si napravio onu "maglu koja se vidi u daljini"?
Sendvic uvek pada na namazanu stranu!
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Kako koristiti GLScene
(TOP topic, by morlic)
Strane: < .. 1 2 3 4

[ Pregleda: 39586 | Odgovora: 77 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.