dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

dinamiskais vektors projekcijaa

 
dev.gamez.lv Forum Index -> Grafikas programmēšana un teorija
View previous topic :: View next topic  
Author Message
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Wed Aug 22, 2007 11:18 pm    Post subject: dinamiskais vektors projekcijaa

man te radaas taada doma kaa salabot vienu probleemu speeles jaunajaa projekcijas kodaa... dinamiskais UP vektors projekcijaa...
man jaadara taa:
jaanormalizee vektors, kursh noraada projekcijas virzienu
(XYZ_FROM->XYZ_TO)
tad kautkaa jaadabuu augshas virziena vektors no shii normalizeetaa projekcijas virziena vektora, bet probleema ir taada, ka es nezinu kaa vinju ar kautkaadu darbiibu dabuut!
kaads paliidzees? Smile
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Wed Aug 22, 2007 11:42 pm    Post subject:

No viena vektora tu nevari dabūt vektoru uz augšu viennozīmīgi. Definē precīzi, kas ir UP vektors! (0, 1, 0) vai? Jo pasaki man lūdzams - kāds ir tavs UP vektors, ja virziena vektors ir (0,-1,0) ?

No diviem vektoriem gan tu vari dabūt trešo vektoru, kas vienmēr būs vienlaicīgi perpendikulārs abiem diviem vektoriem, izmantojot vektoru vektoriālo reizinājumu (piemēram - no Right un Forward vektoriem dabūt Up vektoru).

Vēl iespējams, ka tev vajag ņemt savu virziena vektoru, un vektoru (0,1,0) un veikt Grama-Šmita ortogonalizēšanu. Bet nu tas ir atkarīgs no precīzi ko tev tur vajag dabūt...
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Thu Aug 23, 2007 9:32 am    Post subject:

es straadaaju ar 0,0,1 kaa parasto augshas vektoru... nu vienkaarshi nevaru pierast y kaa augstuma raadiitaaju lietot.. un arii eerti nav..
ja virziena vektors buutu 0,-1,0, tad aughsas vektors buutu 0,0,1!
nuu es domaaju, ka jaataisa taa, ka z-virziens (zdirection) jaapielabo par +90*, bet taakaa zdirection ir limitos no 0-180 (0-skats pavisam uz leju, 180 - skats pavisam uz augshu) tad sanaak taa, ka liidz 90* tikai jaapieskaita zdirection'am +90 un UP vektors gatavs, bet virs 90*iznaak taa, ka
add = 180-zdirection;
add2 = 90-add;
direction = dir_temp + 180;
zdirection = 180-add2;
un jaaizveido vektors ar... dazhaam labaam funkcijaam... nu pameeginaashu, bet ja kaadam rodas praataa kaads labaaks variants, tad lai saka droshi!
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Thu Aug 23, 2007 9:42 am    Post subject:

snake5 wrote:
ja virziena vektors buutu 0,-1,0, tad aughsas vektors buutu 0,0,1!

Ok, tādā gadījumā, ja z tev ir uz augšu - tad kāds būtu augšas vektors, ja virziena vektors ir 0,0,-1 ?

Nu nevar no viena paša vektora dabūt vienu vienīgu perpendikulāru vektoru. Vienam konkrētam virziena vektoram atbilst bezgalīgi daudz augšas vektori.

Vajag orientāciju telpā aprakstīt ar trīs vektoriem - up, forward, right (vai left, atkarībā no koordināšu sistēmas orientācijas). Un šie trīs vektori orientāciju telpā aprakstīs viennozīmīgi. Šie vektori veido 3x3 rotācijas matricu. Un jebkuru vienu no šiem vektoriem var viennozīmīgi izteikt no abiem pārējiem vektoriem izmantojot vektoriālo reizinājumu.

snake5 wrote:
tikai jaapieskaita zdirection'am +90 un UP vektors gatavs,

Kādā rakā tu grasies vektoram pieskaitīt leņķi? Matemātiski tā ir nedefinēta operācija. Tas ir gandrīz vai tas pats, kas gribēt tilpumam (piem, litri) pieskaitīt masu (kilogramus).

