Почему Doom3 переключил основные матрицы столбцов и строк? - PullRequest
12 голосов
/ 21 декабря 2011

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

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

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

Ответы [ 2 ]

10 голосов
/ 21 декабря 2011

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

1 голос
/ 21 декабря 2011

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...