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: 39423 | 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 GLScene31.05.2005. u 18:44 - pre 229 meseci
I za kraj ove igre sacuvali smo "nestajanje" polja. Nestajanje cemo izvesti tako sto cemo alpha vrednos materiala polako smanjivati dok materijal ne postane potpuno providan. Da bi alpha vrednos uopste menjala providnost materiala moramo Blend mode postaviti na Transparency i zato postavimo to za sve materiale koje smo definisali osim za material Pozadina. Problem bi bio ako bismo menjali material Pozadina sva polja bi se menjala jer smo pri kreiranju kocku koja crta okvir polja povezali sa Pozadina materijalom. Zato cemo kreirati jos jedan material "FadeOut" i napraviti ga isto kao i Pozadina osim sto ce FadeOut imati Blend mode = Transparency. Dodacemo jos dve globalne promenljive u kojima cemo cuvati materijale koje menjamo
Code:
var
  MatBoja, MatFade: TGLMaterial;

MatFade mozemo postaviti na "FadeOut" material prilikom kreiranja forme
Code:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize;
  // Postavlja polja na tablu
  NovaIgra;
  // Uzima material za "nestajanje" polja
  MatFade := GLMaterialLibrary1.LibMaterialByName('FadeOut').Material;
end;

Materijal boje koja treba da nestane mozemo uzeti u funkciji Proveri
Code:
procedure TForm1.Proveri;
begin
  // Ako su boje iste vreme je za "nestajanje" :)
  Nestajanje :=
  TGLCube(Izabrana1.Children[1]).Material.LibMaterialName =
  TGLCube(Izabrana2.Children[1]).Material.LibMaterialName;
  // Ako nisu ista onda ih vracamo
  Vracanje := not Nestajanje;
  if Nestajanje then
  begin
    // Postavljamo material za nestajanje
    TGLCube(Izabrana1.Children[0]).Material.LibMaterialName := 'FadeOut';
    TGLCube(Izabrana2.Children[0]).Material.LibMaterialName := 'FadeOut';
    // Uzimamo materijal za boju kako bismo mogli
    // polako da ga napraimo providnim
    MatBoja := GLMaterialLibrary1.LibMaterialByName(
      TGLCube(Izabrana1.Children[1]).Material.LibMaterialName).Material;
  end;
end;

Kao sto vidite u proceduri proveri takodje postavljamo material FadeOut za okvire polja koje treba da nestanu. Tako cemo moci samo njih da menjamo.
Sada cemo jos samo da izmenimo deo OnProgress eventa za Nestajanje
Code:
if Nestajanje then
begin
  // Smanjujemo alpha vrednost tako da pozadina postaje sve
  // providnija
  MatFade.FrontProperties.Diffuse.Alpha :=
    MatFade.FrontProperties.Diffuse.Alpha - 1 * deltaTime;
  // Smanjujemo alpha vrednost tako da boja postaje sve
  // providnija
  MatBoja.FrontProperties.Diffuse.Alpha :=
    MatBoja.FrontProperties.Diffuse.Alpha - 1 * deltaTime;
  // Malo da vrtimo polja dok nestaju ;)
  Izabrana1.Turn(1000 * deltaTime);
  Izabrana2.Turn(1000 * deltaTime);
  // Ako je sve nevidnjivo brisemo polja
  if MatFade.FrontProperties.Diffuse.Alpha <= 0 then
  begin
    Izabrana1.Free;
    Izabrana2.Free;
    Izabrana1 := nil;
    Izabrana2 := nil;
    // Vracamo ponovo alpha na 1
    MatFade.FrontProperties.Diffuse.Alpha := 1;
    MatBoja.FrontProperties.Diffuse.Alpha := 1;
    Nestajanje := False;
    // Nema vise polja... nova igra!?
    if Tabla.Count = 0 then
      if Application.MessageBox('Nova igra?', 'Info', MB_YESNO) = ID_YES then
        NovaIgra
      else
        Application.Terminate;
  end;
end;

Znaci sve sto radimo je polako zmanjivanje alpha vrednosti boje materijala i nase polje ce polako da nestaje. Dodao sam i malo rotiranja kako bi sve bilo zanimljivije
Kada objekat skroz nestane (alpha <= 0) brisemo ga i vracamo alpha vrednos materijala za nestajanje ponovo na 1 kako bi bio spreman za sledece nestajanje.
I to je sve za ovu igru.
Mozete dodati da se meri vreme za koje je igra predjena, broj okretanja, highscore tabelu, izbor slika za polja (polja mogu da imaju texture)... slobodno experimentisite
Sledece sto nas ceka su "ponasanja" objekata... teracemo objekat da se krece po nekoj putanji, vrtecemo tocak na osovini... videcu sta ce mi sve pasti na pamet
Prikačeni fajlovi
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Član broj: 32202
Poruke: 4391
*.yu1.net.

Sajt: https://avramovic.info


+46 Profil

