LINUX.ORG.RU

как решить проблему с маштабированием в sdl?

 


0

1

Например если пользоваться средствами sdl_image, то на разных экранах будет разного размера изображения, если в opengl писать, то нужно ещё уметь правильные координаты получать. Как решить проблему с маштабом?

Под размером ты подразумеваешь метры? В общем виде — никак. В общем виде ты не можешь узнать габариты экрана.

Deleted
()
Ответ на: комментарий от Meyer

Так viewport только обрамляет что показать, то есть с помощью него можно показать только то, что в viewport, а координаты наверное остануться теми же.

u0atgKIRznY5
() автор топика

Например если пользоваться средствами sdl_image, то на разных экранах будет разного размера изображения

x,y,w,h in SDL_Rect в пикселях же задается.

в opengl писать, то нужно ещё уметь правильные координаты получать

Я же тебе написал как. Да и это самому легко «вывести» я записывал размер экрана, координату в gl, координату в пикселях и искал в этом логику. За минуту допереть можно.

linuhs_user
()
Ответ на: комментарий от linuhs_user

Я почему то ещё раз свой код пересмотрел, у меня там немного неправильно сравнение было, а вообще вот как получается - из-за glOrtho система координат отсчитывается от середины. Поэтому, получаю с помощью sdl координаты курсора, потом вот что делаю.

x -= 1024 >> 1;
y -= 600 >> 1;
Я оказывается правильно код писал, только сравнение не то было. Но этот вариант подходит только наверное для 2d графики. И всё работает, начинает кнопка меняться, когда подвожу к краю кнопки, значит размер пикселя на этом экране стандартный, нужно проверить как будет на большом экране.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от u0atgKIRznY5

Но этот вариант подходит только наверное для 2d графики

Для выделения 3D объектов можно написать такое... Рисуем разными цветами 3д объекты, смотрим какой цвет под мышкой и сверяем...

Entity_t ent[ENT_MAX];
int GetSelectedEntity(int x, int y) {
  glClear();
  glClearColor(Установи такой чтоб с id не пересекалось);
  glEnableColor(); 
  glDisableTextures(); 
  for(int i = 0;i != ENT_MAX;i++) {
    uint8_t* color = &i;
    glColor3ub(color[3], color[2], color[1]);
    DrawEntity(ent[i]);
  }
  Color_t cl = GetPixelOnScreenColor(x, y);
  int ent_id = 0;
  uint8_t* color = &ent_id;
  color[3] = cl.red;
  color[2] = cl.green;
  color[1] = cl.blue;

  glEnableTextures();
  glDisableColors();
  return(ent_id);
}

linuhs_user
()
Последнее исправление: linuhs_user (всего исправлений: 2)

Например если пользоваться средствами sdl_image, то на разных экранах будет разного размера изображения

не будет, в SDL2 для этого есть SDL_Renderer + SDL_RenderCopyEx, которым вам надо научиться пользоваться.

anonymous2 ★★★★★
()
Ответ на: комментарий от anonymous2

И в чём прикол, SDL_RenderCopyEx нежун для поворота изображения. Такой чуши я давно не видел, чтобы мне советовали хрень. Если я нарисую изображение на 1024x600, то оно будет занимать такую то часть экрана, если я нарисую это же изображение на 1920x1080, то оно будет занимать меньшую часть экрана чем на 1024x600.

Так что если уверен что ты прав, то пиши в подробностях, как сделать, чтобы на разных экранах изображения занимали одинаковые площади.

u0atgKIRznY5
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.