LINUX.ORG.RU

Субпиксельные координаты при выводе на экран. Как?

 


0

3

Использую libsdl 1.2.14. Хочу нарисовать на экране квадратик с координатами x = 10.42, y = 12.34. Как это сделать?

Стандартная функция SDL_Blit принимает на вход только целочисленные координаты. На других форумах пишут что субпиксельного вывода можно добиться используя функции OpenGL. Так ли это? Если так, то какие функции надо использовать и как они сочетаются с SDL?

В исходниках SDL 2 нашёл SDL_RenderSetLogicalSize, который вроде как может решить мои проблемы, если сделать логический размер побольше (+ решит проблемы с разными физическими разрешениями экранов). Неужели единственный способ решить эту «проблему» — переходить на эксперементальную версию библиотеки?


Ещё есть малоизвестная функция SDL_SoftStretch, которая может быть может решить твою проблему. Т.е. рисуешь на большей поверхности и уменьшаешь её до нужной.

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

Используй OpenGL и не майся фигнёй.

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

Субпиксельное сглаживание?

Костылик. Подходит только для сложных объектов типа шрифтов, и то не всегда. (А ещё это патент некрософта)

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

(А ещё это патент некрософта)

Запатентовано не само субпиксельное сглаживание, а какой-то конкретный метод и только для шрифтов.

А ещё сверхчувствительные тач-интерфейсы. А ещё повышенный dpi, который сейчас модно называть ретиной - чтобы люди не путались и сразу понимали, что на месте 1 логического пикселя надо нарисовать два-три, а не просто картинку растянуть до появления больших квадратиков.

ТС, используй OpenGL и не майся фигнёй. И не обязательно через SDL.

quiet_readonly ★★★★
()

Вы меня извините конечно, но субпиксельные координаты это какая-то ересь...

На экране есть только «пиксельные» координаты. А всё остальное реализуется через соответствующую математическую модель. Собственно где-то эта модель есть из коробки ( в С# WinForms, Qt, Cairo точно есть ), а где-то её придётся делать вручную.

P.S. За «субпиксельное сглаживание» прибить хочется. Написавший хоть понимает что это такое, как оно работает, когда и зачем используется?

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

Ещё добавлю...

man «Афинные преобразования на плоскости», короче...

anonymous
()

Дэвид Олофсен как то давно написал врапер для SDL, который позволяет без боли использовать OpenGL тому приложению, которое про OpenGL ничего не знает. Врапер называется glSDL.

andreyu ★★★★★
()
Ответ на: комментарий от ei-grad

Спасибо за совет. Попробую рисовать cairoй, а SDL использовать для всего остального...

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

Вы меня извините конечно, но субпиксельные координаты это какая-то ересь...

Они нужны для более плавного движения картинки по экрану, при масштабировании.

а где-то её придётся делать вручную.

Если не использовать при этом фичи OpenGL то здравствуй нагрузка на проц.

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

Они нужны для более плавного движения картинки по экрану, при масштабировании.

Во-первых это всего-лишь дополнение к существующим алгоритмам, перец так сказать, но кроме перца нужна ещё вода и пельмени. Во-вторых - давай пруфлинк, где конкретно и как это применяется.

Если не использовать при этом фичи OpenGL то здравствуй нагрузка на проц.

Абсолютно спорное утверждение. 2+2 это тоже нагрузка на проц.

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

Костылик. Подходит только для сложных объектов типа шрифтов

При перемещении обеспечивает несравненную плавность. Когда-то, судя по всему, beryl такое использовал. Окошки таскались просто фантастически плавно. compiz этому так и не научился.

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

Во-вторых - давай пруфлинк, где конкретно и как это применяется.

Да где угодно это применяется. В графических приложениях. Например, в Крите можно вставить картинку и потаскать/поресайзить ее на субпиксельном уровне (а вот гимп умеет сдвигать слои только с точностью до пикселя). Игры, разумеется. Видеокодеки всякие, которые компенсируют движение на субпиксельном уровне. Алгоритмы машинного зрения разные, работающие на уровне субпикселей. И т.д.

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

Во-вторых - давай пруфлинк, где конкретно и как это применяется.

http://zengl.org/index_ru.html Для 2Д с процедурщиной самое то. Координаты задаются чиcлами типа single.

Абсолютно спорное утверждение. 2+2 это тоже нагрузка на проц.

А ты посчитай получше, сколько таких 2+2 необходимо для маштабирования в реальном режиме времени простыни размером 1280x1024.

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

Во-вторых - давай пруфлинк, где конкретно и как это применяется.

LÖVE 2D — у меня есть опыт использования её и там координаты задаются с точностью до десятой-сотой доли пикселя.

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

Наркоман штоле?!

Гуд, тогда ответь на такие вопросы:

Что такое координаты. В математической аспекте и в аспекте компьютерной 2D графики. ( дать определения с пояснениями и примерами ) Что такое субпиксель. ( дать определение ) Что такое субпиксельные координаты. ( дать определение )

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

Demonstration of the Anti-Aliasing principle with Subpixel Accuracy. The triangle is rendered two times, with its “natural” size (at the bottom-left) and enlarged. To draw the enlarged version there is a special scanline renderer was written (see class renderer_enlarged in the source code). You can drag the whole triangle as well as each vertex of it. Also change “Gamma” to see how it affects the quality of Anti-Aliasing.

http://antigrain.com/demo/index.html
Linux: http://antigrain.com/demo/aa_demo.tar.gz
Win32: http://antigrain.com/demo/aa_demo.zip

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

[kamre писал] «Anti-Aliasing»

[ТС писал] "Субпиксельные координаты при выводе на экран. Как?",«Хочу нарисовать на экране квадратик с координатами x = 10.42, y = 12.34. Как это сделать»

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

anonymous, kamre имеет ввиду именно то, о чём я просил. Наверное я использовал не тот термин?

Мне нужно то, что демонстрируется в демках по ссылкам.

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