GPUзненно!
GUIзненно!
О, я вижу ты программист, поможешь в утюге накаливатель поменять?
*Чистит контакты терморегулятора наждачкой и отдаёт рабочий утюг охреневшему юзверю*
"Колдун ебучий"
OMG, He's the chosen one!
Кэп?
Типичный Hello World для OpenGL (работа 3D с графикой) - это нарисовать один треугольный полигон.
Я когда графику преподовал, то hello world'ом было создать окно с контекстом, загрузить опенгл профайл и написать в конольку версию.
Там для того, чтобы до треугольника дойти еще нужно столько разных сущностей объяснить. Как вулкан преподовать, я вообще не знаю.
Там для того, чтобы до треугольника дойти еще нужно столько разных сущностей объяснить. Как вулкан преподовать, я вообще не знаю.
Учишься создавать всё с нуля, аки Боженька. Сначала тонна кода только для того, чтобы создать одну точку. Затем три точки. После - соединяешь три точки линиями. Дальше научишься закрашивать полученный контур цветом. Если ты ещё не сдался, то сможешь передвинуть или повернуть этот треугольник. Потом научишься вращать его. И вот где это уже после вращения можно приступать к градиентному треугольнику (учил WebGL, может в обычном немного отличается).
да большое бело юзать babylon.js или amazon lumberyard :)
Я работал только с древним OpenGL версии 1.x и там разницы между отрисовкой точек и отрисовкой градиентного треугольника небыло вообще никакой, кроме того, что поменять константу с GL_POINTS на GL_TRIANGLES. В любом случае, у тебя есть glBegin/glEnd и между ними череда glColor, glVertex. Если ещё задать нормали через glNormal и включить базовое освещение парой комманд, то становится вообще всё красиво. Но потом OpenGL стал сильно усложняться и упарываться по низкоуровневым фичам ради гибкости и скорости, и я отстал и ушёл кодить в другую область.
Самая серьёзная моя разработка на OpenGL 1.x была ещё в вузе много-много лет назад:
Самая серьёзная моя разработка на OpenGL 1.x была ещё в вузе много-много лет назад:
Когда-то очень давно, когда у меня было дохуя времени, интереса и вдохновения, я так и сделал (только до градиента не дошел, по причине ограничений железа). Именно что с нуля (втч и по знаниям. Собсно, благодаря тому и понял как работает тригонометрия) и частично на ассемблере - 3Д-движок, который умел рисовать и вращать в пространстве закрашенные треугольные грани. Потом допилил туда чтение моделек из файлов. Потом - нарисовал модельку самолета, процедурно-генерируемый ландшафт и допилил туда переведенный с языка МК-61 "авиасимулятор" из журнала "Наука и жизнь". Потом вкорячил туда еще немножко ассемблерного кода для чтения портов звуковухи, к которой был подключен самодельный же 4-осевой джойстик.
А потом вышел Microsoft Flight Simulator 2002.
Вот времена были )
А потом вышел Microsoft Flight Simulator 2002.
Вот времена были )
Vulkan преподавать достаточно легко. На первой лекции народу много, а на второй 0. очень просто.
Ох как же жизненно!
- Я знаю Vulkan! Работал с ним 3 года в крупной компании.
- Покажи мне.
- ... а, мне надо заглянуть на StackOverflow...
- Покажи мне.
- ... а, мне надо заглянуть на StackOverflow...
Same shit про Android: вроде пишу под него, но многое пересматриваю в доках/на StackOverflow
Я уже третий год (сначала как хобби) пишу мелкие программки под него и также... Так теперь ещё Kotlin завезли.
Я уже 6 лет пишу не под Андроид, а сам Андроид, а точнее работаю с его графической подсистемой. Приходится как на Джаве дорабатывать Фреймворк, так и на плюсах трогать плюсовые либы, и трогать OpenGL & Vulkan. Работаю на одну крупную компанию. Так что если у вас есть телефон этой компании, и у него баги - возможно это моя вина :)
Т.е. во всех?
Нет, в одной конкретной. Но в какой - не скажу :)
Те. не гугл. Самсунг? Хуавей?
Йотафон?
ах вот ты где сука, я тебя давно искал
бля, охуенно, 8к, 60 фпс - ртх 3090 того стоила
Написал на шейдертое. Все процедурно и сделано в ручную.
Сейчас там первой странице держится, кто хочет может пойти посмотреть
~6 часов кодил
Сейчас там первой странице держится, кто хочет может пойти посмотреть
~6 часов кодил
Ладно, пидоры
Я не буду постить повпрос в первом уровне, ибо автор хуй ответит, но вот тебе как раз сгодится
Допустим я хочу сделать плавный переход из коричневого в синий через плавный розово-желтый через rgb/rgba.
Ткни меня пожалуйста мордочкой в алгоритмы и формулы. По возможности на английском
Это детская мечта, которой даже лебедев позабавился лет 6 спустя после её появления
Я хочу понять суть
Я не буду постить повпрос в первом уровне, ибо автор хуй ответит, но вот тебе как раз сгодится
Допустим я хочу сделать плавный переход из коричневого в синий через плавный розово-желтый через rgb/rgba.
Ткни меня пожалуйста мордочкой в алгоритмы и формулы. По возможности на английском
Это детская мечта, которой даже лебедев позабавился лет 6 спустя после её появления
Я хочу понять суть
Почитай про колор спейсы https://en.wikipedia.org/wiki/Color_space
Блэндить лучше в лаб спейсе https://en.wikipedia.org/wiki/CIELAB_color_space
Вобщем, что тебе нужно? Тебе нужна функия одной переменной (скажем t), которая возвращает все цвета товего градиента, когда t изменяется от 0 до 1.
Интерполировать цвета лучше в CIELAB. Поэтому, находишь коричневый в CIELAB, находишь синий в CIELAB и линейно интерполируешь. Результат конвертишь в rgb.
Если через розово желтый оно не проходит, тогда можно взять квадратичный безье сплайн (https://en.wikipedia.org/wiki/B%C3%A9zier_curve), концы закрепить на коричневом и синем, и добавить среднюю точку где-то около розового
Блэндить лучше в лаб спейсе https://en.wikipedia.org/wiki/CIELAB_color_space
Вобщем, что тебе нужно? Тебе нужна функия одной переменной (скажем t), которая возвращает все цвета товего градиента, когда t изменяется от 0 до 1.
Интерполировать цвета лучше в CIELAB. Поэтому, находишь коричневый в CIELAB, находишь синий в CIELAB и линейно интерполируешь. Результат конвертишь в rgb.
Если через розово желтый оно не проходит, тогда можно взять квадратичный безье сплайн (https://en.wikipedia.org/wiki/B%C3%A9zier_curve), концы закрепить на коричневом и синем, и добавить среднюю точку где-то около розового
я таки знал кого пинать
спасибо, сцуко, утром гляну
правда, спасибо
спасибо, сцуко, утром гляну
правда, спасибо
Да не за что. Я может сейчас даже на шейдертое за 5 мин сделаю. Это конечно же важнее, чем закончить диссер докторской, когда защита меньше чем через месяц
Я кстати защитил докторскую сегодня. Теперь я Doctor of Philosophy in Computer Science
поздравлямс
"квадратичный безье сплайн"
кусочно-линейной обойдется
кусочно-линейной обойдется
Та не, на градиентах производная должна быть непрерывна. Скачки производной пипец как видны
Выше собстевенно видно, что если интерполировать линейно от первого цвета во второй, а потом из второго в третий, получается визуально горб, из за не непрерывности производной
Кому она должна? Никому нет дела до скачка производной.
Ну вот сравни:
http://joyreactor.cc/post/4488678#comment21332063
Вверху производная с скачком, внизу - непрерывна
http://joyreactor.cc/post/4488678#comment21332063
Вверху производная с скачком, внизу - непрерывна
Квадратичный полином скорее всего даст широкую практически однотонную полосу в окрестности экстремума. Обычно ведь многоцветные градиенты просто кусочно-линейными функциями задаются.
Хотя мне в любом случае интересно, что это за цвет такой розово-желтый)
Хотя мне в любом случае интересно, что это за цвет такой розово-желтый)
И то правда. Но моя надежда на то, что
" даст широкую практически однотонную полосу в окрестности экстремума"
не произойдет, если он будет "почти" линией. Небольшие искривления на метрику не должны сильно повлиять.
Ну если влиять будет, тогда нужно добавлять еще одну функцию для того чтобы репараметризировать кривую для сохранения метрики. Я вот даже репорт нашел про то, как это сделать: https://www.geometrictools.com/Documentation/MovingAlongCurveSpecifiedSpeed.pdf
" даст широкую практически однотонную полосу в окрестности экстремума"
не произойдет, если он будет "почти" линией. Небольшие искривления на метрику не должны сильно повлиять.
Ну если влиять будет, тогда нужно добавлять еще одну функцию для того чтобы репараметризировать кривую для сохранения метрики. Я вот даже репорт нашел про то, как это сделать: https://www.geometrictools.com/Documentation/MovingAlongCurveSpecifiedSpeed.pdf
Все ок вышло с полиномом, он визуально от кусочно линейного не сильно отличается, но убирает явный скачок производной
(вверху - кусочно линейноб внизу кривая безье)
(вверху - кусочно линейноб внизу кривая безье)
Мне кажется, стоит ещё цветовое пространство заюзать, в котором яркость нормирована относительно цветовосприятия. Например, LAB. Возможно, вы так и сделали, нет возможности посмотреть код.
Я именно так и сделал. И именно LAB :)
И даже чуть выше об этом написал
И даже чуть выше об этом написал
Яркость меняется, так как я изначально задал три ключевых цвета с разной яркостью. Синий, коричневый и розовый не трудно сделать с одинаковой яркостью
В плане имплементации на GLSL все вообще красиво вышло. Вариант кусочно линейной интерполяции и с помощью безье почти ничем не отличаются
Тут p.x это наш параметр
Функция mix, это встроенная в GLSL функция mix(a, b, t) = a * (t - 1.0) + b * t
Функция mix, это встроенная в GLSL функция mix(a, b, t) = a * (t - 1.0) + b * t
По моим представлениям, должно же быть a * (1.0 - t) + b * t
Или в каком интервале параметр t изменяется?
Или в каком интервале параметр t изменяется?
Там и -0.5 по идее в третьей снизу строчке быть не должно. Видно же, что так правый край совсем не получается нужного синего цвета.
Для честного сравнения, кстати, для безье бы ещё стоило среднюю точку корректировать, поскольку иначе сам colorB в градиенте не появляется.
Для честного сравнения, кстати, для безье бы ещё стоило среднюю точку корректировать, поскольку иначе сам colorB в градиенте не появляется.
интерполируй в HSV, конвертируй в RGB
https://en.wikipedia.org/wiki/HSL_and_HSV
если промежуточный цвет будет не тот, то чтобы плавно пройти через три точки, можно просто квадратное уравнение решить для каждого канала
ну либо сплайнами, как уже выше предлагали, если хочешь заморочиться
https://en.wikipedia.org/wiki/HSL_and_HSV
если промежуточный цвет будет не тот, то чтобы плавно пройти через три точки, можно просто квадратное уравнение решить для каждого канала
ну либо сплайнами, как уже выше предлагали, если хочешь заморочиться
Блин, сорян, ответил то же самое, не дочитав до твоего камента. Но удалять не буду, потому что там ссылочка на мой гит)
Не надо пытаться делать это в RGB. Переводи в HSL, а там уже интерполируй между начальными и конечными значениями компонент цвета. Как гонять между RGB HSL в интернетах уйма информации, но можешь подглядеть у меня на гитхабе и поставить звёздочку https://github.com/NightmareZ/hsl.js (надеюсь, перевести с джаваскрипта на нормальный язык труда не составит).
А ты неплох!
Видать я не успел(
Тут разве нету? https://www.shadertoy.com/browse
Я имел на первой странице среди Hot
На главной среди зафичеренных понятно, что нету
Я имел на первой странице среди Hot
На главной среди зафичеренных понятно, что нету
Нашел. Да ты демон блин) Осталось отклонировать тебя несколько сотен раз и можно будет смотреть векторные аниме в 8к)
Чтобы написать коммент, необходимо залогиниться