Подтвердить что ты не робот

Почему Doom3 переключил основные матрицы строк и строк?

Я делаю доблестную попытку вырвать исходный код doom 3. Одна из вещей, на которые я наткнулся, - это класс матриц, используемый во всем остальном решении. Это довольно простой код для подражания, но было принято решение, которое я не смог понять. Они решили смешать Column и Major майоры ряда разных размеров.

  • Матрица 3x3 имеет размер столбца
  • Каждая другая матрица имеет ряд основных значений (я думаю - не проверил их все)

Кто-нибудь знает, почему это решение могло быть принято? Поскольку OpenGL является основным столбцом, я бы подумал, что имеет смысл просто использовать столбце major?

4b9b3361

Ответ 1

Подобно тому, как Оли Чарлворт уже прокомментировал это, можно было бы принять решение улучшить поведение кэширования. Матрицы OpenGL являются столбцами, потому что на стороне клиента вас больше интересуют столбцы, чем строки (столбцы образуют базу системы координат). Если, однако, матрицы используются для вычислений, таких как физика или обнаружение столкновений, многие операции будут значительными. Таким образом, это сильно зависит от вида операций, выполняемых в основном по рассматриваемой матрице. Двигатель Doom3 сильно использует координаты Plücker, поэтому выбор правильной компоновки памяти очень сильно влияет на общую производительность и простой переход между матричным большинством может добавить/удалить значительное количество операций.

Ответ 2

Я могу только догадываться:

Если я правильно помню, матрица преобразования (3x3) - это матрица, которая вам больше всего нужна для OpenGL. Поскольку OpenGL имеет значение столбца, имеет смысл также держать основной столбец внутреннего представления игры, поэтому вам не нужно выполнять дополнительную работу каждый раз, когда вы хотите передать матрицу 3x3 в OpenGL.

Сохранение других основных строк матриц было, вероятно, конструктивным решением. Возможно, они повторно использовали код из других игр, которые уже используют ряд строк, или их программисты просто более комфортно работают с ним. Другая возможность заключается в том, что многие операции, которые они выполняют на других матрицах, преимущественно используют строки вместо столбцов. Таким образом, майор предоставляет вам лучшую схему памяти и более быстрое время доступа. Также может быть, что в форматах файлов они используют матрицы хранения как основные строки.

Это много "может быть" и "если", но это подход, по крайней мере.