Jump to content

  • Log In with Google      Sign In   
  • Create Account

#Actuallucky6969b

Posted 19 February 2013 - 01:51 AM

Hello, Spiro, nice to see you again.

I have checked the result against IGameExporter

And found that the last negation part should not be there. Hence

 

    CameraObject *cam = (CameraObject*) node->EvalWorldState(ip->GetTime()).obj;
            
                        Matrix3 atm = node->GetObjectTM(ip->GetTime(), 0);// 4x3 matrix
                        Matrix3 targetTM;
                        node->GetTargetTM(ip->GetTime(), targetTM);
         
                        Matrix3 matD3D;
                        Point3 p1 (1.0f, 0.0f, 0.0f);
                        Point3 p2 (0.0f, 0.0f, 1.0f);
                        Point3 p3 (0.0f, 1.0f, 0.0f);
                        Point3 p4 (0.0f, 0.0f, 0.0f);
     
                          matD3D.SetRow(0, p1);
                          matD3D.SetRow(1, p2);
                          matD3D.SetRow(2, p3);
                          matD3D.SetRow(3, p4);

                        atm = atm * matD3D;
                          targetTM = targetTM * matD3D;

                        
                        int ki, kj;
                        MRow *pcvm = atm.GetAddr();        
                        for (ki = 0; ki < 4; ki++) {
                            for (kj = 0; kj < 3; kj++) {
                                d3dViewXform.m[ki][kj] = pcvm[ki][kj];
                            }
                        }

                        // Assign the fourth column (perspective terms)

                        d3dViewXform.m[0][3] = d3dViewXform.m[1][3] = d3dViewXform.m[2][3] = 0.0f;
                        d3dViewXform.m[3][3] = 1.0f;

 

It seems like I have to negate the rotations in each axis and concatenate it to the translation matrix to get the final view matrix....


#1lucky6969b

Posted 19 February 2013 - 01:42 AM

Hello, Spiro, nice to see you again.

I have checked the result against IGameExporter

And found that the last negation part should not be there. Hence

    CameraObject *cam = (CameraObject*) node->EvalWorldState(ip->GetTime()).obj;
            
                        Matrix3 atm = node->GetObjectTM(ip->GetTime(), 0);// 4x3 matrix
                        Matrix3 targetTM;
                        node->GetTargetTM(ip->GetTime(), targetTM);
         
                        Matrix3 matD3D;
                        Point3 p1 (1.0f, 0.0f, 0.0f);
                        Point3 p2 (0.0f, 0.0f, 1.0f);
                        Point3 p3 (0.0f, 1.0f, 0.0f);
                        Point3 p4 (0.0f, 0.0f, 0.0f);
     
                          matD3D.SetRow(0, p1);
                          matD3D.SetRow(1, p2);
                          matD3D.SetRow(2, p3);
                          matD3D.SetRow(3, p4);

                        atm = atm * matD3D;
                          targetTM = targetTM * matD3D;

                        
                        int ki, kj;
                        MRow *pcvm = atm.GetAddr();        
                        for (ki = 0; ki < 4; ki++) {
                            for (kj = 0; kj < 3; kj++) {
                                d3dViewXform.m[ki][kj] = pcvm[ki][kj];
                            }
                        }

                        // Assign the fourth column (perspective terms)

                        d3dViewXform.m[0][3] = d3dViewXform.m[1][3] = d3dViewXform.m[2][3] = 0.0f;
                        d3dViewXform.m[3][3] = 1.0f;

 


PARTNERS