|
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. |
||
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 |