|
(D3D新手)
Q1:m2 use a Z-up coordinate systems, so in order to convert to Y-up, the X, Y, Z values become (X, -Z, Y). 这个是M2文档的一个说明
之后在看 wowmodelview-0.48b-src(本站有下)//在OPENGL下
//下面是提取骨骼变换距阵的平移,缩放,旋转数据
Vec3D fixCoordSystem(Vec3D v)//针对平移
{
return Vec3D(v.x, v.z, -v.y);
}
Vec3D fixCoordSystem2(Vec3D v)//针对缩放
{
return Vec3D(v.x, v.z, v.y);
}
Quaternion fixCoordSystemQuat(Quaternion v)//旋转
{
return Quaternion(-v.x, -v.z, v.y, v.w);
}
是转换函数 我想问下这个转换关系
就是对于这三个数据进行的是什么样的处理,以前我都是直接用的。
另外我现在用D3D做,就得换到左手坐标系,暂不清楚如何转换~
请高手指点相关内容,或者我遗漏了什么知识点去学习。
Q2 :-------pivot 是个什么数据??
在下面的程序中m.translation(pivot); m *= Matrix::newTranslation(pivot*-1.0f);
的操作不是等于没有操作?
if (tr) {
m.translation(pivot);
if (trans.used) {
Vec3D tr = trans.getValue(anim, time);
m *= Matrix::newTranslation(tr);
}
if (rot.used && rotate) {
q = rot.getValue(anim, time);
m *= Matrix::newQuatRotate(q);
}
if (scale.used) {
Vec3D sc = scale.getValue(anim, time);
m *= Matrix::newScale(sc);
}
if (billboard) {
Matrix mtrans;
glGetFloatv(GL_MODELVIEW_MATRIX, &(mtrans.m[0][0]));
mtrans.transpose();
mtrans.invert();
Vec3D camera = mtrans * Vec3D(0.0f,0.0f,0.0f);
Vec3D look = (camera - pivot).normalize();
Vec3D up = ((mtrans * Vec3D(0.0f,1.0f,0.0f)) - camera).normalize();
// these should be normalized by default but fp inaccuracy kicks in when looking down 
Vec3D right = (up % look).normalize();
up = (look % right).normalize();
// calculate a billboard matrix
Matrix mbb;
mbb.unit();
//mbb.m[0][2] = right.x;
//mbb.m[1][2] = right.y;
//mbb.m[2][2] = right.z;
mbb.m[3][2] = 0.0f;
mbb.m[0][1] = up.x;
mbb.m[1][1] = up.y;
mbb.m[2][1] = up.z;
mbb.m[3][1] = 0.0f;
//mbb.m[0][0] = look.x;
//mbb.m[1][0] = look.y;
//mbb.m[2][0] = look.z;
mbb.m[3][0] = 0.0f;
/*
mbb.m[0][2] = right.x;
mbb.m[1][2] = right.y;
mbb.m[2][2] = right.z;
mbb.m[0][1] = up.x;
mbb.m[1][1] = up.y;
mbb.m[2][1] = up.z;
mbb.m[0][0] = look.x;
mbb.m[1][0] = look.y;
mbb.m[2][0] = look.z;
*/
m *= mbb;
}
m *= Matrix::newTranslation(pivot*-1.0f);
} else m.unit();
|
|