Comments (5)
You're right that this line is terrible and you guessed the intent correctly, but I'm pretty sure the part with adding and subtracting 3 was important because of rounding negative numbers.
from msdfgen.
No, it definitely is supposed to output all three indices (0, 1, 2). Actually, I think your original post is correct (except for the missing parenthesis), negative numbers are no longer an issue when since you removed the +1. I don't really remember why I wrote it that way and didn't bother to simplify it, but I was probably really tired.
from msdfgen.
Sorry, I removed my reply (it was wrong!) and started on a corrected version. Then I just saw your reply.
I've gone round and round on this one. Let's look at what you're taking the "int" of:
int(3+2.875*i/(m-1)-1.4375+.5)
That can certainly be simplified with no loss to:
int(2.875*i/(m-1)+ 3.5 -1.4375)
to
int(2.875*i/(m-1)+ 2.0625)
Note how this value is always going to be a positive value, e.g. if i==0, then the value is 2.0625. This goes to an integer of 2. Three is subtracted, then at the start you add 1 to the color array, so this ends up with an index value of 0. Which is what I'd expect. Note that the weird behavior of "int," that int(-0.99) and int(0.99) both go to 0, doesn't come into play.
Anyway, that's as far as I got when you confirmed your intent. Yes, I entirely get why that code got the way it is, one of those "debug, debug, and debug again, aha, finally got the right formula!" kinds of things. Me, I'm just happy I truly understand it now. Super-minor point, but understanding the intent was the main thing for me. You might not want to touch the code, but a comment would be nice.
from msdfgen.
Alright, since you decided to dissect this particular formula so much, I have also looked at it and believe that now I know exactly how it came to be. This was probably my exact thought process:
OK, I need the values to be symmetrical around one, so it will be best to have the formula return -1, 0, +1 instead of 0, 1, 2, so I just need to change the array to (colors+1)
for that. At this point, I probably came up with some kind of genius graph and equation on paper and got the formula
round(2.875*i/(m-1)-1.4375)
,
which is quite reasonable. Now, I probably didn't want to bring math functions into this, and wasn't sure if C even has round
(still am not), so instead I added 0.5 so that I can simply convert to int, which is like floor
. Then I realized that it won't work for negative numbers, so I added 3 for good measure, only to subtract it after the conversion, and that resulted in the expression you are looking at.
I also remember that I specifically tested this expression for ranges of m
, so after I confirmed that it works as intended, I thought I better not touch it. "Don't fix what ain't broken" is a motto I live by.
from msdfgen.
I thought I better not touch it
Exactly. Like I said, "You might not want to touch the code, but a comment would be nice." And your logic is just about what I thought it was, "we want -1, 0, 1, let's shift the color pointer by 1," etc. and keep working on the formula until it was right.
I'm writing about MSDF a bit in an article about fast and accurate text rendering, referencing your work and other techniques. So I thought I'd "give back" a little, since you so kindly made this code available for distribution. I was simply suggesting an improvement, as it helps anyone (like me) trying to read the code - I had hoped for "oh, adding a comment would be good." I could make a pull request myself, but that seemed overkill for a one-line comment.
BTW, if you ever want to write a paper on improvements you've made, please consider http://jcgt.org, which likes practical work such as this example: http://jcgt.org/published/0006/02/02/ that recently came out there.
from msdfgen.
Related Issues (20)
- Msdf generation fails on symbol with several nested holes HOT 4
- Alpha as input ? HOT 1
- Allow FT_LOAD_DEFAULT in import-font extension HOT 5
- Confusing SignedDistance calculation in QuadraticSegment::signedDistance
- Inverting Y Axis makes uneven baseline HOT 2
- Segfault on Empty Shape
- Chinese character rendering issues HOT 5
- The effect of render small character is not good HOT 2
- Outline effect is not good on some glphys HOT 4
- Failure to import SVG file with empty initial <g> element HOT 4
- Using vcpkg leads to compiler error in VS2022 HOT 4
- Incorrect rendering of SVG with internal path HOT 1
- New release soon? HOT 1
- Call project() after cmake_minimum_required() HOT 6
- Artifact on a certain glyph HOT 4
- SVG with Quadradic path commands generates an SDF instead of MSDF HOT 3
- Multiple character output HOT 1
- Render HOT 2
- SDF from glyph curves? HOT 2
- Cyrillic
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from msdfgen.