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: 3.524
Zahvalnice: 545
Zahvaljeno 931 puta na 496 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 278 puta na 195 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: 3.524
Zahvalnice: 545
Zahvaljeno 931 puta na 496 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: 3.524
Zahvalnice: 545
Zahvaljeno 931 puta na 496 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
Stara 18.4.2007, 15:38   #7
Andross
Kekule Mekule
 
Avatar korisnika Andross
 
Član od: 8.12.2005.
Lokacija: Beograd
Poruke: 3.524
Zahvalnice: 545
Zahvaljeno 931 puta na 496 poruka
Slanje poruke preko Skypea korisniku Andross
Određen forumom Re: DirectX Problemi

Znam te formule. Nego kada bih u onom obrisao sin i cos pozive svetlo ne bi islo u krug. To zbog tih uglova ili sta?
Andross je offline   Odgovor sa citatom ove poruke
Stara 18.4.2007, 16:06   #8
quick
Član
 
Član od: 10.1.2006.
Poruke: 61
Zahvalnice: 0
Zahvaljeno 2 puta na 2 poruka
Određen forumom Re: DirectX Problemi

naravno da ne bi islo u krug jer se vise ne mijenjaju x i z koordinate

sin u = a / c
sin u * c = a

cos u = b / c
cos u * c = b

a i b su katete ocigledno, a c je u tvom slucaju ocigleno 12 odnosno 25

pa je u tvom slucaju
x = sin(u)*12
z = cos(u)*25
sto si i ucinio
quick je offline   Odgovor sa citatom ove poruke
Stara 18.4.2007, 16:08   #9
Andross
Kekule Mekule
 
Avatar korisnika Andross
 
Član od: 8.12.2005.
Lokacija: Beograd
Poruke: 3.524
Zahvalnice: 545
Zahvaljeno 931 puta na 496 poruka
Slanje poruke preko Skypea korisniku Andross
Određen forumom Re: DirectX Problemi

E sad sam skroz skapirao.
Andross je offline   Odgovor sa citatom ove poruke
Stara 19.4.2007, 13:41   #10
Andross
Kekule Mekule
 
Avatar korisnika Andross
 
Član od: 8.12.2005.
Lokacija: Beograd
Poruke: 3.524
Zahvalnice: 545
Zahvaljeno 931 puta na 496 poruka
Slanje poruke preko Skypea korisniku Andross
Određen forumom Re: DirectX Problemi

Uf sad imam trip sa kamerom. Exe je u prilogu koristite strelice i videcete sta ne valja.
Priloženi fajlovi
Tip fajla: zip D3DBasic10.zip (79,4 KB, 25 puta viđeno)
Andross je offline   Odgovor sa citatom ove poruke
Stara 20.4.2007, 8:58   #11
MG-RAY
Starosedelac
 
Član od: 15.2.2006.
Lokacija: Midlands
Poruke: 1.523
Zahvalnice: 277
Zahvaljeno 307 puta na 207 poruka
Slanje poruke preko Skypea korisniku MG-RAY
Određen forumom Re: DirectX Problemi

Kao prvo... trebao bi da napravis neki nacin za izlazak is programa osim Restart tastera na kucistu...

Koliko mi se cini, ovde se pozicija tgt-a pomera po pravoj liniji...ako te mrzi da se bakces sa trigonometrijom, samo treba da zarotiras View matricu oko Y ose za odredjeni broj stepeni (tj. radijana)... [ D3DMatrixRotationY(&viewMatrix, angle) ]
MG-RAY je offline   Odgovor sa citatom ove poruke
Stara 20.4.2007, 13:59   #12
kish
Član
 
Član od: 29.7.2006.
Lokacija: In My Tree
Poruke: 248
Zahvalnice: 32
Zahvaljeno 44 puta na 27 poruka
Slanje poruke preko MSN-a korisniku kish
Određen forumom Re: DirectX Problemi

Citat:
MG-RAY kaže: Pregled poruke
Kao prvo... trebao bi da napravis neki nacin za izlazak is programa osim Restart tastera na kucistu...
Si probao ESC (Dugme u gonjem levom uglu tastature)?
Sorry za OT, ali morao sam
kish je offline   Odgovor sa citatom ove poruke
Stara 20.4.2007, 20:06   #13
MG-RAY
Starosedelac
 
Član od: 15.2.2006.
Lokacija: Midlands
Poruke: 1.523
Zahvalnice: 277
Zahvaljeno 307 puta na 207 poruka
Slanje poruke preko Skypea korisniku MG-RAY
Određen forumom Re: DirectX Problemi

Citat:
kish kaže: Pregled poruke
Si probao ESC (Dugme u gonjem levom uglu tastature)?
Sorry za OT, ali morao sam

I sve ostale...sto je najcudnije... aplikacija radi na samo 30 fps...sve sa Busy cursorom
MG-RAY je offline   Odgovor sa citatom ove poruke
Stara 20.4.2007, 20:30   #14
Andross
Kekule Mekule
 
