GLSL / Billboard шейдер, сохранить масштабирование

Я искал в интернете учебники, реализации и помощь. Ничего.

единственное, что я могу найти, это реализации шейдеров billboard, которые устанавливают верхнюю левую матрицу 3x3 mat4 в identity. Это отбрасывает вращение, но эффективно также масштабирование.

есть ли способ сделать рекламный щит, который не выбрасывает (неравномерное) масштабирование?

Примечание: Я не ищу никого, чтобы сделать мою программу для меня. Это просто я не могу разобраться в деталях. Любые указатели в правильном направлении приветствуются.

1 ответов


верхняя левая матрица 3x3 содержит вращение, но также и масштаб. Как вы уже видели, ядерная бомба 3x3 верхнего ядерного оружия. Вы захотите сохранить масштаб, сначала извлекая масштаб из 3x3. Каждый столбец 3x3, взятый как вектор, сообщает вам масштаб в каждом направлении, принимая величину каждого вектора столбца.

Если ваша матрица 4x4

RSX   RSY   RSZ   T
0     0     0     1

тогда масштабные коэффициенты

xScale = ||RSX||
yScale = ||RSY||
zScale = ||RSZ||

сохраните их, а затем создайте новую матрицу 4x4 то, что вы уже делаете, но также включаете масштаб.

xScale 0      0      xT
0      yScale 0      yT
0      0      zScale zT
0      0      0      1