NvTriStrip

Sorry for those who mightn’t think this is worthy of the advanced forums but I thought I’d try my luck by seeing if I get any more answers on the same topic I posted in Beginner.
What I’d like to know is what’s the reasoning behind the NvTriStripper producing lots of small strips?

From the colour coded strip rendering images I’ve seen, and from my strip results, it produces lots of short strips, where I’d have thought it could easily produce really long strips (eg. on a sphere).

The goal is to use the vertex cache that’s present on most 3D cards.

A good cache optimization is often better than long strips. Which is why NvTriStrip generates relatively small strips as they can be very cache friendly if generated correctly.

I obviously don’t understand how the vertex cache works then. I thought that when you go through drawing an indexed primitive, the vertices are transformed and lit and added to the vertex cache (First In First Out?), so that when/if another index is encountered for a vertex it has already transformed and lit and is still in the vertex cache, it doesn’t have to bother transforming and lighting the new one. Believing this, I didn’t see how this affected the length of the strips.
Please correct me.

That is a correct description of the vertex cache. The size of the cache (how many recently transformed vertices it holds) is “about 12” for a GeForce 2.

If two strips are small enough and share some vertices, then these vertices will still be in the cache while drawing the second strip.
If the strips are too long, it is impossible to effectively use the cache for vertices shared between strips.

Check this page http://users.pandora.be/tfautre/softdev/tristripper/tristripper_nvtristrip.htm
On the 3rd pic (scroll down a bit) the “rainbow effect” shows the drawing order of the strips, and it shows how the cache is used for shared vertices (between strips). It’s particularly obvious on the jaw.
The same pattern can be seen on the 2nd pic, but it’s less obvious.

The cache size of the GeForce 2 is 16, but it’s only effective as a 10 entries cache.

[This message has been edited by GPSnoopy (edited 06-08-2003).]