#include <iostream>
// Конфигурация проекции 16:9
struct ProjectionConfig {
float targetWidth = 1920.0f; // Базовое разрешение GMS2
float targetHeight = 1080.0f; // Базовое разрешение GMS2
float aspectRatio = 16.0f / 9.0f;
};
// Преобразование координат из GMS2 в OpenGL
float gms2ToOpenGLX(float gmsX, float gmsY, const ProjectionConfig& config = ProjectionConfig()) {
// Нормализация координат GMS2 (0 до 1)
float normalizedX = gmsX / config.targetWidth;
float normalizedY = gmsY / config.targetHeight;
// Преобразование в NDC (-1 до 1) с инверсией Y
float glX = (normalizedX * 2.0f - 1.0f);
float glY = -(normalizedY * 2.0f - 1.0f); // Инвертируем Y ось
// Масштабирование для сохранения 16:9 aspect ratio
glX *= config.aspectRatio;
return glX;
}
// Преобразование координат из GMS2 в OpenGL
float gms2ToOpenGLY(float gmsX, float gmsY, const ProjectionConfig& config = ProjectionConfig()) {
// Нормализация координат GMS2 (0 до 1)
float normalizedX = gmsX / config.targetWidth;
float normalizedY = gmsY / config.targetHeight;
// Преобразование в NDC (-1 до 1) с инверсией Y
float glX = (normalizedX * 2.0f - 1.0f);
float glY = -(normalizedY * 2.0f - 1.0f); // Инвертируем Y ось
// Масштабирование для сохранения 16:9 aspect ratio
glY *= config.aspectRatio;
return glY;
}
int main()
{
std::cout << gms2ToOpenGLY(1, 1);
}