Utilizator:
Parola:
Am uitat parola... | Cont nou!


Articole Resurse Echipe Competiții Proiecte Forum DevBlogs Locuri de muncă GDROMag Issue#1 GDROCon 2007

 
Forum » Programare » Grafică » Compensare 3d studio max's Z up




Pagina 1 din 1 [ 1 ]

Mesaj Info autor
    Postat la 18 Aug 2008 22:03:52    Subiect: Compensare 3d studio max's Z up
Deliverance info:

Deliverance:

Daca am un model exportat din 3d studio max, si vreau sa il folosesc in OpenGL as face bine sa aplic fiecarui vertex ce-i apartine o modificare a coordonatelor astfel:
Cod sursă:

     vertices[i] = Vertex3D(Vertex.x, Vertex.z, -Vertex.y);
 


Dar cum convertesc o matrice din max pentru a folosi in OpenGL? Cum ramane cu translatia? Am incercat asa:

Cod sursă:

Point3 row1 = Point3(matrice3DS.GetRow(0).x, matrice3DS.GetRow(0).z,-matrice3DS.GetRow(0).y);
Point3 row2 = Point3(matrice3DS.GetRow(1).x, matrice3DS.GetRow(1).z,-matrice3DS.GetRow(1).y);
Point3 row3 = Point3(matrice3DS.GetRow(2).x, matrice3DS.GetRow(2).z,-matrice3DS.GetRow(2).y);
Point3 row4 = Point3(matrice3DS.GetRow(3).x, matrice3DS.GetRow(3).z,-matrice3DS.GetRow(3).y);
    
Matrix3 matriceOpenGL(row1,row3,row2,row4);
Point3 trans3DS = matrice3DS.GetTrans();            
CVector3 transOpenGL = {vTemp.x, vTemp.z, -vTemp.y};        
 


Dar rezultatele nu sunt corecte

Ultima editare efectuată de Deliverance pe 18 Aug 2008 22:04:36; 1 editări în total


Status:
Înregistrat pe:
13 Oct 2006 10:05:37
Vârsta: 25 ani
Mesaje: 253
Locatie: Iasi , Romania
Programator

 
    Postat la 18 Aug 2008 23:12:54    Subiect: < fara subiect >
jos8cal info:

jos8cal:

Conversia de la Max la OpenGL e asa:

OGL->Max:

x = x;
y = z;
z = -y;

Si cum OpenGL e column based iar Max-ul e row based, inseamna ca:
1. x = x => prima coloana din matricea lui Opengl este identica cu primul row din matricea lui Max.

2. y = z => a doua coloana din matricea lui OpenGL este identica cu al treilea row din matricea lui Max.

3. z = -y => a treia coloana din matricea lui OpenGL este identica cu al doilea row din matricea lui Max, dar negata.

LE: Translatia ai facut-o bine, dar trebuie sa o pui corect in matricea lui OpenGL, adica in coloana a patra.

LE2: ceva in genul asta ar trebui sa fie:

Cod sursă:

float m[16]; // matricea lui OpenGL

Matrix3 m3 = node->GetObjTMAfterWSM(t); // matricea lui Max

// X-ul
Point3 p3 = m3.GetRow(0);
m[0] = p3.x;
m[1] = p3.y;
m[2] = p3.z;
m[3] = 0.0f;

// Y-ul
p3 = m3.GetRow(2);
m[4] = p3.x;
m[5] = p3.y;
m[6] = p3.z;
m[7] = 0.0f;

// Z-ul
p3 = m3.GetRow(1);
m[8] = -p3.x;
m[9] = -p3.y;
m[10] = -p3.z;
m[11] = 0.0f;

// Trans
p3 = m3.GetTrans();
m[12] = p3.x;
m[13] = p3.z;
m[14] = -p3.y;
m[15] = 1.0f;
 

Ultima editare efectuată de jos8cal pe 18 Aug 2008 23:43:33; 5 editări în total

"Sunt la dispozitia dumneavoastra ca sa realizam ceea ce avem de realizat." (Blaxxunromania)

Breviar de personalitati.


Status:
Înregistrat pe:
10 Jun 2007 22:08:36
Vârsta: ? ani
Mesaje: 190
Locatie:


 
    Postat la 19 Aug 2008 17:15:51    Subiect: < fara subiect >
Deliverance info:

Deliverance:

Am incercat, dar nu pare sa mearga...


Status:
Înregistrat pe:
13 Oct 2006 10:05:37
Vârsta: 25 ani
Mesaje: 253
Locatie: Iasi , Romania
Programator

 
    Postat la 19 Aug 2008 18:51:39    Subiect: < fara subiect >
jos8cal info:

jos8cal:

Dar vertexii ii ai in object space? Adica dupa ce-i iei de la mesh->getVert() nu le mai faci nimic, da?

Ultima editare efectuată de jos8cal pe 19 Aug 2008 18:52:55; 1 editări în total

"Sunt la dispozitia dumneavoastra ca sa realizam ceea ce avem de realizat." (Blaxxunromania)

Breviar de personalitati.


Status:
Înregistrat pe:
10 Jun 2007 22:08:36
Vârsta: ? ani
Mesaje: 190
Locatie:


 
    Postat la 19 Aug 2008 19:33:14    Subiect: < fara subiect >
Deliverance info:

Deliverance:

Pentru fiecare vertex fac asa:

Vertex = CVertex3D(Vertex.x, Vertex.z, -Vertex.y);


Status:
Înregistrat pe:
13 Oct 2006 10:05:37
Vârsta: 25 ani
Mesaje: 253
Locatie: Iasi , Romania
Programator

 
    Postat la 19 Aug 2008 19:44:18    Subiect: < fara subiect >
jos8cal info:

jos8cal:

Aia e OK, eram curios daca ii inmultesti cu vreo matrice inainte sa-i trimiti la OGL, deoarece getVert() ti da in object space, iar daca inmultesti cu matricea nodului sau altceva, ii duci in alt space si de acolo incepe haos-ul.

Ia, da un c/p la cum ii iei si cum ii dai mai departe. La fel si pentru matrice.

Ultima editare efectuată de jos8cal pe 19 Aug 2008 19:53:08; 2 editări în total

"Sunt la dispozitia dumneavoastra ca sa realizam ceea ce avem de realizat." (Blaxxunromania)

Breviar de personalitati.


Status:
Înregistrat pe:
10 Jun 2007 22:08:36
Vârsta: ? ani
Mesaje: 190
Locatie:


 

Pagina 1 din 1 [ 1 ]


Server time: 06:39:45 24.05.2012



[ Termeni si conditii | Contact | F.A.Q. | Funny Pictures ]

© 2006 - 2012 Copyright 7thFACTOR Entertainment - All rights reserved