Shantastika

Shantastika

Пикабушник
3263 рейтинг 216 подписчиков 10 подписок 62 поста 7 в горячем
Награды:
10 лет на Пикабу
21

Когда до выступления на конференции всего 7 часов, пробивает на порисовать.

Когда до выступления на конференции всего 7 часов, пробивает на порисовать. Лето, Сессия, Рисунок, Лось, Пончо

Сидишь такой под "Солнечные дни" группы Кино, и так наваливается...

Давно образ в башке вертелся. Рисунок мой, тег моё.

P.S.: хочу в лето :(

Показать полностью 1
9

Сделай сам (если руки откуда надо)

Сделай сам (если руки откуда надо) Бас, Своими руками, Музыкальные инструменты, Длиннопост

Охайо, Пикабу.

Являюсь счастливым (хотя не факт) обладателем почти не рабочего чехословацкого баса Gala (ниже на мыле фото), который без нервотрепки можно использовать лишь как акустический музыкальный прибор. Всё лязгает, фонит, а восстанавливать смысла нет.

Сделай сам (если руки откуда надо) Бас, Своими руками, Музыкальные инструменты, Длиннопост

И вот, приехав обратно в Москву и оставив инструмент дома, я дико захотел достойный бас. Но так как у студента стипендии даже на еду не хватает, о покупке нового инструмента не может идти и речи. И посему появилась идея запилить себе свой бас.

Ближайшая возможность с достаточным количеством времени появится только летом, однако я уже сейчас начал составлять план своего идеального баса.

Общая концепция намелась сразу: за основу был взят корпус Ibanez Iceman-а (ну нравится мне этот армянский инструмент), составлена примерная схема, высчитаны размеры ладов, "заказана" у деда, работающего на пилораме охранником, древесина. Собираюсь запилить корпус из трёх заготовок, основные технологические ходы из расчета на два хамбакера оставив в средней из них.

Сделай сам (если руки откуда надо) Бас, Своими руками, Музыкальные инструменты, Длиннопост

Вариант с самой мелкой декой отмелся сразу.
Сидя за компом, тут же захотел наваять примерный внешний вид. В случае с полноразмерным корпусом Айсмена получил это:

Сделай сам (если руки откуда надо) Бас, Своими руками, Музыкальные инструменты, Длиннопост

А вот и укороченый вариант с бриджем на границе деки.

Сделай сам (если руки откуда надо) Бас, Своими руками, Музыкальные инструменты, Длиннопост

Так вот, Пикабушечка. Я надеюсь только на прямоту своих рук и правильность расчётов, однако не знаю, где черпать информацию по строительству баса. Если у тебя есть какие-то книжки, которые стоит выкурить перед тем, как приступить, будь добр, поделись со мной, буду очень благодарен.

Показать полностью 4
11

Холодное оружие в Abandoned Lands

Холодное оружие в Abandoned Lands Кровь и бетон, Abandonedlands, Сталкер, Gamedev, Гифка

Ублюдок, мать твою, а ну иди сюда, говно собачье, с дури решил ко мне лезть, ты, засранец вонючий, мать твою, а? Ну иди сюда, попробуй меня трахнуть, я тебя сам трахну, ублюдок, онанист чертов, будь ты проклят; иди, идиот, трахать тебя и всю твою семью, говно собачье, жлоб вонючий, дерьмо, сука, падла; иди сюда, мерзавец, негодяй, гад; иди сюда ты, говно, жопа!

91

Инверсная кинематика (2 сегмента, один эффектор и узел)

Инверсная кинематика (2 сегмента, один эффектор и узел) Кинематика, Gamedev, Программирование, Длиннопост, Abandonedlands

Здорово, народ!

Судя по тому, сколько людей ждёт этот пост, деваться особо некуда.
Как и обещал, рассказываю о том, каким образом проводилось вычисление положения частей рук относительно их крепления к туловищу.

Для начала вообще нужно уяснить, какие данные мы хотим дать игре, чтобы она произвела расчет. У нас всегда есть (по крайней мере, должна быть) х- и y-координата точки крепления руки к телу и длина частей руки. А вот дальше интереснее: если нам дан угол сочленения - то эта прямая кинематика и задача состоит в том, чтобы найти х- и y-координаты кисти воображаемой руки; ну а если даны эти самые координаты - то мы работаем с обратной (инверсной) кинематикой и найти нужно как раз углы, задающие положения сегментов в пространстве.


Как решать?
Для начала d - это расстояние от XY0 до XY1, но с небольшой оговоркой. Нельзя допустить, чтобы d было больше суммы длин наших сегментов, потому что при d равном этой величине мы получим максимально возможный угол - развернутый (180 градусов). Также резонно указать нижнюю границу, модуль разности длин сегментов вполне подойдет.

Инверсная кинематика (2 сегмента, один эффектор и узел) Кинематика, Gamedev, Программирование, Длиннопост, Abandonedlands

Получив а и b, работаем с прямоугольными треугольниками и получаем значения углов в радианах. Для того, чтобы их применить на ручках, остается только перевести их в градусную меру и прибавить к ним отклонение от оси ОХ (расчет углов ведется против часовой стрелки, поэтому чтобы направить ручки вниз, отнимаем их от дефолтных 0 градусов).
Важно: здесь мы никак не задаем ограничение на поворот вокруг XY0.


Для удобства можно вогнать это всё в скрипт:

GML: script get_angle

var x1=argument0, y1=argument1, x2=argument2, y2=argument3, r0=argument4, r1=argument5,
d=median(point_distance(x1, y1, x2, y2), r0+r1, max(r0, r1)-min(r0, r1);
var a, b, dir, angle;
a=(sqr(r0)-sqr(r1)+sqr(d))/(2*d)
b=d-a
dir=point_direction(x1, y1, x2, y2)
angle[0]=-radtodeg(arccos(a/r0)+dir
angle[1]=-radtodeg(arcsin(b/r1))+dir+90;
return angle

GML: вызов скрипта get_angle (пример):

langle=get_angle(xl,yl,xr+lengthdir_x(38, arms_angle),yr+7+lengthdir_y(38, arms_angle)-8,r0,r1);

Возникает вопрос, а какие точки можно использовать в качестве XY1?

Инверсная кинематика (2 сегмента, один эффектор и узел) Кинематика, Gamedev, Программирование, Длиннопост, Abandonedlands

Такой скрипт можно использовать для разных целей.
Вот, допустим, нам нужно, чтобы игрок держал автомат с упором к плечу. В таком случае естественно, что он будет держаться руками на рукоятку и цевье/магазин.
Если упором является плечо, то резонно будет осью считать саму точку упора. Оружие будет вращаться вслед за мышью по этой оси.
Например, для правой руки с координатами крепления rx1,ry1, вызов скрипта будет выглядеть так:

GML: get_angle для правой руки, отрисовка:

rangle=get_angle(xr,yr,xr+lengthdir_x(30, arms_angle),yr+lengthdir_y(30, arms_angle),r0,r1)
Xright=xr+lengthdir_x(r0, rangle[0])*player_xscale;
Yright=yr+lengthdir_y(r0, rangle[0]);
draw_sprite_ext(kombineson[4], 1, Xright, yr+lengthdir_y(l1, rangle[0])+sinready, 1, 1, rangle[1], c_white, 1)
draw_sprite_ext(kombineson[4], 0, xr, yr+sinready, 1, 1, rangle[0], c_white, 1)

Где 30 - это длина в пикселях от плечевого упора до рукоятки, за которую держится кисть.
Что примечательно, левая рука при прибавлении к координатам lx1,ly1 поправки будет ориентироваться на место крепления правой руки, так как ось вращения автомата с самой левой рукой никакой связи, кроме как точки lx2,ly2, не имеет:

GML: get_angle для левой руки, отрисовка:

langle=get_angle(xl,yl,xr+lengthdir_x(38, arms_angle),yr+7+lengthdir_y(38, arms_angle)-8,r0,r1)
Xleft=xl+lengthdir_x(r0, langle[0])*player_xscale;
Yleft=yl+lengthdir_y(r0, langle[0]);
draw_sprite_ext(kombineson[3], 0, xl, yl+sinready, 1, 1, langle[0], c_white, 1)
draw_sprite_ext(kombineson[3], 1, Xleft, Yleft+sinready, 1, 1, langle[1], c_white, 1)

Где 38 - это расстояние от плечевого упора до передней части магазина, к которой и крепится lx2,ly2.


Принципиальных отличий в алгоритме при реализации на других ЯП вроде как нет.
Надеюсь, пост окажется полезным для ваших собственных разработок!

Всем добра и до скорого!

Показать полностью 2
512

Тот трепетный момент, когда заработало.

Тот трепетный момент, когда заработало. Сталкер, Abandonedlands, Инди, Игры

Здорово, мои 35 подписчиков и все остальные!

Засиделся допоздна, но таки смог добить костную анимацию с обратной кинематикой.
Расчет ведет всего скрипт в пять строчек, которому необходимы лишь координаты плеча и кисти и длина частей, остальное всё делает сам (для кого-то мелочь, а для меня - достижение :D).



Нужен ли пост с геометрическим обоснованием и реализацией? Если да, то дайте знать.

Показать полностью
Отличная работа, все прочитано!