Newsletter: Lowest prices viagra Viagra lowest price Buy cialis uk Buy viagra online cheap Phentermine very cheap Soma bike Phentermine hoodia diet pill Diet online phentermine pill purchase Herbal viagra alternatives Information viagra woman Cheap pharmacy viagra Effects of long term xanax use Viagra high blood pressure Order hydrocodone online Phentermine prescription diet pill Viagra online uk Phentermine with master card Cialis drug for impotence 2005 comment december leave viagra Cleocin Tramadol saturday delivery Viagra dangers Viagra for woman information Anti cialis impotence Phentermine money orders Vicodin prescription Discount phentermine prescription Purchase soma online Xanax photos Phentermine cod delivery Prempro Generic money order viagra Phentermine ionamin canada Cod diet phentermine pill Lexapro and xanax Cod xanax Purchase tramadol Cash on delivery phentermine Meridia vs. Phentermine Cialis levitra viagra compare Vicodin for sale Prescription free viagra Xanax dosage 3mg xanax Lamictal Sample viagra Drug loss phentermine weight Prescription xanax Prescription phentermine with cod payment Buy phentermine without a prescription Phentermine free shipping Information viagra Cialis comparison levitra Generic name viagra Xanax precriptions Free viagra trial Lotrimin Xanax and valium Xanax overnight delivery Free shipping with phentermine order Cyber pharmacy viagra Meridia Viagra online ordering Buy ambien online Meridia side effects Information about street drugs or xanax bars Generic uk viagra Meridia order Generic overnight viagra Phentermine pharmacies online Bob dole viagra Paris france cheep viagra Herbal online viagra Lowest price on phentermine Phentermine diet drug Buy phentermine shipped usps Online viagra Phentermine online consultation Viagra without prescription Comparison levivia viagra Concomitant use of cialis and levitra Viagra herbal Buy phentermine cod Tramadol 100 mg no prescription Xanax photo Buy viagra line Xanax prescription Alprazolam xanax over night Lopid Phentermine by cod Viagra overnight delivery Buy cheap cialis Viagra advertisements Tramadol 50mg Viagra buy in uk online Hydrocodone guaifenesin Tramadol dog Xanax death Xanax american express Buy viagra canada Ambien withdrawal Diet hcl phentermine pill Phentermine in stock ready to ship saturday delivery Pictures of mylan xanax Hydrocodone apap Phentermine from mexico Cheap cialis generic Herbal substitute viagra Vicodin es Celexa phentermine Drug screening phentermine Adipex diet phentermine pill Phentermine weight loss pills Comparisons on online viagra suppliers Dilantin Phentermine blue capules 100 mg viagra Hydrocodone info Cialis vs viagra Drug interaction sibutramine and phentermine Buying phentermine without prescription 50mg generic viagra Adalat Naproxen 37 effects phentermine side Lovastatin Vicodin online Buying vicodin online Lexapro Is klonopin stronger than xanax Cialis information Buy phentermine in the uk Glipizide Phentermine free consultation Cheap phentermine perscription Phentermine hcl Compare viagra price Pharmacy phentermine sister Online pharmacies with doctor consultation for viagra Prozac and phentermine Xanax dosages Phentermine and fast shipping Vicodin picture Xanax depression Next day phentermine 120 tramadol Viagra free pill Generic viagra cialis 25 mg viagra Order cialis uk Atropine Viagra on line Order xanax online Chemical name for viagra Levivia and viagra Xanax uses Tramadol effects Alesse Xanax tablet Xanax overnight Phentermine cod shipping Fda approved phentermine Xanax xr 3 mg Buy canada cialis Prescription weight loss medication phentermine Xanax effects Discount cialis online Cheap tramadol 180 Viagra generico impotencia Amiloride Viagra alternatives uk Buy generic xanax Phentermine from canada Chromium Hydrocodone cough syrup Viagra overnight delivery Xanax withdrawal symptoms Snorting phentermine Hydrocodone ap ap Real phentermine Online pharmacy duromine viagra international Cialis tablet Phentermine forums and chats Phendimetrazine No prescripton phentermine Drug screening phentermine Colon cleanse ambien Order ambien online Soma online Buy online tramadol Phentermine weight loss pill Overnight tramadol Viagrafix corporation Lipitor Veterinary use of tramadol Phentermine us Phentermine online prescriptions Lisinopril with viagra Xanax long term use Buy hydrocodone overnight Alcohol hydrocodone Viagra soft tabs Different types of phentermine Cialis dysfunction erectile levitra viagra Phentermine delivered overnight Phentermine online no prescription Fioricet Buy cheapest online place viagra Saturday delivery cheapest phentermine Filing income tax buy tramadol Phentermine no doctor Phentermine pharmacy cod Cheapest secure delivery cialis uk Drug interactions tramadol elavil Ash of soma Cialis online sales Dog xanax Pulmonary hypertension viagra Xanax on line Cheap tramadol cod No prescription cialis Best viagra prices online Herbal viagra Xanax online prescription Phentermine resident sale virginia Viagra sales uk Viagra xenical Xanax death Does it viagra work Viagra online order guide Cheapest diet phentermine pill Phentermine 37.5 no prescription Viagra patent expiration Cialis info Cheap price on phentermine Free viagra canada Phentermine prescriptions online Viagra for sale Order phentermine cod Viagra story Generic ambien Buy pal pay phentermine using Valium vicodin Ambien cr Best price phentermine Phentermine no rx needed Viagra shelf life Best viagra prices online Fastin phentermine Purchase phentermine Purchase fioricet Fioricet order Cheapest phentermine Buy soma Cheap phentermine perscription Alternative to viagra drug Non prescription phentermine Add link phentermine purchase Phentermine 180 Advair Low price phentermine Cialis review Xanax online overnight Tramadol drug Natural viagra free samples Online phentermine prescriptions Otc viagra How do i stop taking phentermine Female viagra alternative Lowest price viagra Herbal phentermine forum Cialis forums Buy phentermine tablet Viagra generico impotencia Cialis viagra Online consultation phentermine Grapefruit xanax Herbal viagra Buy vicodin without prescription Inform your doctor medication phentermine dose weight Information viagra woman Hydrocodone withdrawal symptom Difference between cialis and viagra Buy viagra online uk 100 mg tramadol How viagra works Buy phentermine with no prescription Clomipramine Viagra info Cialis levitra better Killer pain tramadol Diet online phentermine pill Cheapest phentermine online no prescription Augmentin Get phentermine Blindness viagra Hydrocodone for ibs Hydrocodone effects Stopping xanax Xanax libido Buy cialis soft tabs Ambien side effects Generic cialis uk Viagra dose Xanax pics Oxycontin xanax bars percasettes and lor tabs Buy phentermine online cash on delivery Saturday delivery phentermine Order phentermine online 5 buy online no prescription Diet phentermine pill Fioricet medication Discount phentermine online Generic fioricet Phentermine 37.5&90 $89 mastercard Cialis eli lilly Cialis no prescription Viagra pill picture Cialis online discount Phentermine meridia xenical review Order xanax on line Does phentermine speed up metabolism Fioricet info Phentermine pharmacy cod Phentermine addiction Online xanax prescription Phentermine cod overnight Cialis tablet Cheap diet phentermine pill Soma getting Buy cheapest online viagra Buy cheap no phentermine prescription Cheap viagra canada Tools needed for injecting xanax Buy viagra pill online Buy phentermine prozac Tramadol dosage for dogs Ecotrin Generic viagra online Xanax overnight shipping Generic meridia Cheap viagra pills Phentermine amide Compare generic viagra prices Ephedrine 150 tramadol Urine drug testing of tramadol Alternative to viagra online Prescription order viagra online What is phentermine How long xanax stays in system Tramadol use in dogs Free phentermine prescriptions Generic soma Viagra prescriptions online Drug vicodin Phentermine 15 mgs Cheap phentermine without a prescription Buy viagra in uk Ambien and pregnancy Mastercard phentermine Phentermine hormone Hydrocodone lortab Taking viagra or levivia as a booster for cialis Phentermine on line w&o prescription Cheap tramadol cod free fedex Best cialis price Hyzaar Cheapest phentermine 90 day orders Viagra without a perscription Ambien on line Maxzide Online viagra sales Ssri phentermine heart Free sample prescription for viagra Buy viagra internet Phentermine diet medication Buy online viagra where Mexican phentermine Viagra cheap prescription Buy xanax online without a prescription Picture of generic xanax Good morning viagra commercial Negative side effects of phentermine Diet ingredient phentermine pill Tramadol dosage Appetite suppressants equivelant to phentermine Phentermine and blood in stool Soma addiction Add a link viagra Generic viagra cialis Viagra free pill How long xanax stays in system Nortriptyline Buy xanax no perscription needed amex accepted Is viagra safe for woman Xanax info Cheap tramadol without prescription Cialis new viagra Effects long phentermine side term Vicodin withdrawal Ionamin phentermine Purchase tramadol without a prescription Cialis drug prescription Paris cheep phentermine Viagra tablets Phentermine gynecomastia Hydrocodone info Inexpensive viagra Canada xanax Does phentermine help weight loss Paris france cheep viagra Finasteride 100 phentermine How fast does phentermine work Cialis comparison levivia viagra Order cialis uk Buy phentermine Cialis for woman Diet phentermine Ambien prescription Cheap discount phentermine Phentermine forum Free viagra without prescription Canadian pharmacy phentermine 90 cod count day phentermine How long does xanax stay in your body Tramadol avinza drug interaction Inject xanax Cialis price 5 cheap Kaopectate Cialis viagra Picture of xanax pill Phentermine discount Permax Xanax drug testing Cyber pharmacy phentermine Drug interaction xanax and holy basil Buy cheap fioricet No prescription phentermine free shipping Lowest prices on phentermine Is phentermine addictive How to inject xanax pills Ambien online Physican's desk reference phentermine Phentermine canadian pharmacy Phentermine tablet Phentermine diet pill side effects Amphetamine Afrin Buy viagra 1 Viagra overdose Generic ambien Ambien overnight Tramadol cheap Phentermine hcl side effects Phentermine 37.5mg tablets What does phentermine do to your heart Viagra testimony Order phentermine c o d Cheap prescription viagra Viagra on line uk Best online deal for phentermine Premphase Viagra prescriptions Fda us approved phentermine Order xanax paying cod Buy generic online phentermine Ambien cr dosage Can i buy phentermine anywhere in uk Generic soma Phentermine purchase Buy herbal viagra Female viagra Xanax for anxiety Viagra prescriptions Cialis injury lawyer ohio Phentermine sales What does phentermine look like Phentermine and sibutramine be combined Tramadol prescription Viagra pill picture Xanax next day delivery Mark martin viagra Generic viagra in canada Buy no phentermine prescription Viagra and levivia Erection viagra Phentermine risks Epivir Diet discount phentermine pill No perscription xanax cheap Phentermine hoodia Importing cialis from canada to us Xanax valium Viagra substitutes Buy xanax without prescription Xanax 2mg Fioricet phentermine shipping Cheap phentermine online 37 5 Buy vicodin without prescription 180 phentermine Mexican pharmacy phentermine Phentermine blogging Xanax cod 50mg generic viagra Buy online viagra Phentermine shortage Phentermine fact Compare prices tramadol