icon Re: Kako koristiti GLScene01.06.2005. u 14:05 - pre 229 meseci
extra!
sad mozes poceti sa objasnjavanjem svega onoga sto sam ti rekao na ICQ, a mozes i ovo da obradis - interakcija objekata sa objektima u smislu provere kolizije (tj. da li se objekti dodiruju)... kao zidovi u onom tvom lavirintu!
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 GLScene01.06.2005. u 17:43 - pre 229 meseci
Posle zanimljive igre vracamo se dosadnim sitnicama Svaki objekta moze da ima asocirane efekte i osobine koje opisuju kako ce se ponasati na sceni. I efekti i osobine zahtevaju GLCadencer jer je on zaduzen za update. Sada cemo se pozabaviti osobinom Simple Inertia. Ova osobina nam dozvoljava da zadamo ugaonu brzinu (po x, y ili z osi objekta) ili brzinu kretanja u nekom pravcu i otpor koji ce na kraju zaustaviti kretanje. Potrebno je samo da podesimo te podatke i nas objekat ce poceti da se krece ili rotira (ili i jedno i drugo) i na kraju ce se zaustaviti. U ovom primeru cemo postaviti 2 cilindra (jedan ce biti osovina, a drugi tocak) i pritiskom na gore cemo dati gas (tocak ce se vrteti u napred), na dole cemo ici u nazad i na space cemo pritisnuti kocnicu. Pocnimo postavljanjem GLScene, GLSceneViewera i GLCadencera. Dodajmo kameru i svetlo, a zatim 2 cilindra. Prvi postavimo na 0, 0, -4. Postavimo TopRadius i BottomRadius na 0.1 da bi malo stanjili osovinu i na kraju postavimo RollAngle na 90 kako bismo je polozili. Drugi cilindar postavimo na 2, 0, -4. Postavimo RollAngle na 90, BottomRadius i TopRadius na 1, Height na 0.1 i Slices na 7. Tako cemo dobiti tocak sa desne strane. Postavili smo Slices na mali broj da bi lakse uocili kako se tocak okrece.



Sad cemo dodati osobinu nasem objektu. Kliknimo desnim na drugi cilindar (onaj koji nam predstavlja tocak) i izaberimo Add behaviour->Simple Intertia. Da bismo videli koje sve osobine ima nas objekat moramo kliknuti Show Behaviours/Effects dugme na vrhu Scene Editora.



Sada mozemo da kliknemo na osobinu koju smo dodali i da vidimo sta sve mozemo da podesimo.
DampingEnable - da li da otpor zaustavlja kretanje (ako pravimo planetu koja se neprestano okrece mozemo ovo iskljuciti)
Mass - masa objekta od koje zavisi kojom brzinom ce se zaustaviti
Name - ime osobine (kasnije je mozemo pronaci na osnovu imena ako je potrebno)
Pitch, Roll i Turn speed - brzine okretanja objekta oko osa
Rotation Damping - otpor prilikom okretanja
Translation Speed - brzina kretanja po x, y i z osi
Translation Damping - otpor prilikom kretanja
Otpor moze biti konstantan, linearan i kvadratni. Kada je konstantan onda se brzina dok je veca ili manja od nule priblizava nuli konstantnom brzinom u zavisnosti od mase.
Ako je otpor linearan sto je brzina veca veci je i otpor. Odnos izmedju brzine i otpora je linearan.
Ako je otpor kvadratni sto je brzina veca veci je i otpor, ali je ovog puta odnos izmedju brzine i otpora je kvadratni (otpor je vec za vece brzine nego kad je otpor linearan).
Za sad necemo menjati ovde nista jer cemo vrednosti postavljatiu runtime u zavisnosti od pritisnutih tastera.
Trebace nam Keyboard unit pa ga ubacite u uses listu. Kada se koriste osobine moramo dodati i GLBehaviours unit inace nas program nece raditi.
Postavimo sad OnProgress event
Code:
procedure TForm1.GLCadencer1Progress(Sender: TObject; const deltaTime,
  newTime: Double);
var
  I: TGLBInertia;
begin
  I := GetOrCreateInertia(GLCylinder2);

  if IsKeyDown(VK_UP) and (I.TurnSpeed < 1000) then
  begin
    I.TurnSpeed := I.TurnSpeed + 300 * deltaTime;
  end;

  if IsKeyDown(VK_DOWN) and (I.TurnSpeed > -500) then
  begin
    I.TurnSpeed := I.TurnSpeed - 100 * deltaTime;
  end;

  if IsKeyDown(' ') then
    I.RotationDamping.Constant := 1000
  else
    I.RotationDamping.Constant := 50;
end;

Funkcija GetOrCreateInertia proverava osobine objekta i kada naidje na Simple Inertia vraca nam je ili ako ta osobina ne postoji kreira je. Kao sto vidite nije bilo potrebno da kreiramo Simple Inertia u Scene Editoru jer bi nam GLScene kreirao tu osobinu kad bi je zatrazili, ali nije na odmet da znamo kako se osobine dodaju i u designtime
Promenljiva I je tipa TGLBInertia koja sadrzi podatke o Simple Inertia osobini. Ostatak koda je prilicno jasan.
Kada smo pritisnuli gore i brzina je manja od 1000 povecavamo brzinu okretanja. Slicno vazi i kada pritisnemo dole.
Kada pritisnemo space povecavamo otpor (pritiskanje kocnice), a ako space nije pritisnut otpor stavljamo na malu vrednost kako bi se tocak zaustavio posle nekog vremena ako ne "dajemo gas"
To je to... probajte da experimentisete malo... probajte da radite i sa Translation Speed...
Prikačeni fajlovi
 
