Как нарисовать по периметру региона 3D рамку?
От: Melamed Россия  
Дата: 30.11.23 16:09
Оценка:
Есть регион произвольной формы. Необходимо по периметру его нарисовать 3D рамку, чтоб он казался на экране выпуклый.
Заранее благодарен
Re: Как нарисовать по периметру региона 3D рамку?
От: Hоmunculus  
Дата: 30.11.23 16:13
Оценка:
Здравствуйте, Melamed, Вы писали:

M>Есть регион произвольной формы. Необходимо по периметру его нарисовать 3D рамку, чтоб он казался на экране выпуклый.

M>Заранее благодарен

Рисуешь несколько раз разной толщиной пера и с градиентом цвета
Re[2]: Как нарисовать по периметру региона 3D рамку?
От: Melamed Россия  
Дата: 30.11.23 16:22
Оценка:
Здравствуйте, Hоmunculus, Вы писали:

H>Здравствуйте, Melamed, Вы писали:


M>>Есть регион произвольной формы. Необходимо по периметру его нарисовать 3D рамку, чтоб он казался на экране выпуклый.

M>>Заранее благодарен

H>Рисуешь несколько раз разной толщиной пера и с градиентом цвета

А можешь пример тут привести?
Re[2]: Как нарисовать по периметру региона 3D рамку?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 30.11.23 16:24
Оценка:
Здравствуйте, Hоmunculus, Вы писали:

M>>Есть регион произвольной формы. Необходимо по периметру его нарисовать 3D рамку, чтоб он казался на экране выпуклый.

M>>Заранее благодарен

H>Рисуешь несколько раз разной толщиной пера и с градиентом цвета


И лучше через GDI+, через GDI оно будет как дерьмо выглядеть
Маньяк Робокряк колесит по городу
Re[3]: Как нарисовать по периметру региона 3D рамку?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 30.11.23 16:25
Оценка: -1
Здравствуйте, Melamed, Вы писали:

H>>Рисуешь несколько раз разной толщиной пера и с градиентом цвета

M>А можешь пример тут привести?

А курсовую за тебя не сдать?
Маньяк Робокряк колесит по городу
Re[3]: Как нарисовать по периметру региона 3D рамку?
От: Hоmunculus  
Дата: 30.11.23 16:28
Оценка:
Здравствуйте, Melamed, Вы писали:

M>А можешь пример тут привести?


Нет. Я с телефона. Но примерно на псевдо-коде что-то типа

for (int thick = 5; thick>1; thick—-)
{
Canvas.setPenColor(thick*2, thick*2, thick*2);
Canvas.setPenWidth(thick);
path.draw();
}

Это просто для понимания. Это не код.
Рамка будет немного серой и плавно темнеть к самому контуру
Re[4]: Как нарисовать по периметру региона 3D рамку?
От: Hоmunculus  
Дата: 30.11.23 16:31
Оценка: 2 (1)
Здравствуйте, Marty, Вы писали:

M>Здравствуйте, Melamed, Вы писали:


H>>>Рисуешь несколько раз разной толщиной пера и с градиентом цвета

M>>А можешь пример тут привести?

M>А курсовую за тебя не сдать?


Да лан. Помню зарегался на форуме из-за таких же дебильных вопросов по MFC лет пятьсот назад. Мне SchweinDeBurg терпеливо отвечал. До сих пор ему благодарен.
Re[5]: Как нарисовать по периметру региона 3D рамку?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 30.11.23 16:34
Оценка:
Здравствуйте, Hоmunculus, Вы писали:

H>Да лан. Помню зарегался на форуме из-за таких же дебильных вопросов по MFC лет пятьсот назад. Мне SchweinDeBurg терпеливо отвечал. До сих пор ему благодарен.


Раньше мы все были добрее, и было много времени
Маньяк Робокряк колесит по городу
Re[4]: Как нарисовать по периметру региона 3D рамку?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 30.11.23 16:38
Оценка:
Здравствуйте, Hоmunculus, Вы писали:

H>Это просто для понимания. Это не код.

H>Рамка будет немного серой и плавно темнеть к самому контуру

Только толщину не надо менять, если GDI — взять толщину пена в два пикселя, чтобы гарантировано покрывать пиксельные артефакты, и шпарить с шагом в пиксель. Последний шаг сделать однопиксельной ручкой.

Если брать ручку разной толщины, то это просто лишняя работа для GDI, которая на следующем шаге почти вся будет затираться
Маньяк Робокряк колесит по городу
Re[3]: Как нарисовать по периметру региона 3D рамку?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 30.11.23 16:41
Оценка:
Здравствуйте, Marty, Вы писали:

H>>Рисуешь несколько раз разной толщиной пера и с градиентом цвета


M>И лучше через GDI+, через GDI оно будет как дерьмо выглядеть


Я так рисую градиент циркуль, весь круг рисую через GDI, а потом рамку через GDI+, в итоге получается вполне приятно и довольно быстро.

ЗЫ Хотя собаководы вроде не рекомендуют смешивать GDI и GDI+ на одном драв контексте, у меня всё работает (ну, и у тех немногих, кому давал поюзать результат — тоже. Будут проблемы — буду решать).
Маньяк Робокряк колесит по городу
Re[4]: Как нарисовать по периметру региона 3D рамку?
От: Hоmunculus  
Дата: 30.11.23 16:44
Оценка:
Здравствуйте, Marty, Вы писали:

