Graphics/Sprite: Add Origin parameter

Allows you to change center of translation/rotation/scale


Former-commit-id: c5e8b3cf4b67e8a2765a4f0984d08bda3d1dc0ec [formerly 20f58bfa832c85f4837f325c3d74b0eef264b2bf] [formerly 830cae0d17c4cef7b538734d6cfe83539689dab3 [formerly 4dc889bfa34a04c59844969bb0d6b08599c1189a]]
Former-commit-id: 949b6b78762b7b804e357ee5b3afe35456fd7f2d [formerly 92beb7207e1271941f4053255091d32806a19e9b]
Former-commit-id: 5b1d9b37251f0bc3be87aef0ef0c3252ff82b4d0
This commit is contained in:
Lynix
2016-08-31 20:53:27 +02:00
parent 280bf97ba9
commit 3755fc2487
3 changed files with 44 additions and 6 deletions

View File

@@ -39,7 +39,9 @@ namespace Nz
void Sprite::MakeBoundingVolume() const
{
m_boundingVolume.Set(Vector3f(0.f), m_size.x*Vector3f::Right() + m_size.y*Vector3f::Down());
Vector3f origin(m_origin.x, -m_origin.y, m_origin.z);
m_boundingVolume.Set(-origin, m_size.x*Vector3f::Right() + m_size.y*Vector3f::Down() - origin);
}
/*!
@@ -57,20 +59,22 @@ namespace Nz
SparsePtr<Vector3f> posPtr(&vertices[0].position, sizeof(VertexStruct_XYZ_Color_UV));
SparsePtr<Vector2f> texCoordPtr(&vertices[0].uv, sizeof(VertexStruct_XYZ_Color_UV));
Vector3f origin(m_origin.x, -m_origin.y, m_origin.z);
*colorPtr++ = m_color;
*posPtr++ = instanceData->transformMatrix->Transform(Vector3f(0.f));
*posPtr++ = instanceData->transformMatrix->Transform(Vector3f(-origin));
*texCoordPtr++ = m_textureCoords.GetCorner(RectCorner_LeftTop);
*colorPtr++ = m_color;
*posPtr++ = instanceData->transformMatrix->Transform(m_size.x*Vector3f::Right());
*posPtr++ = instanceData->transformMatrix->Transform(m_size.x*Vector3f::Right() - origin);
*texCoordPtr++ = m_textureCoords.GetCorner(RectCorner_RightTop);
*colorPtr++ = m_color;
*posPtr++ = instanceData->transformMatrix->Transform(m_size.y*Vector3f::Down());
*posPtr++ = instanceData->transformMatrix->Transform(m_size.y*Vector3f::Down() - origin);
*texCoordPtr++ = m_textureCoords.GetCorner(RectCorner_LeftBottom);
*colorPtr++ = m_color;
*posPtr++ = instanceData->transformMatrix->Transform(m_size.x*Vector3f::Right() + m_size.y*Vector3f::Down());
*posPtr++ = instanceData->transformMatrix->Transform(m_size.x*Vector3f::Right() + m_size.y*Vector3f::Down() - origin);
*texCoordPtr++ = m_textureCoords.GetCorner(RectCorner_RightBottom);
}