Odgovor na temu

Jovan Prokopović
Jovan Prokopović
Niš

Član broj: 43689
Poruke: 31
*.ptt.yu.



Profil

icon Re: Kako koristiti GLScene01.06.2005. u 17:57 - pre 229 meseci
Do sada smo koristili gotove objekte (Cube, Sphere ...) i ucitavali smo objekte napravljene u nekom 3D programu, ali nakad moze da nam zatreba da kreiramo objekt u toku izvrsavanja aplikacije (u zavisnosti od proracuna, akcija korisnika ...).

Zato u GLScene postoji nekoliko klasa koje nam to omogucavaju.

Sada cemo da napravimo mali program u kome kreiramo objekte koji nastaju revolucijom (rotacijom linije) oko jedne ose.

Na formu dodajte GLScene, GLSceneViewer, Camera, LightSource,
kameru postavite na (0,0,10) i jedan RevolutionSolid (Screen Objects>Add Object>Advanced geometry>RevolutionSolid).

Dodacemo jedan taster i jos dva editbox-a,

U OnClick tastera dodajemo kod cij je zadatak da dota nod (tacku) linije koju rotiramo.

Code:

procedure TForm1.Button1Click(Sender: TObject);
begin
  GLRevolutionSolid1.AddNode(StrToFloat(Edit1.Text), StrToFloat(Edit2.Text),0);
end;


Kao Sto vidite vrlo jednostavno, Edit1 je X kordinata, Edit2 je Y kordinata, linija se rotira oko Y ose.

Sad pokrenite program i dodajte nekoliko nodova (naprimer (0,3), (2,2), (1,1), (2,0) ...), trebalo bi da vidite neki objekt.


Dodacemo i kretanje kamere oko objekta, postavicemo GLCamera.TargetObject property na GLRevolutionSolid1, devinisemo dve globalne promenljive mX i mY i dodamo ovaj kod.

Code:

procedure TForm1.GLSceneViewer1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  mX:=X; mY:=Y;
end;

procedure TForm1.GLSceneViewer1MouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
begin
  If ssLeft in Shift then
  GLCamera1.MoveAroundTarget(mY-Y, mX-X);
  mX:=X; mY:=Y;
end;


Sad kad pokrenemo program dodamo nekoliko nodova imamo objekt oko kog moze da kruzi kamera (znaci ne rotiramo sam objekt kao u jedno od ranijih primera).
Ali objek i nije nesto narocito lep sve linije su prave (nije zaobljen), zato cemo dodati je jedan CheckBox i ovaj kod


Code:

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  If CheckBox1.Checked then GLRevolutionSolid1.SplineMode:=lsmBezierSpline
  else GLRevolutionSolid1.SplineMode:=lsmLines;
end;


Sad imamo lepo zaobljen objek kad cekiramo checkbox.

Dodacemo jos dva ScrollBara, Position prvog ScrollBara postavite na 10, a drugog na 16, i jos malo koda


Code:

procedure TForm1.ScrollBar1Change(Sender: TObject);
begin
  GLRevolutionSolid1.Division:=ScrollBar1.Position;
end;

procedure TForm1.ScrollBar2Change(Sender: TObject);
begin
  GLRevolutionSolid1.Slices:=ScrollBar2.Position;
end;


Division predstavlja broj segmenata linije izmedju dva noda (prilikom zaobljavanja), a Slices broj koraka prilikom rotiranja linije.

To je uglavnom to, GLRevolutionSolid ima jos nekoliko osobina ali to ostavljam vama da isprobate.
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 GLScene01.06.2005. u 18:02 - pre 229 meseci
Odlican tut Jovane Mozda bi mogao da ubacic i neku slikicu pa da ljudi vide da li su dobro odradili posao?

Samo nastavi s dobrim tutorialima
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Član broj: 32202
Poruke: 4391
*.yu1.net.

Sajt: https://avramovic.info


+46 Profil

icon Re: Kako koristiti GLScene02.06.2005. u 13:10 - pre 229 meseci
Prodjoh i ove lekcije, i sve je ok. Jedino je srki pogresno nazvao funkciju:

Code:

function IzaberiMaterial: String;
  var
    I: Integer;
  begin
    I := Random(12 - (X + (Y * 4)));
    Result := Mat[I];
    Mat[I] := Mat[11 - (X + (Y * 4))];
  end;

......


      Cube.Material.LibMaterialName := IzaberiMaterijal; //gore nema j


no dobro, to sam uochio odmah... a kod primera sa inercijom sam morao ruchno u uses da dodajem unit za Inerciju ali posle kad sam downloadovao tvoj primer radilo mi je i bez toga... hmmmm

eh da, srki, kod nashe igre sam dodao u can...cer onprogress event, kod nestajanja, da kocke priblizhawa kameri, pa sad izgleda josh lepshe (barem meni )
Laravel Srbija.

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

PeraKojotSuperGenije
Sasa Popovic
Beograd

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



