mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2024-12-29 03:19:44 +00:00
Fix NiUVController UV offset calculations (bug #5995)
This commit is contained in:
parent
131a4665aa
commit
24f4bf9c28
@ -118,6 +118,7 @@
|
||||
Bug #5923: Clicking on empty spaces between journal entries might show random topics
|
||||
Bug #5934: AddItem command doesn't accept negative values
|
||||
Bug #5975: NIF controllers from sheath meshes are used
|
||||
Bug #5995: NiUVController doesn't calculate the UV offset properly
|
||||
Feature #390: 3rd person look "over the shoulder"
|
||||
Feature #832: OpenMW-CS: Handle deleted references
|
||||
Feature #1536: Show more information about level on menu
|
||||
|
@ -282,14 +282,17 @@ void UVController::apply(osg::StateSet* stateset, osg::NodeVisitor* nv)
|
||||
float uScale = mUScale.interpKey(value);
|
||||
float vScale = mVScale.interpKey(value);
|
||||
|
||||
osg::Matrix flipMat;
|
||||
flipMat.preMultTranslate(osg::Vec3f(0,1,0));
|
||||
flipMat.preMultScale(osg::Vec3f(1,-1,1));
|
||||
|
||||
// First scale the UV relative to (0,0),
|
||||
// then offset the UV to change the scaling origin to its center.
|
||||
osg::Matrixf mat = osg::Matrixf::scale(uScale, vScale, 1);
|
||||
mat.setTrans(uTrans, vTrans, 0);
|
||||
|
||||
mat = flipMat * mat * flipMat;
|
||||
float uOffset = 0.5f * (1.f - uScale);
|
||||
float vOffset = 0.5f * (1.f - vScale);
|
||||
// Apply the original offsets:
|
||||
// U offset is supposed to be subtracted regardless of the graphics library,
|
||||
// while V offset is made negative to account for OpenGL's Y axis convention.
|
||||
uOffset -= uTrans;
|
||||
vOffset -= vTrans;
|
||||
mat.setTrans(uOffset, vOffset, 0);
|
||||
|
||||
// setting once is enough because all other texture units share the same TexMat (see setDefaults).
|
||||
if (!mTextureUnits.empty())
|
||||
|
Loading…
Reference in New Issue
Block a user