2014 dxdy logo

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

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




На страницу Пред.  1, 2, 3, 4, 5  След.
 
 Re: На чём писать рисовальную программу?
Сообщение04.04.2018, 21:31 
Аватара пользователя
warlock66613 в сообщении #1301653 писал(а):
Если речь о десктопной программе, а не о вебе, то обычно стараются отделить 3D-область от всего остального

Так на вебе тоже самое. И с этой точки зрения, веб-браузер как-раз и есть библиотека (точнее VM; кросс-платформенная) UI-элементов.

 
 
 
 Re: На чём писать рисовальную программу?
Сообщение05.04.2018, 03:15 
Сейчас в самом первом приближении опишу, что должно получиться.
На экране окно с кнопками и выпадающими меню.
В окне нарисован полупрозрачный шар. Это "эллиптическое пространство". Диаметрально противоположные точки сферы отождествлены -- вылетая из шара наружу, мы тут же влетаем в него с противоположной стороны, перевернувшись вверх ногами.
Плоскости изображаются кусками сфер (находящимися внутри шара), которые пересекают поверхность шара по большим окружностям ("экваторам").
Прямые изображаются кусками окружностей (находящимися внутри шара), пересекающими поверхность шара в диаметрально противоположных точках. Модель конформная, углы в ней настоящие (как бы равноугольная карта эллиптического пространства).
Поскольку эллиптическое пространство устроено как проективное, плоскости (куски сфер) можно задавать четвёрками однородных координат. Вот такой код у меня написан, надо подставить произвольные (a,b,c,d) и из сферы единичного радиуса он делает какую-нибудь сферу, пересекающую её по большой окружности:

var xx = a * x + c * z - d * y;
var yy = a * y + d * x - b * z;
var zz = a * z + b * y - c * x;
var tt = Math.sqrt(a * a + b * b + c * c + d * d) + b * x + c * y + d * z;
x = xx / tt;
y = yy / tt;
z = zz / tt;

Прямые буду задавать координатами Плюккера. Все координаты будут задаваться не приближённо, а точно, способ описан здесь
topic116649.html (там также есть красивые картинки)
Математическая часть в голове готова, рисовальная в первом приближении. Труднее придумать интерфейс. Пользователь должен иметь возможность:
1) вращать шар мышью;
2) ставить точку внутри шара (в любом месте);
3) ставить точку на любой плоскости (куске сферы) и двигать её по ней с помощью мыши. Видимо, для этого надо развернуть этот кусок сферы мордой к зрителю;
4) выделять объекты (плоскости, прямые, точки), наводя на них курсор.

Дальше будут кнопки с инструментами, типа "провести прямую через две выбранные точки".

 
 
 
 Re: На чём писать рисовальную программу?
Сообщение05.04.2018, 09:48 
Аватара пользователя
george66 в сообщении #1301757 писал(а):
ставить точку внутри шара (в любом месте);

Кажется, это самое трудное... :mrgreen:

 
 
 
 Re: На чём писать рисовальную программу?
Сообщение05.04.2018, 10:26 
george66 в сообщении #1301757 писал(а):
В окне нарисован полупрозрачный шар.
А что, в OpenGL уже можно сферы/эллипсы рисовать? Когда я немного этим увлекался (в начале 2000-х, использовал Delphi), всем желающим рисовать криволинейные поверхности предлагалось аппроксимировать их треугольниками. Хотя к треугольникам и прилагался ряд лайфхаков, позволяющий заставить их выглядеть круглее.

 
 
 
 Re: На чём писать рисовальную программу?
Сообщение05.04.2018, 11:04 
rockclimber, если так рассуждать, сферы/эллипсы на компьютере вообще нарисовать нельзя — пиксели-то квадратные!

 
 
 
 Re: На чём писать рисовальную программу?
Сообщение05.04.2018, 11:35 
Аватара пользователя
Вот тут довольно компактный туториал по OpenGL, однако все обсуждаемые вопросы затрагиваются:
https://bourabai.ru/graphics/OpenGL/

 
 
 
 Re: На чём писать рисовальную программу?
Сообщение05.04.2018, 16:49 
rockclimber в сообщении #1301784 писал(а):
А что, в OpenGL уже можно сферы/эллипсы рисовать? Когда я немного этим увлекался (в начале 2000-х, использовал Delphi), всем желающим рисовать криволинейные поверхности предлагалось аппроксимировать их треугольниками. Хотя к треугольникам и прилагался ряд лайфхаков, позволяющий заставить их выглядеть круглее.

Да, приближают многогранниками
https://medium.com/game-dev-daily/four- ... 956b825db4

 
 
 
 Re: На чём писать рисовальную программу?