Profil

icon Re: Kako koristiti GLScene02.06.2005. u 16:54 - pre 229 meseci
Da li neko moze malo detaljnije da opise postupak instaliranja GLScene-a. Mislim da sam download-ovao sve sto mi je potrebno, ali ne umem da slozim kockice...
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 GLScene02.06.2005. u 19:36 - pre 229 meseci
Ok... ovako radi... step-by-step :)
Ako si skinuo zapakovan GLScene prvo ga raspakuju neki folder... npr C:\Program Files\Borlad\Delphi 7\Components\GLScene. Kad to uradis pokreni Delphi. U Tools meniu izaberi Environment Options... Na Library stranici u Library i Browsing path dodaj sve foldere iz GLScene\Source ukljucujuci i njega... trebalo bi da imas nesto slicno ovom
$(DELPHI)\Lib;
$(DELPHI)\Bin;
$(DELPHI)\Imports;
$(DELPHI)\Projects\Bpl;
$(DELPHI)\Rave5\Lib;
$(DELPHI)\Components\GLScene\Source;
$(DELPHI)\Components\GLScene\Source\Base;
$(DELPHI)\Components\GLScene\Source\CgShaders;
$(DELPHI)\Components\GLScene\Source\DesignTime;
$(DELPHI)\Components\GLScene\Source\FileFormats;
$(DELPHI)\Components\GLScene\Source\GameAPIs;
$(DELPHI)\Components\GLScene\Source\PhysicsAPIs;
$(DELPHI)\Components\GLScene\Source\Platform;
$(DELPHI)\Components\GLScene\Source\PlugIn;
$(DELPHI)\Components\GLScene\Source\ScriptingAPIs;
$(DELPHI)\Components\GLScene\Source\Shaders;
$(DELPHI)\Components\GLScene\Source\SoundAPIs;
$(DELPHI)\Components\GLScene\Source\VideoAPIs

$(Delphi) zamenjuje putanju do dlephi foldera (u mom slucaju do C:\Program Files\Borland\Delphi 7). Kad to uradis ostaje ti samo da instaliras pakete koji se nalaze u GLScene\DelphiX gde je X verzija tvog Delphia. Paket instaliras tako sto otvoris dpk fajl i u prozorcicu koji ti se otvori kliknes install. Da bi mogao da instaliras neke pakete (FMod i BASS za zvuk, DWS za scripting, Cg shaders) moraces da uradis pre instaliranja jos nesto. Za FMod i BASS samo kopiras FMOD.dll i BASS.dll u Windows\System32 folder. Za Cg shadere moras sa NVidia sajta skinuti Cg toolkit i instalirati ga, a za DWS moras instalirati DWS komponente koje mozes naci na SourceForge.
Nadam se da ti je sad jasnije.
 
Odgovor na temu

PeraKojotSuperGenije
Sasa Popovic
Beograd

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



Profil

icon Re: Kako koristiti GLScene03.06.2005. u 00:55 - pre 229 meseci
Da li moze i malo detaljnije objasnjenje za instalaciju DWS-a. Problem je u tome sto kad kompajliram projekte DWS-a (kao sto pise u prilozenom uputstvu) dobijam gresku "Required package 'SynEdit_D7' not found".
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 GLScene03.06.2005. u 06:40 - pre 229 meseci
Samo te pakete koji zahtevaju SynEdit_D7 nemoj instalirati... ili skini i SynEdit_D7 komponentu pa i nju instaliraj
 
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 GLScene03.06.2005. u 15:53 - pre 229 meseci
Ovog vikenda ne pisem nista jer mi se malo putuje. Sledeci tut ce biti o tome kako zadati putanju objektu po kojoj ce se kretati... prilicno fina stvar. Pozdravljam vas sve do ponedeljka... i napisite mi listu zelja sta bi zeleli da obradimo kasnije... mozda i neku zanimljivu ideju za igru kad predjemo sve sto nam je potrebno za nju
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Član broj: 32202
Poruke: 4391
*.yu1.net.

Sajt: https://avramovic.info


+46 Profil

icon Re: Kako koristiti GLScene03.06.2005. u 19:43 - pre 229 meseci
- rad sa animacijama (3ds ili mdl, shta vec) poshto mdl moze da ima vise animacija u sebi, pa ono... kako pustiti neku od njih i bla bla, daj bre animacijeeeeee :)
- ucitavanje eksterne teksture preko objekta (u runtime-u, naravno) i kako je pozicionirati (znash ono kad pomerash teksturu a objekat stoji), ako je moguce

eto... to je to za sad
Laravel Srbija.

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

tamnicar
sremska mitrovica

Član broj: 54010
Poruke: 67
195.252.85.*



Profil

icon Re: Kako koristiti GLScene04.06.2005. u 17:21 - pre 229 meseci
Odlican tutorial, ma ovo nije tutorial ovo je walkthrough :)
imam jedno pitanje. Da li se u ovom GLScene-u moze igrati sa shader efektima?
 
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 GLScene05.06.2005. u 22:44 - pre 229 meseci
Evo me, konacno, kod kuce

