Есть такая ф-ция, которая скейлит содержимое рендерера. Scale
Как расчитать оффсет X и Y позиционирования рендерера, чтоб при изменении Z рендерер скейлился относительно центра, а не относительно начала декартовых координат (левого верхнего угла), как это делает он сейчас?
Сообщение отредактировал Alkosha - Пятница, 08 Августа 2014, 14:53
Alkosha, если не ошибаюсь, то сначала всё надо перенести в центр, масштабировать с помощью Scale и вернуть обратно. Перенос в OpenGL 2.0 кажется называется Translate что-то там.. Не помню. В OGL 3.0+ надо будет писать шейдер и переносить с помощью матрицы переноса... Хотя я уверен, что в SDL есть реализация переноса
Добавлено (08.08.2014, 15:04) --------------------------------------------- P.S. Адаптацию картинки под разрешение экрана делаешь?
Чёт всё равно не догоняю. screen->w/2; и screen->h/2; - это значения разрешения экрана ведь. Оно-то у меня и так константное, смысла нет его постонно вычислять при апдейте камеры, так как в итоге всё равно получаю масштабирование относительно левого\верхнего угла.
Меняется масштаб рендерера ( обозванный переменной Z (в диапазоне от 0.1 до 4.0 )). Нужно относительно него (значения Z) как-то расчитать оффсет
Это вообще первый SDL, где не было никаких рендереров с масштабированиями\вращениями\сглаживаниями.
Добавлено (11.08.2014, 18:01) --------------------------------------------- Ещё попробую пошаманить с этим. http://wiki.libsdl.org/SDL_Ren....ruct%29 Предварительно занеся в выводимую текстуру содержимое рендерера.
Добавлено (11.08.2014, 18:05) --------------------------------------------- Правда гонять туда-сюда буффер изображения малость изварщённый вариант, по сравнению с OpenGL-ой функцией смещения glTranslatef. Но аналогов в SDL2 лично я не нашёл.
Добавлено (12.08.2014, 13:42) --------------------------------------------- Мдааа...ужжж.... Оказывается привязка center никак не сказывается на ректангл выводимой текстуры. Она только задёт точку вращения.
Код
a pointer to a point indicating the point around which dstrect will be rotated (if NULL, rotation will be done aroud dstrect.w/2, dstrect.h/2)
и каким образом скейлить текстуру относительно центра? Если например dstrect.w=800*cum.Z; dstrect.h=600*cum.Z;
Как расчитать смещение ? dstrect.x=0 - [?]; dstrect.y=0 - [?];
Добавлено (12.08.2014, 13:44) --------------------------------------------- С таким же успехом можно было бы просто рисовать напрямую в рендерер с некоторым смещением объектов, а затем скейлить. Результат тот же.
Добавлено (12.08.2014, 15:48) --------------------------------------------- Так получилось отцентровать зум.
но чего-то при рендеринге в текстуру не работает фильтрация. Или то я где-то допустил оплошность, пока переделывал под render-to-texture. Ща буду смотреть.
Сообщение отредактировал Alkosha - Вторник, 12 Августа 2014, 13:53
Добавлено (12.08.2014, 16:50) --------------------------------------------- И немножычко оффтопный вопрос. Есть ли прямая поддержка шейдеров на SDL2 ? Или же тут всё так же по старинке OpenGL надо цеплять параллельно ?
Сообщение отредактировал Alkosha - Вторник, 12 Августа 2014, 16:46