fork download
  1.  
  2. #include <iostream>
  3.  
  4. // Конфигурация проекции 16:9
  5. struct ProjectionConfig {
  6. float targetWidth = 1920.0f; // Базовое разрешение GMS2
  7. float targetHeight = 1080.0f; // Базовое разрешение GMS2
  8. float aspectRatio = 16.0f / 9.0f;
  9. };
  10.  
  11. // Преобразование координат из GMS2 в OpenGL
  12. float gms2ToOpenGLX(float gmsX, float gmsY, const ProjectionConfig& config = ProjectionConfig()) {
  13. // Нормализация координат GMS2 (0 до 1)
  14. float normalizedX = gmsX / config.targetWidth;
  15. float normalizedY = gmsY / config.targetHeight;
  16.  
  17. // Преобразование в NDC (-1 до 1) с инверсией Y
  18. float glX = (normalizedX * 2.0f - 1.0f);
  19. float glY = -(normalizedY * 2.0f - 1.0f); // Инвертируем Y ось
  20.  
  21. // Масштабирование для сохранения 16:9 aspect ratio
  22. glX *= config.aspectRatio;
  23.  
  24. return glX;
  25. }
  26.  
  27. // Преобразование координат из GMS2 в OpenGL
  28. float gms2ToOpenGLY(float gmsX, float gmsY, const ProjectionConfig& config = ProjectionConfig()) {
  29. // Нормализация координат GMS2 (0 до 1)
  30. float normalizedX = gmsX / config.targetWidth;
  31. float normalizedY = gmsY / config.targetHeight;
  32.  
  33. // Преобразование в NDC (-1 до 1) с инверсией Y
  34. float glX = (normalizedX * 2.0f - 1.0f);
  35. float glY = -(normalizedY * 2.0f - 1.0f); // Инвертируем Y ось
  36.  
  37. // Масштабирование для сохранения 16:9 aspect ratio
  38. glY *= config.aspectRatio;
  39.  
  40. return glY;
  41. }
  42.  
  43. int main()
  44. {
  45. std::cout << gms2ToOpenGLY(1, 1);
  46. }
Success #stdin #stdout 0s 5328KB
stdin
Standard input is empty
stdout
1.77449