void CScenView::PerspectiveTr()
{
int i,j;
int ix,iy;
double vb,za;
// Offset and perspective m_ObjPt (X,Y,Z) to (S,T)
// Object point in 3D
// m_ObjPtX; m_ObjPtY; m_ObjPtZ;
m_ScnObjCoords[0] = m_ObjPtX + m_ObjPosX + m_ScOffpPosnX;
m_ScnObjCoords[1] = m_ObjPtY + m_ObjPosY + m_ScOffpPosnY;
m_ScnObjCoords[2] = m_ObjPtZ + m_ObjPosZ + m_ScOffpPosnZ;
// matrix multiply
for(j=0; j<4; j++){
vb = m_ScnObjCoords[0] * m_ScPerspective[0][j];
for(i=1; i<4; i++){
vb = vb + m_ScnObjCoords[i] * m_ScPerspective[i][j];
}
m_rpc[j] = vb;
}
za = m_rpc[3];
if(za == 0.0)za = 1.0e-15; // Avoid division by 0
// Rescale for m_rpc[3] = 1.0
m_ScreenS = m_rpc[0] / za;
m_ScreenT = m_rpc[1] / za;
ix = int(m_ScreenGainX *
(m_ScreenS - m_WorgSx) + 0.5) + m_WorgIx;
iy = int(m_ScreenGainY *
(m_WorgTy - m_ScreenT) + 0.5) + m_WorgIy;
// Ready to set pixel
m_DeviceIx = ix; // Display device pixel
m_DeviceIy = iy;
}