2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Кто-нибудь разбирается в компьютерной графике?
Сообщение01.01.2019, 14:39 
Заслуженный участник


31/12/15
954
Изображение

Можно кликать, картинка увеличится. Длинная тонкая палка вращается в горизонтальной плоскости (палка из двух частей, но это не важно). Удаляющиеся части палки становятся тоньше на вид (а приближающиеся толще), но не плавно, а рывками (на один-два пикселя за каждый рывок), в результате вдоль палки бежит зубчатая волна, получается "телескоп". Различные способы сглаживать края приводят лишь к тому, что вдоль палки бежит гладкая синусоида (что тоже не годится, поскольку палка изображает прямую в некоторой геометрической программе). Есть ли стандартные решения? Или посоветуйте, где спросить.

 Профиль  
                  
 
 Re: Кто-нибудь разбирается в компьютерной графике?
Сообщение01.01.2019, 16:39 


28/07/17

317
Код:
// рисование на форме
void Widget::paintEvent(QPaintEvent *event)
{
    QPainter P(this);

    // сглаживание
    P.setRenderHint(QPainter::Antialiasing);

 Профиль  
                  
 
 Re: Кто-нибудь разбирается в компьютерной графике?
Сообщение01.01.2019, 16:44 
Заслуженный участник


31/12/15
954
Спасибо, это я уже умею.

 Профиль  
                  
 
 Anti-Grain Geometry — Subpixel Accuracy
Сообщение01.01.2019, 16:57 
Аватара пользователя


10/10/18
762
At Home
george66 в сообщении #1365240 писал(а):
Различные способы сглаживать края приводят лишь к тому, что вдоль палки бежит гладкая синусоида (что тоже не годится, поскольку палка изображает прямую в некоторой геометрической программе). Есть ли стандартные решения? Или посоветуйте, где спросить.
Почитайте тут (если ещё не читали): Anti-Grain Geometry — Anti-Aliasing and Subpixel Accuracy.
(Уточнить у автора не получится.)

 Профиль  
                  
 
 Re: Anti-Grain Geometry — Subpixel Accuracy
Сообщение01.01.2019, 17:56 
Заслуженный участник


31/12/15
954
SergeCpp в сообщении #1365250 писал(а):
george66 в сообщении #1365240 писал(а):
Различные способы сглаживать края приводят лишь к тому, что вдоль палки бежит гладкая синусоида (что тоже не годится, поскольку палка изображает прямую в некоторой геометрической программе). Есть ли стандартные решения? Или посоветуйте, где спросить.
Почитайте тут (если ещё не читали): Anti-Grain Geometry — Anti-Aliasing and Subpixel Accuracy.
(Уточнить у автора не получится.)

Кажется, я это видел, но не понял -- это только набор программ или где-то спрятано описание основных идей? Я читал и пробовал всякие методы сглаживания, но результат того не стоит. Даже думаю, не рисовать ли мне палочку в геометрическом шейдере с учётом глубины (но тут других проблем возникает много)

 Профиль  
                  
 
 Re: Кто-нибудь разбирается в компьютерной графике?
Сообщение01.01.2019, 18:21 
Аватара пользователя


31/10/08
1244
george66 в сообщении #1365259 писал(а):
Даже думаю, не рисовать ли мне палочку в геометрическом шейдере с учётом глубины (но тут других проблем возникает много)

И какие?

На вскидку могу предложить следующие решения.
1. Сетку покажите. Думаю стоит её увеличить причем до 2-4 треугольников в среднем на пиксель.
2. Просто возьмите текстуру в 8 раза больше чем экран. Отрисуйте в текстуру и вторым проходом отобразите на билборде вашу текстуру она сожмётся в 8 раза и ступеньки сгладятся.
3. Отключите перспективу оставьте только ортогональную проекцию.
4. Отказаться от сканирования линией в сторону использовать трассировки лучей.

П.С Первый вариант может не сработать. А вот остальные скорее всего все сработают.

 Профиль  
                  
 
 Re: Кто-нибудь разбирается в компьютерной графике?
Сообщение01.01.2019, 18:22 
Аватара пользователя


10/10/18
762
At Home
Основная идея там по ссылке, под Coordinate Units: unlike many other libraries and APIs AGG initially supports Subpixel Accuracy. It means that the coordinates are represented as doubles, where fractional values actually take effect.

 Профиль  
                  
 
 Re: Кто-нибудь разбирается в компьютерной графике?
Сообщение01.01.2019, 18:39 
Заслуженный участник


31/12/15
954
Pavia в сообщении #1365265 писал(а):
george66 в сообщении #1365259 писал(а):
Даже думаю, не рисовать ли мне палочку в геометрическом шейдере с учётом глубины (но тут других проблем возникает много)

И какие?

Дело в том, что вся картинка полупрозрачная и полупрозрачность нелегко согласовать с чем-то ещё. Вот я примерчики выкладывал (открывать Мозиллой)
https://mega.nz/#!WhgSXIIA!-QohSfyl0MQS ... ShLy4SeI5g
Вообще, я всю программу затеял, чтобы "научиться писать пруфчекер" (для геометрических построений), в результате научился рисовать полупрозрачность и теперь учусь сглаживать края, а до пруфчекера ещё неизвестно, когда дойду.

 Профиль  
                  
 
 Re: Кто-нибудь разбирается в компьютерной графике?
Сообщение02.01.2019, 20:10 
Аватара пользователя


07/02/12
1440
Питер
Pavia в сообщении #1365265 писал(а):
Просто возьмите текстуру в 8 раза больше чем экран. Отрисуйте в текстуру и вторым проходом отобразите на билборде вашу текстуру она сожмётся в 8 раза и ступеньки сгладятся
Обычно более чем достаточно в 2-3 раза (по обеим осям). Downscale только нужно сделать качественный, с учетом того, что он кратный - с усреднением, а не интерполяцией. Это самый простой способ, очень эффективный с точки зрения качества, но далеко не самый лучший с точки зрения ресурсов.

 Профиль  
                  
 
 Re: Кто-нибудь разбирается в компьютерной графике?
Сообщение02.01.2019, 21:40 
Аватара пользователя


31/10/08
1244
bondkim137
bondkim137 в сообщении #1365441 писал(а):
Обычно более чем достаточно в 2-3 раза (по обеим осям).

Обычно нет. Все более или менее нормальные программы используют 8. AGG, TrueFont, GDI+ и тд. А так же, AMD и/или nvidia писали, что 4х4 лучше чем 2х2.

И напоследок качественная оценка
https://www.microsoft.com/en-us/researc ... filt95.pdf

 Профиль  
                  
 
 Re: Кто-нибудь разбирается в компьютерной графике?
Сообщение02.01.2019, 22:51 
Аватара пользователя


07/02/12
1440
Питер
Ну тут опять же стоит уточнить область использования. Для шрифтов, особенно при низких разрешениях, недостаточно. Для realtime 3D-рендеринга сцены - обычно достаточно. Ибо 4x4, а тем более 16x16 становится уже очень дорого. Особенно на UltraHD-разрешениях.

 Профиль  
                  
 
 Re: Кто-нибудь разбирается в компьютерной графике?
Сообщение11.01.2019, 01:50 
Заслуженный участник


31/12/15
954
А вот ещё вопрос: можно ли к фреймбуферу прилепить две текстуры - одну простую, другую мультисемплерную? Мне нужно рисовать "одну и ту же картинку" в простую и мультисемплерную текстуры, можно ли это делать за один проход?

 Профиль  
                  
 
 Re: Кто-нибудь разбирается в компьютерной графике?
Сообщение12.01.2019, 19:41 
Заслуженный участник


31/12/15
954
Какая дичь вся эта ваша компьютерная графика! Если в шейдере использовать переменную gl_FragCoord и при этом рисовать в мультисэмпл, рисуется дикая фигня (видимо, растеризатор сходит с ума). Это я пытался сглаживать края, рисуя в мультисэмпл полупрозрачные предметы. Края, притом, сгладились.

 Профиль  
                  
 
 Re: Кто-нибудь разбирается в компьютерной графике?
Сообщение14.01.2019, 00:35 
Аватара пользователя


07/02/12
1440
Питер
george66 в сообщении #1367601 писал(а):
А вот ещё вопрос: можно ли к фреймбуферу прилепить две текстуры - одну простую, другую мультисемплерную? Мне нужно рисовать "одну и ту же картинку" в простую и мультисемплерную текстуры, можно ли это делать за один проход?
Тут я не знаю, не приходилось - на QT я давно крест поставил.
На голом GL лучше в большую текстуру рендерить. И параллельно downscale-ить предыдущую готовую текстуру.

Конкретно такую задачу я никогда не решал, делал похожую - конверсию YUV->RGB с масштабированием на шейдерах в два этапа: сначала конвертировать, потом скейлить. Выгодно было так при скейлинге вверх на большие разрешения, и обе текстуры забирать можно было. Первая техника с retina от apple вообще не справлялась с попиксельной конверсией рядовых видео в шейдерах, только с потексельной - и потом скейлинг в target-пиксели уже без шейдеров.

 Профиль  
                  
 
 Re: Кто-нибудь разбирается в компьютерной графике?
Сообщение31.08.2019, 20:33 
Аватара пользователя


29/05/17
810
george66 в сообщении #1365240 писал(а):
Есть ли стандартные решения? Или посоветуйте, где спросить.

В WebGl + Three.js это решается просто:

а) применяем сглаживание
https://yvital.github.io/Three/

(Оффтоп)

(кстати по этой ссылки можно легко проверить тянет ли ваш мобильный WebGl + anti-aliasing)


б) без сглаживания
https://yvital.github.io/Three-without-anti-aliasing/

Разница всего в одной строчке кода файла script.js

Используется синтаксис Javascript
var renderer = new THREE.WebGLRenderer( { antialias: true } );


и

Используется синтаксис Javascript
var renderer = new THREE.WebGLRenderer( );


В вашем случае, я бы посмотрел в эту сторону:
https://stackoverflow.com/questions/14474259/how-do-i-enable-multisampling-antialiasing-in-opengl-with-qt5. Так же можно задать вопрос на форуме QT.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 23 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group