OpenGL не определяет концепцию, называемую «выравнивание смещения».Может быть, ваша книга говорит о каком-то производном количестве, но поскольку вы не назвали книгу и не указали ничего больше, чем этот пример, я не могу сказать.
Количество ценности, когда дело касается макета std140,размер (сколько места занимает), выравнивание базы, смещение и шаг массива (очевидно, имеет смысл только для массивов).Выравнивание базы накладывает ограничение на смещение;смещение должно делиться на базовое выравнивание.
vec3
имеет размер 12, поскольку он содержит 3 4-байтовых значения.Он имеет базовое выравнивание 16, потому что в стандарте говорится:
Если элемент является трехкомпонентным вектором, компоненты которого потребляют N базовых единиц оборудования, базовое выравнивание равно 4N.
Смещение элемента вычисляется путем вычисления смещения предыдущего элемента, добавления размера предыдущего элемента и последующего применения базового выравнивания к этому значению.
Итак, учитывая, что scale
имеет смещение 0, размер 4 и выравнивание базы 4, смещение translation
равно 16 (4, округлено до ближайшего выравнивания базы).
Базовое выравнивание и шаг массива rotation
равен 16, потому что стандарт говорит:
Если элемент является массивом скаляров или векторов, базовое выравнивание и шаг массива установленычтобы соответствовать базовому выравниванию одного элемента массива, в соответствии с правилами (1), (2) и (3) и , округленными до базового выравнивания a vec4
.
Акцент добавлен.
Итак,смещение translation
равно 16, а его размер равен 12. Сложите их вместе, и вы получите 28. Чтобы получить смещение rotation
, вы применяете базовое выравнивание rotation
, что дает 32.
Также прекратить использование vec3
с .