1
Discussions générales / Re : Rapidité des transformations avec SFML
« le: Mars 04, 2016, 06:51:10 pm »
J'ai joué un peu avec les transformations et j'ai fini par faire ça:
Ce code est 2.4x plus rapide que l'ancien, c'est pas mal, mais c'est moins qu'SFML, qui est 6,4x plus rapide
Cependant, il me reste d'autres optimisations à faire concernant d'autres fonctionnalités liées aux sprites.
float angle = -m_rotation * 3.141592654f / 180.f;
float cosine = std::cos(angle);
float sine = std::sin(angle);
float x1 = m_scale.x * cosine;
float y1 = m_scale.y * sine;
float z1 = 0.f;
float w1 = 0.f;
float x2 = m_scale.x * -sine;
float y2 = m_scale.y * cosine;
float z2 = 0.f;
float w2 = 0.f;
float x3 = 0.f;
float y3 = 0.f;
float z3 = 1.f;
float w3 = 0.f;
float x4 = -m_rotationOrigin.x * x1 - m_rotationOrigin.y * -y1 + m_position.x + m_rotationOrigin.x * m_scale.x;
float y4 = -m_rotationOrigin.x * -x2 - m_rotationOrigin.y * y2 + m_position.y + m_rotationOrigin.y * m_scale.y;
float z4 = 0.0f;
float w4 = 1.0f;
m_mvp = glm::ortho(0.0f, (float)screenWidth, (float)screenHeight, 0.0f) *
glm::mat4(x1, y1, z1, w1, x2, y2, z2, w2, x3, y3, z3, w3, x4, y4, z4, w4);
float cosine = std::cos(angle);
float sine = std::sin(angle);
float x1 = m_scale.x * cosine;
float y1 = m_scale.y * sine;
float z1 = 0.f;
float w1 = 0.f;
float x2 = m_scale.x * -sine;
float y2 = m_scale.y * cosine;
float z2 = 0.f;
float w2 = 0.f;
float x3 = 0.f;
float y3 = 0.f;
float z3 = 1.f;
float w3 = 0.f;
float x4 = -m_rotationOrigin.x * x1 - m_rotationOrigin.y * -y1 + m_position.x + m_rotationOrigin.x * m_scale.x;
float y4 = -m_rotationOrigin.x * -x2 - m_rotationOrigin.y * y2 + m_position.y + m_rotationOrigin.y * m_scale.y;
float z4 = 0.0f;
float w4 = 1.0f;
m_mvp = glm::ortho(0.0f, (float)screenWidth, (float)screenHeight, 0.0f) *
glm::mat4(x1, y1, z1, w1, x2, y2, z2, w2, x3, y3, z3, w3, x4, y4, z4, w4);
Ce code est 2.4x plus rapide que l'ancien, c'est pas mal, mais c'est moins qu'SFML, qui est 6,4x plus rapide
Cependant, il me reste d'autres optimisations à faire concernant d'autres fonctionnalités liées aux sprites.