|
155 / 9 / 2
Регистрация: 14.08.2019
Сообщений: 771
|
|
Обводка объекта с использованием шейдера01.10.2021, 19:34. Показов 23362. Ответов 180
Метки нет (Все метки)
Есть игра, в которой я могу определить, когда начинает / заканчивает рисоваться нужный мне объект и "внедриться" в нужный момент. Я хочу сделать так, чтобы контур нужного мне объекта обводился. Подобие того что я хочу Вы можете увидеть на прикреплённом изображении.
1. Возможно ли сделать обводку объекта без повторной его отрисовки? (я не знаю как игра рисует объекты, да и это будет сказываться на производительности) 2. Возможно ли сделать это без шейдера и повторной отрисовки? (один человек говорил мне что без шейдера нужно будет рисовать дважды) 3. Как это сделать? (я не прошу написать за меня весь код, однако я очень мало понимаю в шейдерах. У меня есть две "точки" - начало рисования и конец, как и что нужно написать в самом начале чтобы увидеть хоть какие-то изменения и далее уже самому потыкать)
0
|
|
| 01.10.2021, 19:34 | |
|
Ответы с готовыми решениями:
180
Обводка объекта Обводка объекта точками в OpenCV написать программу движущийся графический объект с двумя способоми с использованием статического объекта и с использованием динамического объекта |
| 14.10.2021, 15:29 | |
|
Если ещё сглаживание (samples = 8) поставить, то лучше смотрится. Для сравнения, как было и как стало:
0
|
|
| 14.10.2021, 22:24 [ТС] | |
|
Не по теме: 8Observer8, Как Вы сделали сглаживание?
0
|
|
| 14.10.2021, 23:16 | |||||||
|
Не по теме:
0
|
|||||||
| 15.10.2021, 19:04 [ТС] | |
|
Не по теме: 8Observer8, Эх, фича Qt
0
|
|
|
155 / 9 / 2
Регистрация: 14.08.2019
Сообщений: 771
|
|||||||||||||||||||||
| 15.10.2021, 20:28 [ТС] | |||||||||||||||||||||
|
zayats80888, Я вот не могу понять, почему хвост лошади увеличен не под его текстуру а под какой-то квадрат. Способ использовал старый, не из этого примера.
Глобальные:
0
|
|||||||||||||||||||||
| 16.10.2021, 12:20 | ||
|
Слово "вертексный" - это калька с английского "vertex", что переводится, как "вершина". На русском правильно будет "треугольник состоит из трёх вершин", а не "треугольник состоит из трёх вертексов". В отношении шейдера "вертексный" или "вершинный" - и так и так употребляют, это не является грубой ошибкой и может даже совсем ошибкой не является, но, как мне кажется, более логично писать "вершинный".
0
|
||
|
Модератор
|
||
| 16.10.2021, 12:33 | ||
|
А помимо геометрического шейдера могут быть еще пару шейдеров, причем именно пара, это пара шейдеров тесселяции (по одному не работают), а точнее управления тесселяцией и выполнения тесселяции. Но правда сейчас пара вершинный/фрагментный щейдер не всегда актуальна, на смену им могут придти новая пара меш/фрагментный, где меш шейдер это заменя целой пачки старых шейдеров (вершинный + геометрический + пара тесселяции). И новый необязательный этап конвеера это таск шейдер, идет до меш шейдера. Это правда доступно только на нвидиа тюринг и новее картах. Я не говорю про новые возможности более новых версий opengl. Где шейдерная программа может состоять из 1 шейдера, но при этом шейдер как таковой использовать нельзя, надо как минимум пару (вершинный/вычислительный) назначить пайплайну который и привязывается для отрисовки. Это имхо удобнее, так как не надо плодить пары шейдеров, а можно на ходу перепривязывать. И это еще ближе по концепции современного и актуального апи под названием vulkan. Сейчас многие кто считают Opengl устаревшей и вообще легаси технологиями, тем более что apple вообще хотят удалить поддержку у себя.
1
|
||
| 16.10.2021, 13:20 | |
|
Спасибо, я просто не изучал других шейдеров. У меня видеокарты на ноутбуке и смартфоне не поддерживают Vulkan. Я кроме вершинного и фрагментного шейдеров других шейдеров не изучал и пока точно не собираюсь, потому что времени не будет хватать на более приоритетные для меня задачи.
Мои целевые платформы - это:
0
|
|
|
6353 / 3524 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|||||||||||||||||
| 16.10.2021, 13:59 | |||||||||||||||||
|
Например, у вас фрагментная стадия может собирать из разных шейдеров, в зависимости от опций приложения:
1
|
|||||||||||||||||
| 17.10.2021, 10:17 | |||
|
Добавлено через 15 минут 1 pixel = 1 fragment - это грубый рендер без всякого анти-алиаса ("зубы"). Название "фрагментный" грамотное, а вот "пиксельный" - нет. Шейдер должен шейдить то что ему дали, это совсем необязательно (суб)пиксель
1
|
|||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 17.10.2021, 11:53 | |
|
За 2 недели уже можно было написать свой майнкрафт чисто побегать офлайн с полным контролем всего.
Не проще вместо обводки менять цвет через наложение фильтра? Есть фильтры выделения границ Собеля можно сделать забавный эффект. https://ru.wikipedia.org/wiki/Оператор_Собеля
1
|
|
| 17.10.2021, 23:50 | ||
|
1
|
||
| 18.10.2021, 00:10 | ||||||||||||||||
|
eXpl01TeR, я могу вам показать, как работают шейдеры на примере Qt. Для начала, мы создали пустое окно, где функция glClearColor(0.2f, 0.5f, 0.1f, 1.f) выставляет цвет фона тёмно-зелёным, а glClear(GL_COLOR_BUFFER_BIT) заливает фон заданным цветом. Метод initializeGL() вызывается один раз и в нём находится вызов функции glClearColor, чтобы выставить цвет один раз. Метод paintGL вызывается автоматически каждый раз, когда программе нужно перерисовать клиентскую область окна. Замечу, что ничего подключать не нужно, в Qt всё базовое уже есть. В файл .pro нужно добавить строку "win32: LIBS += -lopengl32", то так:
1
|
||||||||||||||||
| 18.10.2021, 00:21 | ||||||||||||||||
|
Для создания шейдерной программы нужно подключить заголовок:
1
|
||||||||||||||||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 18.10.2021, 13:34 | |
|
_Develop, Вот у вас есть блокировка не только по списку игнора форума но и в браузере десятка людей? Подозреваю он может быть просто социально опасен. Может уже был изолирован вы же не знаете что там за человек. Ворвется на пары в любой универ начнет там рубать всех кто юзает deprecated glut...боже это десятки вузов. А те его примеры слизанные с книги…это ж авторские права, я бы побоялся вылаживать их так. Могут вообще закрыть парю + штраф форуму.
Добавлено через 7 минут eXpl01TeR, Если такие сложности выделить контур объекта можно выделить чисто рамкой как во всех стратегиях или вообще жирной точкой как в читах wallhack.
1
|
|
| 18.10.2021, 13:55 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Заметьте, что для использования функций OpenGL (glClearColor и glClear) я не скачивал и не подключал никаких библиотек, это есть в Qt. Просто покажу элементарную работу шейдеров по рисованию треугольника в 3D пространстве. Если вы знаете, как нарисовать один треугольник, то с помощью множества треугольников можете нарисовать всё что угодно. Воспользуемся матрицами модели, перспективы, вида и модели. Для создания матриц в Qt не нужно скачивать и подключать GLM. Матрицы уже есть в Qt. Подключаем матрицы:
Подключим буфер:
main.cpp
1
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
155 / 9 / 2
Регистрация: 14.08.2019
Сообщений: 771
|
|
| 18.10.2021, 14:41 [ТС] | |
|
8Observer8, Вы так много и подробно всего расписали, я впервые в жизни пожалел что у меня нет Qt
Но принцип я вроде-как понял, спасибо <3
1
|
|
|
155 / 9 / 2
Регистрация: 14.08.2019
Сообщений: 771
|
|
| 19.10.2021, 22:29 [ТС] | |
|
zayats80888, Я таки додумался как можно было бы
Однако данный способ как по мне ужасный по 1. Генерация и удаление list'а на каждого моба КАЖДЫЙ КАДР. 2. Выглядит ужасно. На скриншотах из чита выше используется явно какой-то другой способ. 3. Не на всех модельках корректно работает
0
|
|
|
6353 / 3524 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
|
|
| 19.10.2021, 22:32 | |
|
eXpl01TeR, ну так а что ты способ с фреймбуфером не попробовал?
0
|
|
|
155 / 9 / 2
Регистрация: 14.08.2019
Сообщений: 771
|
|
| 19.10.2021, 22:35 [ТС] | |
|
zayats80888, Он мне показался ещё сложнее чем этот, а я этот очень слабо понимаю.
Добавлено через 52 секунды zayats80888, Но вообще спасибо большое, если бы не ты я бы вообще никакого прогресса не имел. А тут вон уже что умею.
0
|
|
| 19.10.2021, 22:35 | |
|
Создание текста с использованием DrawString и обводка Создать проект, с использованием объекта Timer, перемещение графического объекта по заданной траектории, (прямоугольник, Перемещение объекта по форме с использованием мыши
Поворот объекта с использованием Rigidbody.MoveRotation Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства.
Жизнь действительно предъявляет каждому. . .
|
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
|
Лето уходит
kumehtar 17.08.2026
|
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
|
|
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины".
За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html
Задача: . . .
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|