Math Debugging

I’ve gotten a late start on this rendering thing.  One of the pieces I’ve been struggling with is math.  I’ve improved quite a bit over the past year and I’m actively educating myself to catch up.  Recently, a friend of mine asked me for some help with a matrix problem.  Here’s what I told him to help him debug (I wish I could go back in time and tell myself this!):

  • If you’ve got a series of matrix multiplications, make all of the terms identity.  Then change each to be a real value one by one.  For example: Let’s say you’re rendering an object with a lot of sub-meshes or sub-objects.  You’d set the subobject’s transforms to identity and the main object’s transform to identity.  This will make everything render on top of each other.  From here, you concentrate on getting the sub-objects transforms correct, then finally work on the main object’s transform.
  • Try creating situations where the results of an equation would be identity.  For example:  When using a shadow map, you need a matrix which transforms a point from camera space to light space.  If the camera and the light have the same transform (and FOV, view distance, etc) then this matrix will be identity.  If you run it through your code and it’s not, you know you’ve got some problems to solve!
  • Pay close attention to what space your source data is in.  If you feed object space points to a function that expects world space points, it’s not going to work!
  • Check out Octave, it’s basically a free version of MATLAB.  You can use this to play with matrices and vectors, probably much quicker than you can do in-engine.

These are just general divide and conquer debugging tips applied to math.  But for a person new to large amounts of math in programming, it can be non-obvious to think about applying those debugging techniques to math problems.  Does anyone out there have their own favorite math debugging tips?