@JaHvram
To su malo napredne stvari, ali ih je lako uraditi Ocekuj ih posle primera za kretanje objekta po putanji i efekata (vatra, dim, munja...)

@tamnicar
Naravno da GLScene podrzava shadere. Ima podrsku za Cg i GLSL shadere (bice primera za cell shading, outlining, bumpmapping)
 
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 GLScene06.06.2005. u 17:26 - pre 229 meseci
Posle male pauzice nastavljamo sa primerima.
Pokazacemo kako se koristi Movement controls osobina (u designtime i u runtime) kao i PointTo funkciju objekata u GLScene.
Postavimo scenu (ne zaboravite i GLCadencer), na njoj kameru i svetlo, a od objekata (Basic Geometry) GLIcosahedron (ovom objektu cemo kretanje praviti u designtime), GLDodecahedron (ovom u runtime) i (Advanced Geometry) GLArrowLine (to je samo strelica i prilicno je korisna za pokazivanje u nesto... sa njom cemo koristiti PointTo funkciju).
Posto cemo koristiti osobine objekata moram u uses ubaciti GLBehaviours unit, GLMovement jer cemo koristiti Movement controls i u runtime kao i VectorGeometry da bismo lakse postavljali vektore u runtime. Postavimo objekte na sledece pozicije GLArrowLine 0, 0, -4, a GLIcosahedron i GLDodecahedron na 0, 0, -8. Njihove pozicije i nisu mnogo bitne jer ce Movement controls da ih pomeraju, ali cisto da ih vidimo da su i oni na sceni. Kad smo ovo odradili mozemo da krenemo na nov deo.
Kliknimo desnim na GLIcosahedron i izaberimo Add behaviour->Movement controls. Izaberimo Movement controls osobinu u Scene Editoru i u Object Inspectoru mozemo da pravimo putanje za nas objekat. Moguce je spremiti vise putanja i u progrmu birati koja ce da se izvrsava. Mi cemo koristiti samo jednu, a ako nekom bude previse komplikovano da shvati kako se biraju putanje (hint: ActivePath) neka pita Putanja se kreira tako sto zadajemo tacke u prostoru i definisemo koliko ce objekat sa se zarotira i/ili promeni velicinu dok putuje. Dodacemo novu putanju pritiskom na '...' u Paths property i biranjem Add new u prozorcicu koji se otvorio. Sada nam preostaje da dodajemo tackice kroz koje ce objekat prolaziti (uz rotiranje i promenu velicine). Tacke dodajemo na isti nacin kao i putanje i nalaze se u Nodes property. Dodacemo sledece tacke:

Pozicija (X, Y, Z): 1, -2, -8
Rotacija (Pitch, Roll, Turn): 50, 0, 0
Scale (X, Y, Z): 1, 1, 1
Speed: 2

Pozicija (X, Y, Z): 3, 0, -8
Rotacija (Pitch, Roll, Turn): 50, 50, 0
Scale (X, Y, Z): 1, 1, 1
Speed: 2

Pozicija (X, Y, Z): 4, 1, -8
Rotacija (Pitch, Roll, Turn): 50, 50, 50
Scale (X, Y, Z): 1, 1, 1
Speed: 2

Pozicija (X, Y, Z): 2, 2, -8
Rotacija (Pitch, Roll, Turn): 0, 50, 50
Scale (X, Y, Z): 1, 1, 1
Speed: 2

Pozicija (X, Y, Z): -4, -3, -8
Rotacija (Pitch, Roll, Turn): 0, 0, 50
Scale (X, Y, Z): 1, 1, 1
Speed: 2

Pozicija (X, Y, Z): 0, 0, -8
Rotacija (Pitch, Roll, Turn): 0, 0, 0
Scale (X, Y, Z): 1, 1, 1
Speed: 2

To ce nam biti neko kretanje za nas prvi objekat. Bilo bi lepo da vidimo kako ce da se on krece, zar ne? Da bi smo izabrali aktivnu putanju u designtime postavicemo ActivePathIndex property Movement controls osobine na 0 sto bi znacilo da smo izabrali prvu putanju. Ostaje nam jos da u OnCreate eventu nase forme pokrenemo nas objekta, a to cemo uraditi ovako
Code:
procedure TForm1.FormCreate(Sender: TObject);
begin
  GetOrCreateMovement(GLIcosahedron1).StartPathTravel;
end;