M>ЗЫ Хотя собаководы вроде не рекомендуют смешивать GDI и GDI+ на одном драв контексте, у меня всё работает (ну, и у тех немногих, кому давал поюзать результат — тоже. Будут проблемы — буду решать).


Ну это с точки зрения кода некрасиво. Все равно что половину рисовать на OpenGL, а текст, например, через GDI. Работать будет. Но все стараются так не делать
Re[5]: Как нарисовать по периметру региона 3D рамку?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 30.11.23 17:13
Оценка:
Здравствуйте, Hоmunculus, Вы писали:

M>>ЗЫ Хотя собаководы вроде не рекомендуют смешивать GDI и GDI+ на одном драв контексте, у меня всё работает (ну, и у тех немногих, кому давал поюзать результат — тоже. Будут проблемы — буду решать).


H>Ну это с точки зрения кода некрасиво.


Очень даже красиво. У меня было две отдельных обёртки — над GDI и над GDI+. GDI довольно шустро, но и довольно говёно выглядит. GDI+ выглядит найс, но зело тормоз, и шрифты там рисуются гораздо хуже, чем в простом GDI.
У GDI+ вроде есть флаги, отвечающие за скорость/качество отрисовки, но я что-то не понял, они похоже вообще ни на что не влияют. В итоге, я сделал MultiDC, в котором лежат две обертки, и уже по моему флагу переключаются. В итоге получилось достичь баланс качества отрисовки и скорости отрисовки, управляемый пользователем. Бонусом идёт то, что если я захожу переехать на SDL какой-нибудь, мне не надо будет переписывать весь код, достаточно переписать обёртку.


H>Все равно что половину рисовать на OpenGL, а текст, например, через GDI. Работать будет. Но все стараются так не делать


Нормально. Если шрифты на OpenGL выглядят как говно, то рисовать их будут через GDI. Все так делают. Это жизнь. А кто так не делает, и блюдёт чистоту и красоту, оказываются на помойке.
Маньяк Робокряк колесит по городу
Re[6]: Как нарисовать по периметру региона 3D рамку?
От: Hоmunculus  
Дата: 30.11.23 17:20
Оценка:
Здравствуйте, Marty, Вы писали:

M>А кто так не делает, и блюдёт чистоту и красоту, оказываются на помойке.


Ну, пока не оказался
Правда я такой низко-уровневой графикой и только под Винду лет сто не занимался. На кросс-платформе давно. Кстати, еще один минус вывода графики так как это делаешь ты
Re[7]: Как нарисовать по периметру региона 3D рамку?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 30.11.23 17:28
Оценка:
Здравствуйте, Hоmunculus, Вы писали:

H>Ну, пока не оказался


Ты, скорее всего, делаешь не массовый продукт


H>Правда я такой низко-уровневой графикой и только под Винду лет сто не занимался. На кросс-платформе давно. Кстати, еще один минус вывода графики так как это делаешь ты


Кому минус, а кому и плюс. GDI я довольно хорошо знаю, с GDI+ тоже дело имел, а SDL надо с нуля разбираться (это плюс несколько месяцев, или быстрее, но тогда всё будет плотно завязано на SDL), а если SDL не прокатит потом, но куча кода уже написана, то только страдать. А если есть прокладка в виде ещё одного уровня абстракции, то тут можно хоть как-то накостылить, если что-то пошло не так.

И да, продукт у меня кроссплатформа, хотя пока только под винду. Но в пределе я думаю и веб ассемблю сделать
Маньяк Робокряк колесит по городу
Re[3]: Как нарисовать по периметру региона 3D рамку?
От: Melamed Россия  
Дата: 01.12.23 16:42
Оценка:
Здравствуйте, Marty, Вы писали:

M>Здравствуйте, Hоmunculus, Вы писали:


M>>>Есть регион произвольной формы. Необходимо по периметру его нарисовать 3D рамку, чтоб он казался на экране выпуклый.

M>>>Заранее благодарен

H>>Рисуешь несколько раз разной толщиной пера и с градиентом цвета


M>И лучше через GDI+, через GDI оно будет как дерьмо выглядеть

К сожалению я не работал с GDI+, но работал с DirectX D2. Думаю, используя его осуществить задуманное. Правда это требует минимум Windows 8.1
Re: Как нарисовать по периметру региона 3D рамку?
От: CEMb  
Дата: 04.12.23 06:51
Оценка:
Здравствуйте, Melamed, Вы писали:

M>Есть регион произвольной формы. Необходимо по периметру его нарисовать 3D рамку, чтоб он казался на экране выпуклый.

M>Заранее благодарен

DrawEdge

https://learn.microsoft.com/ru-ru/windows/win32/api/winuser/nf-winuser-drawedge
Re[2]: Как нарисовать по периметру региона 3D рамку?
От: Melamed Россия  
Дата: 04.12.23 09:10
Оценка:
Здравствуйте, CEMb, Вы писали:

CEM>Здравствуйте, Melamed, Вы писали:


M>>Есть регион произвольной формы. Необходимо по периметру его нарисовать 3D рамку, чтоб он казался на экране выпуклый.

M>>Заранее благодарен

CEM>DrawEdge


функция DrawEdge не подходит, так как она рисует прямоугольную рамку, стороны которой параллельны сторонам дисплея. Мне надо сделать 3D криволинейную рамку, в которой одна сторона является дугой окружности

CEM>https://learn.microsoft.com/ru-ru/windows/win32/api/winuser/nf-winuser-drawedge
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.