Forum Sveta kompjutera

Nazad   Forum Sveta kompjutera > Test Run > Programiranje > Pravljenje igara

Pravljenje igara Programski jezici, tehnike, alatke u službi pravljenja igara...

Odgovor
 
Alatke vezane za temu Vrste prikaza
Stara 15.4.2007, 13:41   #1
Andross
Kekule Mekule
 
Avatar korisnika Andross
 
Član od: 8.12.2005.
Lokacija: Beograd
Poruke: 4.129
Zahvalnice: 649
Zahvaljeno 1.348 puta na 690 poruka
Slanje poruke preko Skypea korisniku Andross
Određen forumom DirectX Problemi

Ucim DirectX vec nedelju dana i stigao presao sam svetla koja razumem. Sada u tom tutorijalu ima kao spisak zadataka tj. vezbi koje se kao trebaju uraditi da bi postao upoznat sa svetlima. Sad imaju dva zadatka koja mi nisu jasna. Kaze da napravim da point light kruzi oko kocke. Takodje kaze da posle toga napravim ka kruzi u 8 gde je centar od 8 izmedju dve kocke. Posto se svetlo pravi u funkciji (varijabla i podesavanja) pitam se kako bih to mogao da izvedem. Da se napravi funkcija gde se pravi svetlo sa drugim pozicijama i postavlja na mesto (ako prethodno bilo 0 i ovo je 0) prethodnog ili kako vec? Pomagajte ovo bas i nisam razumeo kako treba uraditi.

Kod:
void InitLight()
{
    D3DLIGHT9 light;
    D3DMATERIAL9 material;
 

    ZeroMemory(&light, sizeof(light));
    light.Type = D3DLIGHT_POINT;
    light.Diffuse.r = 0.5f;
    light.Diffuse.g = 0.5f;
    light.Diffuse.b = 0.5f;
    light.Diffuse.a = 1.0f;
    light.Range = 100.0f;
    light.Attenuation0 = 0.0f;
    light.Attenuation1 = 0.125f;
    light.Attenuation2 = 0.0f;
 

    D3DVECTOR vecPosition = {0.0f, 5.0f, 0.0f};
    light.Position = vecPosition;
 

    d3ddev->SetLight(0, &light);
    d3ddev->LightEnable(0, true);
 

    ZeroMemory(&material, sizeof(material));
    material.Diffuse.r = material.Ambient.r = 1.0f;
    material.Diffuse.g = material.Ambient.g = 1.0f;
    material.Diffuse.b = material.Ambient.b = 1.0f;
    material.Diffuse.a = material.Ambient.a = 1.0f;
 

    d3ddev->SetMaterial(&material);
}


Poslednja ispravka: Andross (15.4.2007 u 13:43) Razlog: dodat kod za pravljenje svetla
Andross je offline   Odgovor sa citatom ove poruke
Stara 15.4.2007, 14:45   #2
EclipsE
Starosedelac
 
Član od: 16.4.2006.
Lokacija: Scary Movie Reputacija: ■■□
Poruke: 1.337
Zahvalnice: 378
Zahvaljeno 279 puta na 196 poruka
Slanje poruke preko Skypea korisniku EclipsE
Određen forumom Re: DirectX Problemi

Da bi objekat kruzio oko drugog objekta(svetlo oko kocke) morash da menjash X i Z vrednosti. E sad, kako to uraditi??

Kod:
float radius = 1.0f;
float verticalRotation = 1.0f;
float horizontalRotation = 0.0f;
to su ti globalne promenljive
kad se update-uje frejm treba da ide ovako nesto