Back to basics: Projection transform

While working on Parallel Split Shadow Maps something that had been tripping me up was calculating the bounding box of a frustum in a light’s clipspace. I need this bounding box in order to scale the projection matrix to look at the piece of the scene that I’m interested in.  I’ve noticed that other people have struggled with this problem as well, so I thought I’d post what I found.

My problem:
So the problem I’m solving is this: Given a frustum in world space, find the bounding box of that frustum in the light’s clip space. My attack was this:

1. Translate each point of the frustum into light space.
2. Using the light’s projection matrix, translate this point into clipspace.
3. Project the point by dividing by the points .w coordinate.
4. Finally, check against the current min/max points (standard bounding box construction).

Which are the correct general steps. The problem is when a point that was one of the bounding boxes min/max points went behind the light, it wasn’t being counted correctly anymore? What gives?

Quick recap of clipspace/projection:

The clip matrix for D3D looks like this:

| xZoom 0 0 0 |
| 0 yZoom 0 0 |
| 0 0 (farPlane + nearPlane)/(farPlane – nearPlane) 1 |
| 0 0 (nearPlane * farPlane)/(nearPlane – farPlane) 0 |

This basically allows for field of view (xZoom/yZoom) and near/far plane clipping. The goal of the matrix above is to scale x,y,z& w coordinates of a point to the values needed to project it to 2d and to provide clipping information. If 0 <= z <= w, then the point is within the near and far planes. This also works for the x & y coordinates by comparing against -w and w.