Сообщение05.04.2018, 17:20 
Кстати, когда уж совсем хорошенькие сферы нужны (но их нет), лучше использовать что-то типа https://www.jasondavies.com/maps/random-points (последняя сфера), после чего построить по этим точкам меш; если нужны сферы примерно одного разрешения, можно один раз сгенерировать его и дальше только копировать.

 
 
 
 Re: На чём писать рисовальную программу?
Сообщение05.04.2018, 17:37 
Аватара пользователя
А чем gluSphere не устраивает?

 
 
 
 Re: На чём писать рисовальную программу?
Сообщение05.04.2018, 18:10 
Эффективно там результатом будет то же полигональное приближение (причём самое примитивное, которое по ссылке george66 зовётся «UV sphere»). Для сравнения, в языке описания рендерера POV-Ray (ну и наверняка много где ещё, но вряд ли в API чего-то, касающегося быстрой графики) есть настоящая точная сфера.

 
 
 
 Re: На чём писать рисовальную программу?
Сообщение05.04.2018, 18:42 
Аватара пользователя
arseniiv в сообщении #1301602 писал(а):
Я имел в виду, что если в некоторых случаях (и наверняка это так для обоих) используется другой бэкенд рисования, на командах это никак не сказывается, потому по этим командам, если хочется научиться чему-то насчёт OpenGL, не выйдет
Спасибо, понял; полностью согласен.
arseniiv в сообщении #1301897 писал(а):
Для сравнения, в языке описания рендерера POV-Ray (ну и наверняка много где ещё, но вряд ли в API чего-то, касающегося быстрой графики) есть настоящая точная сфера.
Хм, упоминание POV-Ray здесь уместно исключительно в контексте «какой софт в принципе чего может», ибо POV-Ray пусть и замечательная штуковина (точнее, была когда-то, сейчас-то разработка, насколько я понимаю, увы, заброшена), но не более, чем визуализатор и никакого интерактива не может по определению, а речь у нас тут идёт всё-таки про интерактив. Вот другое дело Wolfram Language. Там тоже есть графический примитив «сфера», который таки можно покрутить туды-сюды.
arseniiv в сообщении #1301897 писал(а):
причём самое примитивное, которое по ссылке george66 зовётся «UV sphere»
Да, приближение, называемое icosphere, получше будет.

 
 
 
 Re: На чём писать рисовальную программу?
Сообщение05.04.2018, 22:15 
Aritaborian в сообщении #1301904 писал(а):
Хм, упоминание POV-Ray здесь уместно исключительно в контексте «какой софт в принципе чего может», ибо POV-Ray пусть и замечательная штуковина (точнее, была когда-то, сейчас-то разработка, насколько я понимаю, увы, заброшена), но не более, чем визуализатор и никакого интерактива не может по определению, а речь у нас тут идёт всё-таки про интерактив.
Да. Хорошо, что вы сказали это явно. :-)

-- Пт апр 06, 2018 00:17:26 --

Тут весь пример как раз в том, что рендерер, которому позволяют быть медленным, заодно может позволить себе быть более «качественным» (и в смысле рейтрейсинга, оптики и колориметрии, и в смысле точности моделей).

 
 
 
 Re: На чём писать рисовальную программу?
Сообщение05.04.2018, 22:53 
А что лучше, GTK+ или Qt? "Лучше" в смысле проще и без побочных проблем (если вдруг нельзя его отлаживать с помощью Visual Studio, например)

 
 
 
 Re: На чём писать рисовальную программу?
Сообщение09.04.2018, 01:54 
george66 в сообщении #1301976 писал(а):
А что лучше, GTK+ или Qt? "Лучше" в смысле проще и без побочных проблем
Известный холивар. Сторонники GTK+ будут доказывать, что и проще и вообще во всём лучше GTK+, сторонники Qt — что проще и лучше Qt. И те и другие будут приводить рациональные аргументы в свою пользу, но это просто рационализация иррационального выбора. Следует полагать, что есть и те, кто действительно сделал выбор рационально, но их всё равно нереально отличить от остальных. Сам я — сторонник GTK+.
george66 в сообщении #1301976 писал(а):
если вдруг нельзя его отлаживать с помощью Visual Studio, например
Вряд ли, почти наверняка и с тем и с другим проблем в этом не будет.

 
 
 
 Re: На чём писать рисовальную программу?
Сообщение11.04.2018, 14:34 
Я раньше рисовал на С++) Для меня, плохо понимающего в программировании, было не сложно

 
 
 [ Сообщений: 64 ]  На страницу Пред.  1, 2, 3, 4, 5  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group