Kod:
horizontalRotation += 0.1f
light.Position.X = (float)( radius * Math.Cos(verticalRotation) * Math.Cos(horizontalRotation) );
light.Position.Y = (float)( radius * Math.Sin(verticalRotation) );
light.Position.Z = (float)( radius * Math.Cos(verticalRotation) * Math.Sin(horizontalRotation) );
ovo Math.Sin i Math.Cos zameni sa odgovarajucim funkcijama, ne znam kako se rade u c++-u (ili bese #include <math.h> )

a ovo drugo nisam razumeo, ako bi rekao gde si pronasao tutorijale pogledao bih i rekao bih ti

btw, deklarisi svetlo kao globalno, nemoj u funkciji
EclipsE je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku EclipsE na korisnoj poruci:
Andross (15.4.2007)
Stara 15.4.2007, 15:20   #3
Andross
Kekule Mekule
 
Avatar korisnika Andross
 
Član od: 8.12.2005.
Lokacija: Beograd
Poruke: 4.129
Zahvalnice: 649
Zahvaljeno 1.348 puta na 690 poruka
Slanje poruke preko Skypea korisniku Andross
Određen forumom Re: DirectX Problemi

I ja sam mislio na tako nesto samo sto su mi nedostajali sin i cos
Tutorijali su www.directxtutorial.com
Andross je offline   Odgovor sa citatom ove poruke
Stara 15.4.2007, 17:13   #4
quick
Član
 
Član od: 10.1.2006.
Poruke: 61
Zahvalnice: 0
Zahvaljeno 2 puta na 2 poruka
Određen forumom Re: DirectX Problemi

@ANDROSS

prvo, izbaci promjenljivu light iz funkcije i stavi je kao globalnu, kako bi je ponovo koristio.

dalje, imas pozicije kocaka b1, b2;
c - centar osmice
r - radijus kruga koji "gradi" osmicu.

Kod:
c = b1 + (b2-b1)/2;
r = D3DXVec3Length(&(c-b1));
ako posmatras kretanje tacke po osmici (koju cine 2 kruga koja se dodiruju) ono se sastoji od 2 "faze", prva je po prvom krugu u jednom pravcu, druga po drugom krugu u suprotnom pravcu a oba kretanja pocinju i zavrsavaju se u centru osmice. tu varijablu "faze" oznaci kao f;
f bi imala vrijednost od 0 do 2, 0-1 za kretanje po prvoj kruznici, 0-2 po drugoj;
f definisi po neko vremenskoj funkciji, na pr. ako hoces da ti se osmica zaobidje za 5 sekundi uradi ovako

Kod:
f = (float)(GetTickCount() % 5000) / 5000.0f * 2.0f;
da ne smaram, evo ti code, ukapiraces

Kod:
ULONG time = 5000;
D3DXVECTOR3 b1, b2, c;
D3DXVECTOR4 p;
float r, f;
D3DLIGHT9 light;

void init()
{
     c = b1 + (b2-b1)/2;
     r = D3DXVec3Length(&(c-b1));
     p = c;

     InitLight(); //ona tvoja funkcija ali sa light promjenljivom kao globalnom
}

void update()
{
     f = (float)(GetTickCount() % time) / (float)time * 2.0f;

     if(f<1.0f)
     {
           D3DXMATRIX m;
           D3DXMatrixRotationY(&m, 2.0f*D3DX_PI*f);
           D3DXVec3Transform(&p,  &(c-b1), &m);
           p += b1;
     }
     else
     {
           D3DXMATRIX m;
           D3DXMatrixRotationY(&m, -2.0f*D3DX_PI*(f-1.0f));
           D3DXVec3Transform(&p,  &(c-b2), &m);
           p += b2;
     }

     light.Position.x = p.x;
     light.Position.y = p.y;
     light.Position.z = p.z;

     d3ddev->SetLight(0, &light);
}
quick je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku quick na korisnoj poruci:
Andross (15.4.2007)
Stara 18.4.2007, 13:37   #5
Andross
Kekule Mekule
 
Avatar korisnika Andross
 
Član od: 8.12.2005.
Lokacija: Beograd
Poruke: 4.129
Zahvalnice: 649
Zahvaljeno 1.348 puta na 690 poruka
Slanje poruke preko Skypea korisniku Andross
Određen forumom Re: DirectX Problemi

@quick: Ovo tvoje ne radi. Buni se oko konverzije i jos necega drugog. Mozda je do mog matorog SDK-a (Summer 2003 )
Btw. uradio sam rotaciju:
Kod:
hor += 0.03f;
light.Position.x = (float)sin(hor) * 12.0f;
light.Position.y = 5.0f;
light.Position.z = (float)cos(hor) * 25.0f;
d3ddev->SetLight(0, &light);
Sada ima jedan problem tehnicke prirode. Vezan je za Sinus i Kosinus. Posto se to radi u srednjoj skoli pitao sam nastavnika (8-i sam razred) za to. On mi je pokazao formule (nalegla kateta / hipotenuza...) i to je vezano za ugao trougla. Sada te funkcije u prog. jezicima imaju jedan parametar. Slede pitanja:
1. Cemu Sinus i Kosinus sluze u programiranju igara (i generalno)?
2. Zasto jedan parametar?
Andross je offline   Odgovor sa citatom ove poruke
Stara 18.4.2007, 15:15   #6
quick
Član
 
Član od: 10.1.2006.
Poruke: 61
Zahvalnice: 0
Zahvaljeno 2 puta na 2 poruka
Određen forumom Re: DirectX Problemi

Citat:
ANDROSS kaže: Pregled poruke
@quick: Ovo tvoje ne radi. Buni se oko konverzije i jos necega drugog. Mozda je do mog matorog SDK-a (Summer 2003 )
Pa sto ne napises code.
Mozda je problem u ovim linijama:
Kod:
D3DXVec3Length(&(c-b1));
D3DXVec3Transform(&p,  &(c-b1), &m);
D3DXVec3Transform(&p,  &(c-b2), &m);
neki kompajleri ne podrzavaju ovo ili javljaju kao warning (u zavisnosti od warning levela) pa stavi u posebne promenljive te izraze (c-b1, c-b2) i proslijedi funkcijama njihove adrese.
Iako nema veze sa DX SDK, mozda je vrijeme da skines noviju verziju

Citat:
ANDROSS kaže: Pregled poruke
1. Cemu Sinus i Kosinus sluze u programiranju igara (i generalno)?
2. Zasto jedan parametar?
Sluze semu god ti padne na pamet sto se 3D grafike i matematike tice.
Parametar je ugao tog pravouglog trougla. Sinus je kolicnik naspramne katete i hipotenuze a kosinus kolicnik nalegle katete i hipotenuze.
Takodje koriscenjem arkus sinusa i arkus kosinusa mozes da pronadjes ugao izmedju 2 vektora na primjer itd. Velika je primjena.
quick je offline   Odgovor sa citatom ove poruke
Odgovor

Bookmarks sajtovi

Alatke vezane za temu
Vrste prikaza

Vaš status
Ne možete postavljati teme
Ne možete odgovarati na poruke
Ne možete slati priloge uz poruke
Ne možete prepravljati svoje poruke

BB kod: uključeno
Smajliji: uključeno
[IMG] kod: uključeno
HTML kod: isključeno


Slične teme
tema temu započeo forum Odgovora Poslednja poruka
DirectX GRANDE problem Gerovit Kvarovi 17 26.1.2007 12:48
DirectX eradicator ili DirectX kicker Srdjan 007 Aplikativni softver 1 24.9.2006 10:42
Kako da instaliram DirectX 6 phoenix[illusion] Operativni sistemi 3 25.3.2006 2:00
Zasto nece da se snima DirectX 9.0c? alien Operativni sistemi 11 29.1.2006 5:38
Kako da obrisem DirectX? alien Operativni sistemi 11 10.1.2006 19:14


Sva vremena su po Griniču +2 h. Sada je 20:13.


Powered by vBulletin® verzija 3.8.7
Copyright ©2000–2024, vBulletin Solutions, Inc.
Hosted by Beograd.com