|
Pravljenje igara Programski jezici, tehnike, alatke u službi pravljenja igara... |
|
Alatke vezane za temu | Vrste prikaza |
15.4.2007, 13:41 | #1 |
Kekule Mekule
|
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 |
15.4.2007, 14:45 | #2 |
Starosedelac
|
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; 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) ); 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 |
Sledeći korisnik se zahvaljuje korisniku EclipsE na korisnoj poruci: | ||
Andross (15.4.2007) |
15.4.2007, 15:20 | #3 |
Kekule Mekule
|
Re: DirectX Problemi
I ja sam mislio na tako nesto samo sto su mi nedostajali sin i cos
Tutorijali su www.directxtutorial.com |
15.4.2007, 17:13 | #4 |
Član
Član od: 10.1.2006.
Poruke: 61
Zahvalnice: 0
Zahvaljeno 2 puta na 2 poruka
|
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)); 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; 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); } |
Sledeći korisnik se zahvaljuje korisniku quick na korisnoj poruci: | ||
Andross (15.4.2007) |
18.4.2007, 13:37 | #5 |
Kekule Mekule
|
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); 1. Cemu Sinus i Kosinus sluze u programiranju igara (i generalno)? 2. Zasto jedan parametar? |
18.4.2007, 15:15 | #6 | ||
Član
Član od: 10.1.2006.
Poruke: 61
Zahvalnice: 0
Zahvaljeno 2 puta na 2 poruka
|
Re: DirectX Problemi
Citat:
Mozda je problem u ovim linijama: Kod:
D3DXVec3Length(&(c-b1)); D3DXVec3Transform(&p, &(c-b1), &m); D3DXVec3Transform(&p, &(c-b2), &m); Iako nema veze sa DX SDK, mozda je vrijeme da skines noviju verziju Citat:
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. |
||
18.4.2007, 15:38 | #7 |
Kekule Mekule
|
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?
|
18.4.2007, 16:06 | #8 |
Član
Član od: 10.1.2006.
Poruke: 61
Zahvalnice: 0
Zahvaljeno 2 puta na 2 poruka
|
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 |
18.4.2007, 16:08 | #9 |
Kekule Mekule
|
Re: DirectX Problemi
E sad sam skroz skapirao.
|
19.4.2007, 13:41 | #10 |
Kekule Mekule
|
Re: DirectX Problemi
Uf sad imam trip sa kamerom. Exe je u prilogu koristite strelice i videcete sta ne valja.
|
20.4.2007, 8:58 | #11 |
Starosedelac
|
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) ] |
20.4.2007, 13:59 | #12 |
Član
|
Re: DirectX Problemi
|
20.4.2007, 20:06 | #13 |
Starosedelac
|
Re: DirectX Problemi
|
20.4.2007, 20:30 | #14 |
Kekule Mekule
|
Re: DirectX Problemi
Pa ja sam ga namestio na 30 FPS
|
23.4.2007, 22:24 | #15 |
Kekule Mekule
|
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) { // ... } Kod:
private void Render(object sender, PaintEventArgs e) { // ... } // konstruktori bla bla bla this.Paint += new PaintEventHandler(Render); |
24.4.2007, 17:00 | #16 | |
Starosedelac
|
Re: DirectX Problemi
Citat:
btw. DirectX za C++ je laksi(tj. manje komplikovan) nego MDX , koliko god ti to cudno zvucalo... |
|
24.4.2007, 19:33 | #17 |
Kekule Mekule
|
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? |
24.4.2007, 21:21 | #18 | |
Starosedelac
|
Re: DirectX Problemi
Citat:
|
|
24.4.2007, 21:25 | #19 |
Starosedelac
|
Re: DirectX Problemi
|
24.4.2007, 21:28 | #20 |
Kekule Mekule
|
Re: DirectX Problemi
Uporedio sam. I po meni opet je MDX laksi.
|
Bookmarks sajtovi |
Alatke vezane za temu | |
Vrste prikaza | |
|
|
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 |