2014 dxdy logo

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

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




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


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

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

 Профиль  
                  
 
 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
922
Спасибо, это я уже умею.

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


10/10/18
739
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
922
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
739
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
922
Pavia в сообщении #1365265 писал(а):
george66 в сообщении #1365259 писал(а):
Даже думаю, не рисовать ли мне палочку в геометрическом шейдере с учётом глубины (но тут других проблем возникает много)

И какие?

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

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


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

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


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

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


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

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


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

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

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


29/05/17
791
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, Супермодераторы



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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