mirror of
https://github.com/overte-org/overte.git
synced 2025-04-16 00:41:16 +02:00
Merge pull request #14331 from SimonWalton-HiFi/large-avatars-bad-position
Clamp avatar-joint translations that hit the compressed-format limit
This commit is contained in:
commit
dc4b967ff5
1 changed files with 8 additions and 5 deletions
|
@ -9,6 +9,7 @@
|
|||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
|
||||
#include <limits>
|
||||
#include "GLMHelpers.h"
|
||||
#include <glm/gtc/matrix_transform.hpp>
|
||||
#include "NumericalConstants.h"
|
||||
|
@ -43,8 +44,8 @@ const mat4 Matrices::X_180 { createMatFromQuatAndPos(Quaternions::X_180, Vectors
|
|||
const mat4 Matrices::Y_180 { createMatFromQuatAndPos(Quaternions::Y_180, Vectors::ZERO) };
|
||||
const mat4 Matrices::Z_180 { createMatFromQuatAndPos(Quaternions::Z_180, Vectors::ZERO) };
|
||||
|
||||
// Safe version of glm::mix; based on the code in Nick Bobick's article,
|
||||
// http://www.gamasutra.com/features/19980703/quaternions_01.htm (via Clyde,
|
||||
// Safe version of glm::mix; based on the code in Nick Bobic's article,
|
||||
// https://www.gamasutra.com/view/feature/131686/rotating_objects_using_quaternions.php?page=1 (via Clyde,
|
||||
// https://github.com/threerings/clyde/blob/master/src/main/java/com/threerings/math/Quaternion.java)
|
||||
glm::quat safeMix(const glm::quat& q1, const glm::quat& q2, float proportion) {
|
||||
float cosa = q1.x * q2.x + q1.y * q2.y + q1.z * q2.z + q1.w * q2.w;
|
||||
|
@ -76,9 +77,11 @@ glm::quat safeMix(const glm::quat& q1, const glm::quat& q2, float proportion) {
|
|||
|
||||
// Allows sending of fixed-point numbers: radix 1 makes 15.1 number, radix 8 makes 8.8 number, etc
|
||||
int packFloatScalarToSignedTwoByteFixed(unsigned char* buffer, float scalar, int radix) {
|
||||
int16_t twoByteFixed = (int16_t)(scalar * (float)(1 << radix));
|
||||
memcpy(buffer, &twoByteFixed, sizeof(int16_t));
|
||||
return sizeof(int16_t);
|
||||
using FixedType = int16_t;
|
||||
FixedType twoByteFixed = (FixedType) glm::clamp(scalar * (1 << radix), (float)std::numeric_limits<FixedType>::min(),
|
||||
(float)std::numeric_limits<FixedType>::max());
|
||||
memcpy(buffer, &twoByteFixed, sizeof(FixedType));
|
||||
return sizeof(FixedType);
|
||||
}
|
||||
|
||||
int unpackFloatScalarFromSignedTwoByteFixed(const int16_t* byteFixedPointer, float* destinationPointer, int radix) {
|
||||
|
|
Loading…
Reference in a new issue