2014 dxdy logo

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

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




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


01/09/13
2217
warlock66613 в сообщении #1301653 писал(а):
Если речь о десктопной программе, а не о вебе, то обычно стараются отделить 3D-область от всего остального

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

 Профиль  
                  
 
 Re: На чём писать рисовальную программу?
Сообщение05.04.2018, 03:15 
Заслуженный участник


31/12/15
535
Сейчас в самом первом приближении опишу, что должно получиться.
На экране окно с кнопками и выпадающими меню.
В окне нарисован полупрозрачный шар. Это "эллиптическое пространство". Диаметрально противоположные точки сферы отождествлены -- вылетая из шара наружу, мы тут же влетаем в него с противоположной стороны, перевернувшись вверх ногами.
Плоскости изображаются кусками сфер (находящимися внутри шара), которые пересекают поверхность шара по большим окружностям ("экваторам").
Прямые изображаются кусками окружностей (находящимися внутри шара), пересекающими поверхность шара в диаметрально противоположных точках. Модель конформная, углы в ней настоящие (как бы равноугольная карта эллиптического пространства).
Поскольку эллиптическое пространство устроено как проективное, плоскости (куски сфер) можно задавать четвёрками однородных координат. Вот такой код у меня написан, надо подставить произвольные (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 
Заслуженный участник
Аватара пользователя


01/09/13
2217
george66 в сообщении #1301757 писал(а):
ставить точку внутри шара (в любом месте);

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

 Профиль  
                  
 
 Re: На чём писать рисовальную программу?
Сообщение05.04.2018, 10:26 
Заслуженный участник


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

 Профиль  
                  
 
 Re: На чём писать рисовальную программу?
Сообщение05.04.2018, 11:04 
Заслуженный участник
Аватара пользователя


02/08/11
5493
rockclimber, если так рассуждать, сферы/эллипсы на компьютере вообще нарисовать нельзя — пиксели-то квадратные!

 Профиль  
                  
 
 Re: На чём писать рисовальную программу?
Сообщение05.04.2018, 11:35 
Заслуженный участник
Аватара пользователя


01/08/06
2536
Уфа
Вот тут довольно компактный туториал по OpenGL, однако все обсуждаемые вопросы затрагиваются:
https://bourabai.ru/graphics/OpenGL/

 Профиль  
                  
 
 Re: На чём писать рисовальную программу?
Сообщение05.04.2018, 16:49 
Заслуженный участник


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

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

 Профиль  
                  
 
 Re: На чём писать рисовальную программу?
Сообщение05.04.2018, 17:20 
Заслуженный участник
Аватара пользователя


27/04/09
24456
Уфа
Кстати, когда уж совсем хорошенькие сферы нужны (но их нет), лучше использовать что-то типа https://www.jasondavies.com/maps/random-points (последняя сфера), после чего построить по этим точкам меш; если нужны сферы примерно одного разрешения, можно один раз сгенерировать его и дальше только копировать.

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


01/08/06
2536
Уфа
А чем gluSphere не устраивает?

 Профиль  
                  
 
 Re: На чём писать рисовальную программу?
Сообщение05.04.2018, 18:10 
Заслуженный участник
Аватара пользователя


27/04/09
24456
Уфа
Эффективно там результатом будет то же полигональное приближение (причём самое примитивное, которое по ссылке george66 зовётся «UV sphere»). Для сравнения, в языке описания рендерера POV-Ray (ну и наверняка много где ещё, но вряд ли в API чего-то, касающегося быстрой графики) есть настоящая точная сфера.

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


11/06/12
8693
calm.angel.driven
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 
Заслуженный участник
Аватара пользователя


27/04/09
24456
Уфа
Aritaborian в сообщении #1301904 писал(а):
Хм, упоминание POV-Ray здесь уместно исключительно в контексте «какой софт в принципе чего может», ибо POV-Ray пусть и замечательная штуковина (точнее, была когда-то, сейчас-то разработка, насколько я понимаю, увы, заброшена), но не более, чем визуализатор и никакого интерактива не может по определению, а речь у нас тут идёт всё-таки про интерактив.
Да. Хорошо, что вы сказали это явно. :-)

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

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

 Профиль  
                  
 
 Re: На чём писать рисовальную программу?
Сообщение05.04.2018, 22:53 
Заслуженный участник


31/12/15
535
А что лучше, GTK+ или Qt? "Лучше" в смысле проще и без побочных проблем (если вдруг нельзя его отлаживать с помощью Visual Studio, например)

 Профиль  
                  
 
 Re: На чём писать рисовальную программу?
Сообщение09.04.2018, 01:54 
Заслуженный участник
Аватара пользователя


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

 Профиль  
                  
 
 Re: На чём писать рисовальную программу?
Сообщение11.04.2018, 14:34 


11/04/18
2
Я раньше рисовал на С++) Для меня, плохо понимающего в программировании, было не сложно

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

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



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

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


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

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