Ako pokrenemo program nas objekat ce se kretati. Prvo sto upada u oci je da se objekat ne krece uvek konstantnom brzinom iako smo Speed property svake tacke postavili na 2! To je trenutno jedan od bugova u GLScene, ali ako se tacke lepo i dovoljno blizu postave ovaj bag se skoro ne primecuje. Posto ne zelimo da se nas objekat zaustavi posle par sekundi kretanja postavicemo Looped property putanje na True. Da bi looped putanja lepo izgledala pocetna i krajnja tacka bi trebale da budu iste pa cemo dodati jos jednu tacku na putanji koja je ista kao i prva. Sada nas prvi objekat nekako nezgrapno uspeva da se krece po sceni
Sad je red da to uradimo i sa drugim objektom, ali u runtime. Tacke cemo dodati u OnCreate eventu forme... event ce izgledati ovako:
Code:
procedure TForm1.FormCreate(Sender: TObject);
var I: Integer;
begin
  Randomize;
  GetOrCreateMovement(GLIcosahedron1).StartPathTravel;
  with GetOrCreateMovement(GLDodecahedron1) do
  begin
    with Paths.Add do
    begin
      for I := 0 to 19 do
      begin
        with Nodes.Add do
        begin
          PositionAsVector := VectorMake(Random(10) - 5,
            Random(8) - 4,
            Random(3) - 8);
          RollAngle:= Random(360);
          PitchAngle := Random(360);
          TurnAngle := Random(360);
          ScaleAsVector :=VectorMake(1 + Random,
            1 + Random,
            1 + Random);
          Speed := Random(4) + 1;
        end;
        Nodes.Add.Assign(Nodes[0]);
        Looped := True;
      end;
    end;
    ActivePathIndex := 0;
    StartPathTravel;
  end;
end;

GetOrCreateMovement kreira Movement controls za nas objekat i vraca nam ga. Zatim sa Paths.Add dodajemo novu putanju i sa Nodes.Add nove tackice. Postavljamo njihove podatke i na kraju dodajemo jos jednu tacku koja je ista kao i prva. Postavljamo Looped na True kako bi se putanja pokrenula ponovo kad joj dodje kraj. Sve sto nam je preostalo je da postavimo aktivnu putanju i da pokrenemo objekat. Prosto k'o pasulj
Hajde jos da sredimo i da strelica pokazuje na objekat ciju putanju kreiramo u runtime. Za to je dovoljna samo jedna linija u GLCadenceru
Code:
procedure TForm1.GLCadencer1Progress(Sender: TObject; const deltaTime,
  newTime: Double);
begin
  GLArrowLine1.PointTo(GLDodecahedron1, YHmgVector);
end;

Sve sto kazemo je objekat na koji zelimo da linija pokazuje i gde joj je "gore" (YHmgVector ima vrednost 0, 1, 0).
To je to za sad... sledece sto nas ceka su Time Events... sa ovom komponentom mozemo da u odredjeno vreme uradimo nesto sa objektima ili bilo cim. Moze biti prilicno korisna stvarcica za animacije u igri.
Bye!!!


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 GLScene06.06.2005. u 19:34 - pre 229 meseci
Uvek je korisno imati komponentu kojoj mozes da kazes "uradi to i to u toliko sekundi i nastavi to da radis sve do tog vremena uz pauze od toliko sekundi". To je ono sto radi Time Events komponenta. Napravicemo jednostavnu animaciju u kojoj ce jedna kocka doleteti s leva, malo se pribliziti, druga s desna, obe se priblize, treca odozgo i opet se sve malo priblize i zatim pocnu da se okrecu. Ovde je sve vrlo jednostavno... vise se vremena provede u podesavanju vremena nego u pisanju koda
Postavicemo na scenu kameru, svetlo i 3 kocke. Prvu na -8, 0, -7. Drugu na 7, 0, -6. Trecu na 0, 4, -5. Time Events zahteva GLCadencer pa cemo ga postaviti na formu. Sa GLScene Utils grupe postavimo GLTimeEventsMGR komponentu na formu i Cadencer podesimo na onaj koji smo ranije stavili na formu. Sada nam ostaje da dodajemo nase evente. Svaki event ima vrstu, pocetno i krajnje vreme, pauzu (vremena su u sekundama), ime i da li je ukljucen ili nije. Od tipova imamo Continuous (poziva se od startnog do krajnjeg vremena sto je pre moguce), Periodic (slicno kao i Continuous samo sto se pravi pauza izmedju pozivanja) i OneShot (poziva se samo jednom... krajnje vreme nema znacaj). Ako zelimo da se neki event ponavlja i ponavlja... da nema kraja, krajnje vreme postavimo na -1. Sad cemo dodati nase evente (klik na '...' Events property i onda Add new u otvorenom prozorcicu).
1.
Pomera prvu kocku ka sredini
Tip = Continuous
Start = 2
End = 8
Code:
procedure TForm1.GLTimeEventsMGR1Events0Event(event: TTimeEvent);
begin
  GLCube1.Position.AsVector := VectorMake(-8 + Event.ElapsedTime, 0, -7);
end;

Jednostavno smanjuje X koordinatu pozicije. Event.ElapsedTime je vreme koje je proslo od startovanja eventa.
2.
Malo priblizimo prvu kocku
Tip = OneShot
Start = 8.5
Code:
procedure TForm1.GLTimeEventsMGR1Events1Event(event: TTimeEvent);
begin
  GLCube1.Position.Translate(ZHmgVector);
end;

Samo smo pomerili kocku blize kameri po Z osi.
Narednih nekoliko eventa su svi slicni... pomera se druga kocka, priblizavaju se, treca kocka... kada su sve kocke vidljive pocecemo da ih rotiramo. Rotiranje cemo vrsiti eventima tipa Periodic i koristicemo Event.TickCount property. TickCount predstavlja koliko je puta event bio pozvan do sad.
Code:
procedure TForm1.GLTimeEventsMGR1Events9Event(event: TTimeEvent);
begin
  GLCube1.TurnAngle := Event.TickCount * 5;
