Beispiel #1
0
Mat4d Camera::makeTransMat()
{
    Mat4d transMat;

    Vec4d vecS = m_upVec.crossH(m_viewVec);
    double norm = m_upVec.crossH(m_viewVec).length();
    for(int i=0; i<4; i++)
    {
        vecS(i) = vecS(i)/norm;
    }
    Vec4d vecT = m_viewVec.crossH(vecS);

    transMat(0,0) = vecS(0);
    transMat(1,0) = vecS(1);
    transMat(2,0) = vecS(2);

    transMat(0,1) = vecT(0);
    transMat(1,1) = vecT(1);
    transMat(2,1) = vecT(2);

    transMat(0,2) = -m_viewVec(0);
    transMat(1,2) = -m_viewVec(1);
    transMat(2,2) = -m_viewVec(2);

    transMat(3,3) = 1;

    transMat = transMat.makeTransMat(-m_eyepoint)*transMat;    //Translation of eye point to (0,0,0)

    m_transMat = transMat;
    return transMat;
}