P.S. Šo topiku vajadzēja likt Matemātikas sadaļā, jo ar Grafikas programmēšanu te nav itin nekāda sakara.
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Thu Aug 23, 2007 12:02 pm    Post subject:

nuu tik un taa, es straadaaju ar virzieniem, un tos ir viegli paarveerst normalizeetaa vektoraa...
ja virziena vektors buutu 0,0,-1, tad augshas vektoram buutu jaabuut atkariigam no virziena (direction) ,jo z virziens (zdirection) pie shaada virziena vektora ir 0! uzreiz nereekinot varu pateikt, ka z_up buus 0, bet x un y...
x = cos(D3DXToRadian(direction))
y = sin(D3DXToRadian(direction))
nu taa laikam buus...
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Thu Aug 23, 2007 12:16 pm    Post subject:

Manuprāt tev nav ne jausmas, kas ir vektors un kas ir leņķis.
sin un cos var pielietot tikai leņķiem! Un direction ir vektors. Kā tu vari sin vai cos izvilkt no vektora?

Quote:
ja virziena vektors buutu 0,0,-1, tad augshas vektoram buutu jaabuut atkariigam no virziena (direction)

Nepareizi. Tas nav tikai 0,0,-1 gadījumā. Augšas vektors ir vienmēr atkarīgs no virziena vektora. Nav svarīgi kādas ir virziena vērtības.

Vēl protams variants - tu un es ar jēdzienu "virziena vektors" saprotam divas dažādas lietas. Es ar to saprotu 3-komponenšu vektoru (x,y,z), kurš norāda virzienu uz priekšu pasaules (world) koordinātēs. Piemēram - (0,0,1)=objekts kustās vertikāli uz augšu (pasaules koordinātēs), (sqrt(1/2),sqrt(1/2),0)=objekts kustās virzienā, kas ir paralēls pasaules xOy plaknes bisektrisei.

Quote:
uzreiz nereekinot varu pateikt, ka z_up buus 0, bet x un y...

Tieši tā!! Jebkuram virziena vektoram ir bezgalīgi daudz up vektori. Tavā gadījumā tie būs visi vektori formā (sin(a), cos(a), 0), kur a ir jebkurš skaitlis no 0 līdz 2*pi.

Tieši tāpēc ir vajadzīgs right (vai left) vektors, kurš piespiedīs up vektoram būt vienam vienīgam.
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Thu Aug 23, 2007 12:32 pm    Post subject:

labi, to vektoru (right) buus viegli dabuut..
redzi, kaapeec pielietoju direction un zdirection?
Code:

//normaalvektoriem "length" vienmeer jaabuut 1
vec.x =  length * cos(D3DXToRadian(direction)) * sin(D3DXToRadian(zdirection));
vec.y =  length * sin(D3DXToRadian(direction)) * sin(D3DXToRadian(zdirection));
vec.z = length * cos(D3DXToRadian(zdirection));

un taaluuk no virziena un Zvirziena es dabuuju VeKtoru! Very Happy
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Thu Aug 23, 2007 2:26 pm    Post subject:

Joprojām nesaprotu kas tev ir direction un zdirection.. Tu tos saukā par vektoriem, bet tai pat laikā no tiem velc sinusu un kosinusu.

Last edited by bubu on Thu Aug 23, 2007 3:41 pm; edited 1 time in total
Back to top
View user's profile Send e-mail
elvman
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 09 Apr 2003
Posts: 1278
Location: Kuldiga

PostPosted: Thu Aug 23, 2007 3:08 pm    Post subject:

snake5, vecīt tu visu konkrēti putro. Pirmkārt, tev tas nebūs direction, bet angle (parasti, ja nezina nozīmes, tad apskatās vārdnīcā). No sākuma nomaini nosakumus uz pareiziem un tad paskatīsimies, kas tur sanāk.
_________________
long time; /* know C */
Back to top
View user's profile Visit poster's website
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Thu Aug 23, 2007 5:15 pm    Post subject:

