Я смотрел на этот материал так долго, что моя голова в размытом оцепенении, но я думаю, что получаю его. Я использую библиотеку матрицы, а матрица имеет свои данные, хранящиеся как:Является ли эта функция строкой?
struct Matrix4{
vec4 x;
vec4 y;
vec4 z;
vec4 w;
..... functions
}
vec4
просто структура с ее данными, как:
T x;
T y;
T z;
T w;
(T
обычно является float
)
ключевой вопрос, вероятно, ответил на это:
Matrix4 operator * (const Matrix4& b) const
{
Matrix4 m;
m.x.x = x.x * b.x.x + x.y * b.y.x + x.z * b.z.x + x.w * b.w.x;
m.x.y = x.x * b.x.y + x.y * b.y.y + x.z * b.z.y + x.w * b.w.y;
m.x.z = x.x * b.x.z + x.y * b.y.z + x.z * b.z.z + x.w * b.w.z;
m.x.w = x.x * b.x.w + x.y * b.y.w + x.z * b.z.w + x.w * b.w.w;
m.y.x = y.x * b.x.x + y.y * b.y.x + y.z * b.z.x + y.w * b.w.x;
m.y.y = y.x * b.x.y + y.y * b.y.y + y.z * b.z.y + y.w * b.w.y;
m.y.z = y.x * b.x.z + y.y * b.y.z + y.z * b.z.z + y.w * b.w.z;
m.y.w = y.x * b.x.w + y.y * b.y.w + y.z * b.z.w + y.w * b.w.w;
m.z.x = z.x * b.x.x + z.y * b.y.x + z.z * b.z.x + z.w * b.w.x;
m.z.y = z.x * b.x.y + z.y * b.y.y + z.z * b.z.y + z.w * b.w.y;
m.z.z = z.x * b.x.z + z.y * b.y.z + z.z * b.z.z + z.w * b.w.z;
m.z.w = z.x * b.x.w + z.y * b.y.w + z.z * b.z.w + z.w * b.w.w;
m.w.x = w.x * b.x.x + w.y * b.y.x + w.z * b.z.x + w.w * b.w.x;
m.w.y = w.x * b.x.y + w.y * b.y.y + w.z * b.z.y + w.w * b.w.y;
m.w.z = w.x * b.x.z + w.y * b.y.z + w.z * b.z.z + w.w * b.w.z;
m.w.w = w.x * b.x.w + w.y * b.y.w + w.z * b.z.w + w.w * b.w.w;
return m;
}
В основной системе с колонками operator*
следует считать, что верхняя строка матрицы слева равна , но не в непрерывной памяти, так как в ней хранится первый элемент каждого столбца. Эта функция явно обрабатывает первую строку левой матрицы (матрицу *this
) как непрерывную, что подразумевает, что это матричная библиотека строк, правда?
После того, как я просмотрел этот материал так долго, я понял, что единственный способ действительно определить, является ли библиотека основным столбцом или строкой-строкой, - это посмотреть, как она обрабатывает умножение в отношении того, как она излагает свои данные ,
Невозможно, чтобы диагностировать мой вопрос, матрица перевода, предоставляемая библиотекой для преобразования 3d-трансляции, помещает данные x, y, z
в окончательный vec4
. Но эти данные могут находиться в этом месте либо в колонке-майоре, либо в строковой системе, так что это, вероятно, тривиальное доказательство.
Рассмотрите эту функцию при написании кода. A * B может использовать только строки из A. Поэтому vec4 должен быть строкой. – johnbakers
@Fellowshee - Q.E.D. Похоже, вы ответили на свой вопрос. –
Я искал подтверждения этого, и ваш ответ показался мне неправильным. – johnbakers