views:

243

answers:

7

What's the best way to learn the essentials of geometry (and other types of math) used in drawing/graphics programming - e.g. curves (like bezier curves), transformations, matrices, etc.?

+1  A: 

I found the book 3D Math Primer for Graphics and Game Development very helpful when I was trying to dredge back up all the math I forgot from college.

Dan Story
+2  A: 

I kind of liked my answer to another question on SO so far as instruction books go. Beyond that I'd suggest a good development environment with in-built graphics, perhaps Java with its 2D graphics libraries, perhaps Python equivalents, Processing is worth a look too. And then I'd suggest that you arm yourself with some simple examples to work on and get coding.

High Performance Mark
+1  A: 

Take a look at Kirill Osenkov's Live Geometry...

Live Geometry (http://livegeometry.codeplex.com) is an open-source Silverlight application that lets you create interactive ruler-and-compass constructions and experiment with them. It is a CAD-like educational software for teachers and students that helps visualize and solve geometry problems.

5 min. screencast: Live Geometry overview

Leniel Macaferi
Is this really useful for learning math needed for graphics?
Mike Daniels
Take a look at the source code and you'll see... :)
Leniel Macaferi
A: 

Wikipedia is the best thing that happened to math learning ever. Super easy to dig deeper, or back out if something is too complicated. Start with all those terms you mention, and work from there.

Gregg Lind
+1  A: 

Try the book Geometric Tools for Computer Graphics.

lhf
A: 

I really liked Eric Lengyel's Mathematics for 3D Game Programming and Computer Graphics. Assuming you've been through high school calculus, it can very quickly bootstrap you the rest of the way to the day-to-day math involved in graphics.

Crashworks
A: 

I learned 3D graphics this way:

  1. First, some experimentation.. used trig for rotations, and got a faux 3D effect using a scaled midpoint to center of screen proportional to distance (followed by noticing that the calculation was silly, which led to naively guessing the right way to do it).
  2. Heard about matrices. Got intimidated by them for about a week, followed by working out the rotation math on paper for a specific example. Noticed that I got exactly the same result as the matrix calculation, and pingponged between them to see why. At this point, matrices became to me simply a convenient notation.
  3. Started a 3D engine (real-time, triangle-based). Kept an algebra and geometry textbook with me for the first while, implementing whatever I felt would be useful. (I later had to come back to the book and implement some more)
  4. At that point, I was fairly well on my way with 3D graphics and could learn more online.. until ready to take it to another stage later on.

I don't have much to say about curves, since I haven't done much with curves. For real learning (and more general responsibility for having a plausible shot at making a novel contribution to the field in the long run), I personally am a fan of always first trying something on your own. I did once naively implement a curve by basically extending linear interpolation to another order in the simplest way I could see, and I believe I was told by a coworker it's a quadratic Bezier. Trying stuff on your own often reveals that things are not at all mystical.

guesser