nu jaa to var arii saukt par lenkji, bet par cik tas ir speeleetaaja /kameras virziens un ir ierobezhots starp 0-360, tad saucu to par direction, kas tur tik traks? ne vienmeer virziens ir vektors...
Quote:
Joprojām nesaprotu kas tev ir direction un zdirection.. Tu tos saukā par vektoriem, bet tai pat laikā no tiem velc sinusu un kosinusu.
par vektoriem es vinjus nesaucu nekad...
Quote:
...ka z-virziens (zdirection)...
te pieraadiijums...
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Thu Aug 23, 2007 7:13 pm    Post subject:

Virziens vienmēr ir vektors, vismaz 3d-telpā. 2d-telpā virzienu vēl var aprakstīt ar leņķi.
Taču vektors ne vienmēr ir virziens.

Redzi - tāpēc, ka tu to savu leņķi nosauci par vektoru - tāpēc arī tāda nesaprašanās visa topika garumā. Vajag vai nu lietot terminus, kādus lieto visa pārējā pasaule, vai nu sākumā skaidri definēt, kas tev ir kas.

Quote:
par vektoriem es vinjus nesaucu nekad...

Nu es to directionu tavu par vektoru sāku uzskatīt no šī teksta pirmajā postā:
Quote:
tad kautkaa jaadabuu augshas virziena vektors no shii normalizeetaa projekcijas virziena vektora,
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Fri Aug 24, 2007 8:26 am    Post subject:

direction darbojas 2 dimensijaas (taapeec lenkjis), bet zdirection - vienaa(arii lenkjis), shos abus izlaizhot caur kodu, kursh paraadiits nedaudz augstaak un length vietaa liekot 1 - uzreiz var dabuut normalizeetu projekcijas vektoru!
bet, pienjemsim, ka man right vektors ir gandriiz taads pats kaa projekcijas, tikai direction+270(vai -90)nu taad piemeers:
direction: 0
zdirection: 0
vector: 1,0,0
rightvec: 0,1,0
upvec: 0,0,1
kaa tad no projekcijas vektora un "right" vektora varu dabuut "up" vektoru? kaads plzz var ieposteet pilnas darbiibas, jo man tas tik un taa buus jaapaarveido uz gamemaker'a kodu!
kaa to darbiibu sauca? cross product?
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Fri Aug 24, 2007 8:45 am    Post subject:

Kas pie joda ir leņķis vienā dimensijā!!! Viena dimensija = līnija. Kā uz līnijas ir iespējams leņķis??

Nezinu kāpēc tu tagad sāki virziena vektoru saukāt par projekcijas vektoru.. bet ja nu tas ir parasts virziena vektors (tb norāda virzienu, kurā objekts skatās uz priekšu pasaules koordinātēs), tad vajag izmantot vektoriālo reizinājumu: Up = Forward x Right, ja izmanto labās rokas koordināšu sistēmu, vai arī Up = Right x Forward, ja izmanto kreisās rokas koordināšu sistēmu. x šajās formulās ir vektoriālais reizinājums. Ir iespējams izmantot arī Left vektoru, ja tikai tad, protams, jāliek - zīme priekšā abām formulām.
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Fri Aug 24, 2007 9:19 am    Post subject:

kur var dabuut vektoriaalo reizinaajumu.. nu kautko vairaak par "x"
aa nee atradu Smile
C.x=A.y*B.z-B.y*A.z;
C.y=A.z*B.x-B.z*A.x;
C.z=A.x*B.y-B.x*A.y;
http://www.indago.lv/Izstradataji/Raksti/Giga/Tutorial02/tutorial02.htm
That's all i need! Smile
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Fri Aug 24, 2007 11:23 am    Post subject:

eh.. tu pat 5 min pagūglēt nevari, pirms nāc prasīt tipa jautājumus - "kur dabūt ABCD"? Tak atver google.com, ieraksti ABCD, un spied enter. Atbildi dabūsi pat ātrāk nekā 5 minūtēs.
Back to top
View user's profile Send e-mail
Display posts from previous:   
dev.gamez.lv Forum Index -> Grafikas programmēšana un teorija All times are GMT + 2 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group