end;

To je otprilike to... prilicno jednostavno za upotrebu, a zaista mocno
Mozda neko moze da uradi neku animaciju za ove tutoriale pa da je ubacimo na pocetak "Parovi" i svih narednih igara koje cemo praviti ovde


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 GLScene06.06.2005. u 23:20 - pre 229 meseci
Pre nego sto predjemo na vatre, dimove i slicne efekte hteo bih jos samo da spomenem par objekata za ispisivanje teksta i stavljanje slicica na scenu. Skoro u svakom programu je potrebno nesto ispisati korisniku... cudi me kako sam zaboravio na ove objekte na pocetku tutoriala, ali evo... setiosam se ipak... bolje ikad nego nikad
Radicemo sa HUDSprite, HUDText i Space Text komponentama. HUDSprite i HUDText se ne nalaze u 3D vec 2D prostoru... X i Y koordinate im odredjuju polozaj i 0, 0 je gornji-levi ugao GLSceneViewera, a GLSceneViewer.Width, GLSceneViewer.Height je dodnji-desni ugao GLSceneViewera. Kao obicne VCL komponente na formi. Treba znati da koordinata predstavlja centar objekta, a ne njegov gornji-levi ugao kod HUD objekata.
Idemo sa primerom. Postavicemo GLSceneViewer dako da Width bude 688, a Height 446. Dodacemo HUDSprite (Add object->HUD objects->HUD Sprite) i postaviti ga na 344, 223, 0 tako da bude na sredini ekrana. Width cemo postaviti na 468, a Height na 60. Za texturu sam koristio sliku sa ES pa ako je to zabranjeno neka neko kaze i stavicu nesto drugo. Kada postavimo texturu vidimo kako se nas HUD Sprite lepo iscrtao.



Sa HUD Sprite mozemo da radimo sta hocemo kao i sa ostalim objektima... da detektujemo da li je mis iznad njega, da ga rotiramo, menjamo velicinu...
Sledeci je na redu HUD Text. HUD Text je skoro isti kao i HUD Sprite samo sto umesto materijala i textura imamo text na osnovu kojeg GLScene iscrta texturu. Postavicemo ga na 344, 150, 0. Aligment cemo staviti na Center. Da bi slova mogla da se iscrtavaju potrebna nam je slika slova. Mozemo koristiti bmp slike ili pustiti GLScene da sam kreira slike na osnovu win fontova. Sada cemo zbog jednostavnosti koristiti windows fontove. Na formu cemo postaviti GLWindowsBitmapFont iz GLScene grupe. Tu mozemo izabrati zeljeni font... ja sam postavio na Tahoma, 26, Bold. GLHUDText .BitmapFont property cemo postaviti na GLWindowBitmapFont koji smo malocas postavili na formu i sada mozemo napisati text za HUDText.Text property "GLScene Tutorial 12" i walla



Boja slova se moze menjati propertyem ModulateColor. Rotacija, promena velicine, menjanje pozicije... sve se moze kao i sa ostalim objektima.
Poslednji objekat za ovaj tut je Space Text... to je otprilike kao i HUD Text samo sto se mogu koristiti samo Win fontovi i mogu da imaju 3D oblik... takodje imaju i 3D koordinate kao i svi obicni objekti. Dodacemo jedan objekat tipa GLSpaceText (Add objects->Doodad objects->Space text) i postavicemo ga na -5.4, -3, -8 tako da bude otprilike pri dnu na sredini scene. Izabracemo font (tahoma, 26, bold) i napisati text "by ES Delphi Team (2005)"... i slova su se pojavila, ali ne izgledaju nista bolje od HUDTexta... fazon je u tome sto za Space Text treba svetlo da bi se lepo videlo sve i zato cemo dodati jednu lampicu na scenu. Sad vec izgleda malo lepse, a da bi dodali i 3D izgled Extrusion property cemo postaviti na 0.2. E, sad vec izgleda bolje Naravno, ovde mozemo podesiti i materijal, texturu... sve sto smo mogli na kocki, lopti i ostalim objektima.



Eto, tako se ispisuju slova u GLScene... nista komplikovano, zar ne Sad bi neko mogao da napravi malu animacijicu sa GLSpaceText, HUDText, HUDSprite, GLTimeEventsMGR i slicnim komponenticama za ove nase tutoriale... da vidim da li je neko nesto naucio Posle kad budemo radili i zvuk bice jos bolje... ako neko uradi
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 GLScene09.06.2005. u 16:41 - pre 228 meseci
Doslo je vreme i za slatke male efekte... vecinu cemo raditi sa cesticama (particle). Sa cesticama mozemo kreirati kisu, vatru, dim i slicne efekte. Cestica je u sustini obican objekat (lopta, kocka, ploca) koja se krece na osnovu nekih podatka... kada je tu samo jedna cestica to i nije bas neki "efekat", ali kad imamo 10... 20... 100... 1000 cestica onda vec mozemo imati neku lepu scenicu. Napravicemo jedan slican programcic kao demo za vatru koji ide sa GLScene.
Dodacemo na formu GLScene, GLSceneViewer, GLCadencer, a na scenu kameru, svetlo, loptu ( 0, 0, -6 ) i torus (Add object->Advanced Geometry->Torus). Torus cemo postaviti isto na 0, 0, -6, a MajorRadius na 2 i MinorRadius na 0.3. Dodacemo jos kod u OnProgress event GLCadencera da se torus okrece
Code:
procedure TForm1.GLCadencer1Progress(Sender: TObject; const deltaTime,
  newTime: Double);