For my problem, we can simpify this matrix down to this:

| 1 0 0 0 |
| 0 1 0 0 |
| 0 0 1 1 |
| 0 0 0 0 |

Which turns projection into just dividing x & y by z. This is the way most of us did 3d when we were little kids.

The issue was my mental model of projection was wrong. I basically thought of it as a flattening operation. That is true when the points are all in front of the camera, but when points are behind the camera the x & y coordinates will actually get mirrored due to the z coordinate being negative! So if z = -1 then it’s going to flip x & y, duh!

In my case, I needed to use the absolute value of the w to get the number I needed. I doubt this is an issue that will come up often for people, but I just thought I’d share what I learned by repeating smashing my head against this problem. 😉

Here’s the slide-deck that triggered this in my head:

Slide 7 has a great graphic, basically, the red area is the flipped coordinates.

In front of the camera:
untranslated: -10.000000 100.000000 0.000000 1.000000
clipspace: -10.000000 -0.000006 99.909988 100.000000
normalized device coords: -0.100000 -0.000000 0.999100

Behind the camera:
untranslated: -10.000000 -100.000000 0.000000 1.000000
clipspace: -10.000000 0.000006 -100.110016 -100.000000
normalized device coords: 0.100000 -0.000000 1.001100

You can see that behind the camera the x&y coordinates are flipped!

Here’s the code for the above little experiment:

void testProj(Point4F testPt)
MatrixF proj(GFX->getProjectionMatrix());
Con::printf(“untranslated: %f %f %f %f”, testPt.x, testPt.y, testPt.z, testPt.w);
Con::printf(“clipspace: %f %f %f %f”, testPt.x, testPt.y, testPt.z, testPt.w);
testPt.x /= testPt.w;
testPt.y /= testPt.w;
testPt.z /= testPt.w;
Con::printf(“normalized device coords: %f %f %f”, testPt.x, testPt.y, testPt.z);

Point4F inFrontOfCamera(-10.0f, 100.0f, 0.0f, 1.0f);
Point4F behindOfCamera(-10.0f, -100.0f, 0.0f, 1.0f);