Просто реализуйте преобразования конвейера OpenGL: вид модели, проекция, перспектива деления, область просмотра.Вы запрашиваете текущие матрицы с помощью glGetDoublev, а окно просмотра - с помощью glGetIntegerv.
Затем вам нужно вычислить матрицу проекций, умноженную на матрицу вида модели = MVP.
теперь для каждой вершины v вычислить MVP * v.
затем вычислите v / = vw;
Итак, вы получили координаты в диапазоне [-1,1] x [-1,1], последнее - масштабировать и перевести это в [x,x + w] x [y, y + h] (которые являются значениями области просмотра).
Вы также можете просмотреть информационные страницы ссылки OpenGL для glFrustum, glViewport, чтобы увидеть, как все этипреобразования сделаны.