begin
  GLTorus1.Turn(deltaTime * 20);
  GLTorus1.Pitch(deltaTime * 30);
end;

Jedna od bitnih stvari prilikom kreiranja efekata je svetlost... posto je vatra otprilike narandzaste boje i svetlost bi trebala da bude takva... zato cemo diffuse boju svetla postvaiti na clrOrange i pomericemo svetlost na 0, 0, -4 kako bi izgledalo kao da svetlost dolazi iz vatre.



Sada nam je pozadina scene nekako bezveze obojena u sivo... podesimo GLSceneViewer.Buffer.BackgroundColor na clrBlack kako bi izgledalo da je oko nasih objekata samo mrak



Sada nam ostaje jos samo da napravimo tu vatricu. Prvo sto treba da uradimo je da postavimo GLFireFXManager (GLScene PFX grupa) na formu. Postavimo Cadencer property na GLCandencer1 koji smo vec kreirali. Sada imamo komponentu koja ce nam prikazivati vatru... treba jos samo da je povezemo sa nasim objektom (lopta). Kliknimo desnim na GLSphere1 i u Add efect meniju izaberimo Fire FX. U Scene Editoru izaberimo Fire FX efekat i za Manager property postavimo GLFireFXManager1 koji smo vec kreirali. Da bi nam vatrica izgledala lepse u GLFireFXManageru podesimo FireRadius na 0.4, ParticleInterval na 0.01, ParticleLife na 2 i ParticleSize na 0.4. Pokrenimo sad programcic... iiiiii... vatrica gori, ali nesto nije uredu... vatra je nekako uvek iza torusa iako tako ne bi trebalo. Problem je u tome sto Alphablended objekti moraju da se iscrtavaju na kraju. Da bi smo to ispravili izaberimo GLSphere1 u Scene Editoru i pritisnimo Ctrl+D (ili Move Object Down dugme u tool baru) da bi smo je pomerili na poslednje mesto na sceni. Ako sada pokrenemo program sve ce biti ok



Probajte malo da se igrate propertyima u GLFireFXManageru... vidite kakvu vatru mozete napraviti
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 GLScene09.06.2005. u 21:40 - pre 228 meseci
Jos jedan lep efekat (meni jos lepsi i laksi za koriscenje od vatre) je ThorFX. To je simulacija munje. Na raspolaganju nam stoji izbor debljine munje, boje, koliko ce munja da oscilira, koliko da se razbacuje... Pokazacemo na prostom primeru kako to izgleda.
Postavicemo na scenu kameru, svetlo i dve lopte na pozicijama -3, 0, -5 i 3, 0, -5. Sad cemo dodati GLThorFXManager sa GLScene PFX palete. Ova komponenta je zaduzena za definisanje izgleda munje. Da bi mogla da radi moramo joj podesiti Cadencer property na GLCadencer komponentu koja je na formi. Sledece sto radimo je dodavanje Thor efekta nasoj prvoj lopti ( -3, 0, -5 ). Desni klik na GLSphere1->Add Effect->ThorFX. Jedino sto mozemo da podesimo za ThorFX evekat su ime i Manager. Postavimo manager na GLThorFXManager koji je na formi. Ovo je sve sto je potrebno da bi se munja videla... ali nismo jos postavili na koju stranu i koliko daleko da se vidi munja. To nam odredjuje GLThorFXManager.Target property. Moramo samo obratiti koju koordinatu tu pisemo jer to nije apsolutna koordinata mete nego relativna u odnosu na nasu loptu tj. objekat koji ima ThorFX efekat. Postavicemo Target na 6, 0, 0 sto znaci da ce munja de se vidi 6 jedinica desno od nase prve lopte sto znaci da ce drugi kraj biti u centru druge. Da munja ne bi izgledala previse velika postavicemo GlowSize na 0.1. I to je to... pokrenimo program i neka munja seva



Experimentisite malo sa osobinama ThorFX efekta (menjajet boje, vibration, velicinu...). Mogu se bas lepi efekti stvoriti ovom komponentom.
Prikačeni fajlovi
 
Odgovor na temu

tamnicar
sremska mitrovica

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



Profil

icon Re: Kako koristiti GLScene12.06.2005. u 10:33 - pre 228 meseci
ko izbrisa onaj tutorial sa modelom ??? :(

pitanje za isti!
hteo bih da napravim da mi se model priblizava iz daljine!
to mize po Z osi Position-a da se uradi!!
recimo GLActor1.Position.Z da ide od -100 do -45!!!!
e sad problem je kako to da uradim???
probao sam kroz petlju FOR, ali se to odradi jako brzo da se i nevidi kretanje, nego se samo model pojavi na position -45!

jel moze pomoc !
 
Odgovor na temu

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

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

Postavi temu Odgovori

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