【发布时间】:2019-05-01 03:14:12
【问题描述】:
对不起标题,但我真的不知道如何命名我的问题。 我正在阅读一本 opengl 书中的统一块,我对那里显示的默认 std140 偏移量有点困惑。
layout(std140) uniform TransformBlock
{
//component base alignment | offset | aligned offset
float scale; // 4 | 0 | 0
vec3 translation; // 16 | 4 | 16
float rotation[3]; // 16 | 28 | 32 (rotation[0])
// 48 (rotation[1])
// 64 (rotation[2])
mat4 projection_matrix; // 16 | 80 | 80 (column 0)
// 96 (column 1)
// 112 (column 2)
// 128 (column 3)
} transform;
我知道vec3 的对齐方式 = vec4 的对齐方式 = 32 位。
Scale 是第一个分量,所以偏移量是 0,也是 4 位,所以我很清楚翻译需要在 - 我们称之为 currentPosition - currentPosition + 4。
不过,我不明白为什么翻译的偏移量的对齐方式是 16。
另外,我不清楚为什么旋转的偏移量是 28。
翻译为vec3,表示有3个floats,所以3 * 4 = 12。
我的第一个想法是我们可能想将它四舍五入为a,我不知道它是如何调用的,位值,但是28不是那种值。
与投影矩阵的偏移量相同。
谁能像我是个白痴一样向我解释一下,好吗?
【问题讨论】:
-
"我知道 vec3 = vec4 = 32 位。" 但事实并非如此。
-
@NicolBolas 现在可以了吗?
-
“偏移对齐”到底是什么意思?
-
我不知道,书中没有解释,但我猜它是偏移量四舍五入到2的幂。然而projection_matrix有80个偏移量的对齐方式。
-
偏移 != 对齐