I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. Where the fear has gone there will be nothing. Only I will remain.
waarom is dat natuurlijk?Feyd-Rautha schreef op dinsdag 16 november 2004 @ 14:20:
Natuurlijk heb ik ervoor gekozen om dat te doen in Java.
Hmm, ik dacht dat het cubic beziers (de standaard beziers dus) waren?TrueType fonts bestaat uit Glyphs die beschreven worden aan de hand van enkele punten. Deze punten beschrijven dan een quadratische B-spline(dit zijn een soort bezier-curves - voor hetgeen wat ik ertoch van versta)
Het waren toch quadratische zei je net? Waarom wil je dan nu ineens n-de graads curves tekenen? Als het goed is zijn de curves zo gepositioneerd dat ze in elkaars verlengde liggen, muv de hoekpunten.Het probleem is nu om n-de graads curves te tekenen zodat er 'n' controlpoints gebruikt kunnen worden, zoals bij TrueType fonts gebruikt wordt.
Bovendien red je het niet met simpelweg tekenen, die beziers definieren slechts de outline van een font. Tenzij dat ook echt is wat je wilt zul je dus een fill algoritme moeten schrijven (niet zo heel erg moeilijk, maar dat betekent dus dat je zelf de curves uit moet rekenen ipv dat je ze gewoon tekent). Beziers zijn an sich vrij simpel uit te rekenen, kwestie van interpoleren over een aantal iteraties
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Inderdaad, mijn eerste post was nogal een beetje vaag. Ik heb net eens die truetype outlines wat beter doorgenomen.TrueType's curves are quadratic B-splines. Each spline is equivalent to a series of quadratic Bézier curves. And each of these is defined by 3 outline control points, rendered by a parametric, quadratic equation hard-coded into the rasterizer.
bron: http://www.truetype.demon.co.uk/ttoutln.htm
Wanneer er meerdere off-curve points na elkaar voorkomen, wordt er een on-curve controlpoint geinterpoleerd zodanig dat we dus terug een quadratische bezier-curve krijgen.
Ik was verward: ik had een editor gedownload waarin er meerdere off-curve controlpoints waren. Maar nu begrijp ik dat er dus een 'onzichtbare' on-curve controlpoints tussen zit.

Ik zal maar eens een goede tutorial zoeken over deze materie. Misschien weet er iemand anders ook een goede...
[ Voor 39% gewijzigd door Feyd-Rautha op 16-11-2004 15:44 ]
I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. Where the fear has gone there will be nothing. Only I will remain.
1
2
3
4
5
6
7
8
9
10
11
12
| Point calcBezier (float t, Point[] controlpoints) { Point[] buf = controlpoints.clone (); int num = buf.length; while (num > 1) { for (int i = 0; i < num - 1; i++) buf[i] = interpolate (buf[i], buf[i + 1], t); num--; } return buf[0]; } |
En voor t geef je natuurlijk een waarde tussen 0 en 1, waarbij 0 het eerste controlpoint oplevert en 1 het laatste
[ Voor 15% gewijzigd door .oisyn op 16-11-2004 15:38 ]
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.