Для перспективной проекции я использую следующий код:
Есть две возможности. Во-первых, вы действительно не хотели делать то, что делает этот код. Во-вторых, вы действительно имели в виду это, но не до конца понимаете, что сделали.
Давайте рассмотрим первый. Матрица просмотра никогда не должна идти внутри матрицы GL_PROJECTION
. Кроме того, матрица просмотра всегда приходит после матрицы проекции. Они всегда должны быть истинными , если вы не делаете что-то особенное.
Что приводит ко второму. Если вы действительно намереваетесь вращать и смещать постпроективное пространство, то вы не можете ожидать, что геометрия будет отбракована по отношению к усеченному контуру. Почему?
Потому что OpenGL не делает выборку усеченного конуса. Он отбрасывает против любых позиций вершин после T & L, которые вы предоставляете. Если вы поворачиваете вид за пределы усеченного конуса, то это то, что рисуется. OpenGL не рисует то, что не видно; если вы измените представление после проецирования так, чтобы вещи, которые не были видны теперь, были видны, тогда вы изменили то, что есть, а что нет.