Git Product home page Git Product logo

Comments (5)

Chlumsky avatar Chlumsky commented on July 20, 2024

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.

Chlumsky avatar Chlumsky commented on July 20, 2024

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.

erich666 avatar erich666 commented on July 20, 2024

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.

Chlumsky avatar Chlumsky commented on July 20, 2024

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.

erich666 avatar erich666 commented on July 20, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.