Используйте ортографическую проекцию, которая отображает единицы измерения пространства глаза в пикселях:
glViewport(0,0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, width, 0, height, -1, 1);
Обновление в связи с обновлением вопроса:
Тексель → сопоставление пикселей в окне просмотра возможно с перспективной проекцией, нотолько при определенном ограничении: текстурированный квадрат должен быть копланарен перспективному усечению вблизи / в дальней плоскости.
Как это сделать?Для glFrustum(left, right, bottom, top, near, far)
с Z = ближним, диапазон пространства глаза XY [влево, вправо] × [низ, верх] отображается на NDC xy [-1, 1] ², а NDC xy [-1, 1] ² отображается на экстенты области просмотра,Таким образом, все эти аффинные преобразования следуют закону
y(x) = to_lower_bound + (x - from_lower_bound) * (to_upper_bound - to_lower_bound) / (from_upper_bound - from_lower_bound)
Все, что вам нужно сделать, это отобразить видовой экран в NDC на ближнюю плоскость, и если вы Z = / = ближний масштаб вблизи / Z.