Avatar korisnika Andross
 
Član od: 8.12.2005.
Lokacija: Beograd
Poruke: 3.524
Zahvalnice: 545
Zahvaljeno 931 puta na 496 poruka
Slanje poruke preko Skypea korisniku Andross
Određen forumom Re: DirectX Problemi

Pa ja sam ga namestio na 30 FPS
Andross je offline   Odgovor sa citatom ove poruke
Stara 23.4.2007, 22:24   #15
Andross
Kekule Mekule
 
Avatar korisnika Andross
 
Član od: 8.12.2005.
Lokacija: Beograd
Poruke: 3.524
Zahvalnice: 545
Zahvaljeno 931 puta na 496 poruka
Slanje poruke preko Skypea korisniku Andross
Određen forumom Re: DirectX Problemi

Ovo pitanje se tice MDX-a (za one koji ne znaju preso sam na C#).
Da li postoji razlika u brzini izmedju overrajda OnPaint metoda ili svopstvenog Render metoda. Da razumete:
Jel brze ovo:
Kod:
protected override void OnPaint(PaintEventArgs e)
{
    // ...
}
ili ovo:
Kod:
private void Render(object sender, PaintEventArgs e)
{
    // ...
}

// konstruktori bla bla bla
this.Paint += new PaintEventHandler(Render);
ili je isto?
Andross je offline   Odgovor sa citatom ove poruke
Stara 24.4.2007, 17:00   #16
MG-RAY
Starosedelac
 
Član od: 15.2.2006.
Lokacija: Midlands
Poruke: 1.523
Zahvalnice: 277
Zahvaljeno 307 puta na 207 poruka
Slanje poruke preko Skypea korisniku MG-RAY
Određen forumom Re: DirectX Problemi

Citat:
ANDROSS kaže: Pregled poruke
Ovo pitanje se tice MDX-a (za one koji ne znaju preso sam na C#).
Da li postoji razlika u brzini izmedju overrajda OnPaint metoda ili svopstvenog Render metoda...neki bla bla code...
OnPaint je clan osnovne Form klase, Paint je Event trenutnog form-a kog koristis...tako da ti dodje isto...u svakom slicaju, uvek mozes da izmeris brzinu...

btw. DirectX za C++ je laksi(tj. manje komplikovan) nego MDX , koliko god ti to cudno zvucalo...
MG-RAY je offline   Odgovor sa citatom ove poruke
Stara 24.4.2007, 19:33   #17
Andross
Kekule Mekule
 
Avatar korisnika Andross
 
Član od: 8.12.2005.
Lokacija: Beograd
Poruke: 3.524
Zahvalnice: 545
Zahvaljeno 931 puta na 496 poruka
Slanje poruke preko Skypea korisniku Andross
Određen forumom Re: DirectX Problemi

A koliko god tebi cudno zvucalo, nemam nikakve jace resurse za obican DX
I da, C++ je komplikovaniji
Valja li uzimati XNA sada ili tek kasnije preci?
Andross je offline   Odgovor sa citatom ove poruke
Stara 24.4.2007, 21:21   #18
EclipsE
Starosedelac
 
Član od: 16.4.2006.
Lokacija: Scary Movie Reputacija: ■■□
Poruke: 1.337
Zahvalnice: 378
Zahvaljeno 278 puta na 195 poruka
Slanje poruke preko Skypea korisniku EclipsE
Određen forumom Re: DirectX Problemi

Citat:
btw. DirectX za C++ je laksi(tj. manje komplikovan) nego MDX , koliko god ti to cudno zvucalo...
Ako MG-RAY nesto kaze, to mora da bude tacno
EclipsE je offline   Odgovor sa citatom ove poruke
Stara 24.4.2007, 21:25   #19
MG-RAY
Starosedelac
 
Član od: 15.2.2006.
Lokacija: Midlands
Poruke: 1.523
Zahvalnice: 277
Zahvaljeno 307 puta na 207 poruka
Slanje poruke preko Skypea korisniku MG-RAY
Određen forumom Re: DirectX Problemi

Citat:
ANDROSS kaže: Pregled poruke
A koliko god tebi cudno zvucalo, nemam nikakve jace resurse za obican DX
I da, C++ je komplikovaniji
Valja li uzimati XNA sada ili tek kasnije preci?
uporedi 2 code-a obicnog i MDX (samo onaj deo koji se odnosi na DirectX), pa ces videti...
(naravno, ovo se odnosi na FFP)
MG-RAY je offline   Odgovor sa citatom ove poruke
Stara 24.4.2007, 21:28   #20
Andross
Kekule Mekule
 
Avatar korisnika Andross
 
Član od: 8.12.2005.
Lokacija: Beograd
Poruke: 3.524
Zahvalnice: 545
Zahvaljeno 931 puta na 496 poruka
Slanje poruke preko Skypea korisniku Andross
Određen forumom Re: DirectX Problemi

Uporedio sam. I po meni opet je MDX laksi.
Andross 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 0:55.


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