def GetUnprojection(winXY: QPoint, winZ: float, winWH: QPoint, vpMat: QMatrix4x4) -> QVector3D: #- from gluUnproject definition, I don't consider glViewport ndcspaceCursorPos = QVector4D( (QVector2D(winXY) / QVector2D(winWH)) * 2 - QVector2D(1, 1), winZ * 2 - 1, 1) invertedVpMat, success = vpMat.inverted() if not success: raise NotImplementedError wspaceCursorPos = invertedVpMat * ndcspaceCursorPos return QVector3D(wspaceCursorPos) / wspaceCursorPos.w()
def _GetCamLookvecAndUpvec( viewMat: QMatrix4x4) -> T.Tuple[QVector3D, QVector3D]: invertedVPMat, _ = viewMat.inverted() return invertedVPMat * dvec.lookVec, invertedVPMat * dvec.skyVec