когда надо быстренько, несколькими точками ебануть кривую безье.
// evaluate a point on a bezier-curve. t goes from 0 to 1
static VT bezierAt(VT) (float t, const(VT)[] pts...) if (IsVectorDim!(VT, 2)) {
assert(pts.length == 3 || pts.length == 4); // quadratic or cubic
VT[4][2] xpts;
xpts[0][0..pts.length] = pts[];
int curidx = 0;
foreach (immutable lc; 1..pts.length) {
foreach (immutable idx; 0..pts.length-lc) xpts[1-curidx][idx] = xpts[curidx][idx].lerp(xpts[curidx][idx+1], t);
curidx ^= 1;
}
return xpts[curidx][0];
}
enum BezierPoints = 16;
foreach (immutable int pn; 0..BezierPoints) {
float t = cast(float)pn/cast(float)(BezierPoints-1);
auto pt = bezierAt(t, pt0, pt1, pt2); // you may add pt3 too
drawPixel(pt);
}
и конвертация quadratic в cubic:
VT[4] bezier2cubic(VT) (in auto ref VT v0, in auto ref VT v1, in auto ref VT v2) if (IsVectorDim!(VT, 2)) {
auto np0 = v0+(v1-v0)*2/3;
auto np1 = v2+(v1-v2)*2/3;
return [v0, np0, np1, v2];
}
чего нормального в принципе ожидать от уебанов, которые спеки для биндингов делают вот так: <proto><ptype>Bool</ptype> <name>glXQueryExtension</name></proto> но рядом же: <param>int *<name>errorb</name></param>
ага. рандомный набор хуйни мы выделим в типы, остальное оставим как есть, а указатели тупо снежинками, хуле. эта вот поеботина предлагается для машинного парзинга. как и полагается — одинаково хуёво подходит как для парзинга глазами, так и для парзинга парзером. и вот так у них абсолютно всё.
новое платье короля: Berserker Engine. не забудьте взять supplementary files.
всё вместе превращает второквак в такой себе дум3. менее скучным второквак от этого, конечно, не становится, но ещё разик пройти, разглядывая, как бы оно было, если бы движок д3 появился тогда (и в игру щедро насыпали визуальных свистоперделок, бессмысленно и беспощадно) — вполне можно.
p.s.: не знаю, что он там забыл доложить, но если брать файло с гуглодрайва, то модель квэйкгая поломана до сегфолта. её надо взять из вот отсюда, и конвертнуть все файлы в нижний регистр. в остальном нормально собирается под жмупинус, и вполне работает. кроме xatrix/rogue — для них нету game.so, так что у xatrix, например, не хватает витальных лифтов, а в роге хуй знает.