В течение первых нескольких лет, когда они продавались, графические процессоры для ПК массового рынка вообще не переводили и не вращали точки. Требуется ли вам реализовать эту функцию? Если нет, вы можете позволить программному обеспечению сделать это. В зависимости от ваших обстоятельств, программное обеспечение может быть более разумным маршрутом.
Если вам потребуется реализовать эту функцию, я расскажу вам, как они это делали в первые дни.
Аппаратное обеспечение имеет шестнадцать регистров с плавающей запятой, которые представляют матрицу 4x4. Разработчик приложения загружает эти регистры с помощью матрицы ModelViewProjection непосредственно перед рендерингом сетки треугольников. Матрица ModelViewProjection:
Модель * Вид * Проекция
Где «Модель» - это матрица, которая переводит вершины из координат «модели» в «мировые» координаты, «Вид» - это матрица, которая переводит вершины из «мировых» координат в координаты «камеры», а «Проекция» - это матрица, которая переводит вершины из координат «камеры» в «экранные» координаты. Вместе они приносят вершины из «модельных» координат - координат относительно трехмерной модели, к которой они принадлежат, - в «экранные» координаты, где вы намерены растеризовать их в виде треугольников.
Это три разные матрицы, но они умножаются вместе, и результат 4x4 записывается в аппаратные регистры.
Когда буфер вершин должен быть представлен как треугольники, аппаратное обеспечение считывает из вершин как [x, y, z] векторы из памяти и обрабатывает их, как если бы они были [x, y, z, w], где w всегда равен 1. Затем он умножает каждый вектор на матрицу ModelViewProjection 4x4, чтобы получить [x ', y', z ', w']. Если есть перспектива (вы сказали, что ее нет), то мы делим на w ', чтобы получить перспективу [x' / w ', y' / w ', z' / w ', w' / w '].
Затем треугольники растеризуются с недавно вычисленными вершинами. Это позволяет вершинам модели находиться в памяти только для чтения, если это необходимо, хотя модель и камера могут находиться в движении.