You need to flip your matrices and all points or use a Right handed projection matrix for everything in your game.
I wrote my own exporter and noticed the same problem but like Left handed so I just multiplied all Maya matrices by the following
// A float version of a right to left handed converison matrix
float RightToLeftMatData[4][4] = {
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, -1, 0,
0, 0, 0, 1,
};
//Not sure why but transforms must be built off of the dagPath
MStatus status;
MMatrix tMMat = dagPath.inclusiveMatrix(&status);
if (status != MS::kSuccess)
Error("Failed to get inclusive matrix");
tMMat.get(tMat.m);
// Cobalt always uses left handed coordinates so convert the coordinate system
if (ConvertFromRightHandedCoordinate)
{
tMat = mRightToLeft * tMat * mRightToLeft;
}
Also you'll need to modify every vertex's position, normal, binormal, tangent, and bitangent like so...
//Animation requires that we do not get vertex points pretransformed to world space
fnMesh.getPoints( vertexList, MSpace::kObject);
for ( uint32 i = 0; i < vertexList.length(); i++ )
{
vertexList[i].cartesianize();
MPoint point = vertexList[i];
if (ConvertFromRightHandedCoordinate) vPoint.push_back(cVector3(point.x, point.y, -point.z));
else vPoint.push_back(cVector3(point.x, point.y, point.z));
}
fnMesh.getNormals( normalList, MSpace::kObject);
for (uint32 i = 0; i < normalList.length(); i++)
{
MPoint point = normalList[i];
if (ConvertFromRightHandedCoordinate) vNormal.push_back(cVector3(point.x, point.y, -point.z));
else vNormal.push_back(cVector3(point.x, point.y, point.z));
}
// Same thing for binormal and bitangent
I also flip the V coordinates for textures though you could always do this in a shader if you'd prefer. A lot of shader examples from NVidia actually have a flag to do that.
If you need some reference material feel free to take anything you want from my maya conversion. http://code.google.com/p/cobaltlibrary/source/browse/trunk/Tools/Source/MayaConvert/MayaFile.cpp