|
dev.gamez.lv Latvian Game Developers Community
|
View previous topic :: View next topic |
Author |
Message |
Angel
Joined: 02 Jan 2005 Posts: 113 Location: Latvija
|
Posted: Sun Apr 10, 2005 8:53 pm Post subject: Rotaaciju matricas |
|
Gribēju uzzināt, vai tad, ja izmanto matricas rotāciju aprakstīšanai ir jāraksta visi trīs veidi( pa katru asi x,y un z), vai arī ir viens kopīgs veids(uzreiz visām)? |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Sun Apr 10, 2005 8:56 pm Post subject: |
|
Pēc matricu īpašībām: V*M1*M2 = V*M, kur V - vektors, M1,M2,M - matricas, un M=M1*M2.
Tātad, ja tev ir rotācijas matricas katra ap citu asi - Mx, My, Mz, tad lai vektoru pagrieztu ap visām trim asīm, tad var reizināt v*Mx*My*Mz (skaties tikai, lai kārtība pareiza), bet var arī iepriekš aprēķināt M=Mx*My*Mz, un tad tikai reizināt vektoru ar vienu matricu - v*M. |
|
Back to top |
|
|
Angel
Joined: 02 Jan 2005 Posts: 113 Location: Latvija
|
Posted: Sun Apr 10, 2005 9:04 pm Post subject: |
|
Intereses pēc: kāpēc kārtībai jābūt tādai? Summa taču nemainās, ja reizinātājus maina vietām! (par matricām īsti nezinu) |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Sun Apr 10, 2005 9:11 pm Post subject: |
|
Matricām mainās! Ne vienmēr A*B = B*A (A, B - matricas). Protams, ir gadījumi, kad izpildās, bet ne vispārīgi. Kārtībai nav jābūt obligāti xyz, bet gan tādai, lai pašam nesajuktu kas. Jo, piemēram, pagriežot par 90 grādiem ap x-asi (objekta kordināšu asīs), y ass pārvēršas par z asi, tamdēļ vairs nav vērts griezt ap z asi (gimbal lock). Protams, tas ļoti atkarīgs kā tu izmanto šīs rotāciju asis.
P.S. Quote: | Summa taču nemainās, ja reizinātājus maina vietām! | . Man tur nebija summ rakstīta, bet gan reizinājums. Summa sastāv no saskaitāmajiem, nevis reizinātājiem ;) |
|
Back to top |
|
|
Angel
Joined: 02 Jan 2005 Posts: 113 Location: Latvija
|
Posted: Sun Apr 10, 2005 9:16 pm Post subject: |
|
Ok, Ok.. Reizinājums - kļūdījos |
|
Back to top |
|
|
Angel
Joined: 02 Jan 2005 Posts: 113 Location: Latvija
|
Posted: Sat Apr 23, 2005 7:39 pm Post subject: |
|
Es izmantoju rotaaciju matricas, bet ekraans shausmiigi raustaas, esmu izmeeginaajis dazhaadus lenkus, bet vienmeer vienc un tas pac Vai kaadam arii taa ir gadiijies, un ja jaa, tad kaada ir izeja |
|
Back to top |
|
|
vampirelli
Joined: 06 Dec 2004 Posts: 36 Location: maaja
|
Posted: Wed Apr 27, 2005 2:52 pm Post subject: jaa |
|
Man kaadreiz bija taa matrica, bet es no taas neko nejeedz, jo ka es to apnjeemiigi petiju, es maacijos 9. klasee... _________________ kas i ko |
|
Back to top |
|
|
elvman Indago Uzvarētājs
Joined: 09 Apr 2003 Posts: 1278 Location: Kuldiga
|
Posted: Thu Apr 28, 2005 4:28 pm Post subject: |
|
Tev vajag nosaakuma uztaisiit Identity Matrix
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
un tad roteet un dariit visu paareejo _________________ long time; /* know C */ |
|
Back to top |
|
|
Angel
Joined: 02 Jan 2005 Posts: 113 Location: Latvija
|
Posted: Thu Apr 28, 2005 7:14 pm Post subject: |
|
Taa jau arii ir, te buus kaa tas viss izskataas: Code: | void cCamera::Rotate(float angle, float x, float y, float z){
float c = (float)cos(angle);
float s = (float)sin(angle);
float t = 1 - c;
cMatrix4x4 mRot;
mRot.Identity();
mRot.m[0]=t*x*x+c; mRot.m[1]=t*x*y-s*z; mRot.m[2]=t*x*z+s*y;
mRot.m[4]=t*x*y+s*z; mRot.m[5]=t*y*y+c; mRot.m[6]=t*y*z-s*x;
mRot.m[8]=t*x*z-s*y; mRot.m[9]=t*y*z+s*x; mRot.m[10]=t*z*z+c;
cVector3 vView = vector3.Normalize(c_position-c_view);
c_view = c_position +mRot*vView;
} |
Sho koodu panjeemu no viena raksta, un vinjam vaidzeetu straadaat, tach taa nav, un viss raustaas.
[EDIT]
cMatrix4x4 ir klasse ar float m[16] |
|
Back to top |
|
|
Angel
Joined: 02 Jan 2005 Posts: 113 Location: Latvija
|
Posted: Fri Apr 29, 2005 4:01 pm Post subject: |
|
veel tikai gribeeju zinaat, kaa ir pareizi 4x4 matricu reizinaat ar vektoru(x,y,z).
Kursh variants pareizs:
1 Code: | vResult.x = m.field[0]*v.x + m.field[1]*v.y+m.field[2]*v.z+1;
vResult.y = m.field[4]*v.x + m.field[5]*v.y+m.field[6]*v.z+1;
vResult.z = m.field[8]*v.x+m.field[9]*v.y+m.field[10]*v.z+1;
|
vai 2 Code: | vResult.x = m.field[0]*v.x + m.field[1]*v.y+m.field[2]*v.z;
vResult.y = m.field[4]*v.x + m.field[5]*v.y+m.field[6]*v.z;
vResult.z = m.field[8]*v.x+m.field[9]*v.y+m.field[10]*v.z;
|
(atshkiriiba ir tikai "+1") |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Fri Apr 29, 2005 4:12 pm Post subject: |
|
Nu pirmajā gadījumā tu reizini 4x4 matricu, kurai apakšējā rindā ir vērtības (1,1,1,1) un labējā kolonnā (0,0,0,1) ar vektoru (x,y,z,1). Otrajā gadījumā tu reizini vektoru (x,y,z,1) ar 4x4 matricu, kurai apakšējā rindā ir vērtības (0,0,0,1) un labējā kolonnā arī (0,0,0,1). |
|
Back to top |
|
|
|
|
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
|