quote:
That''s fake EMBM, it uses a simple x/y perpixel offset into the envmap. This can be done on < GF3, but as you noticed, it''s very slow, since it involves a framebuffer readback. It only works on planar surfaces, but looks pretty good if you respect the limitations.
Real EMBM (much better quality and robust on arbitary geometry) needs a perpixel matrix multiply and reflection vector computation. That''s GF3+ only. IIRC, there is a demo somewhere on nVidia''s site that shows the difference between both methods
it just sounds like
"easy, its just a fake embm, so its easy to write a softwarefallback on gf2, but you know, the REAL embm does so much more, a fallback for this is impossible, thats gf3+ only, but the simple x/y perpixeloffset, thats easy.."
oh, and btw, this demo runs smooth on my gf2mx..

what i wanted to say its not important if its now a fake 2d embm or a "real" embm with matrixtransform and reflection is not really much of a topic as its software anyways. and yes the registercombiners are capable of calculating a reflectionvector..
as i say, i''m nitpicking at the moment, but clarifieing stuff is sometimes important

why it looks fake:
lowcolorres. think about it, the whole math is with 8bit per component vectors.. that means the reflected vector can only hit exactly a pixel on the cubemap, nothing between.. GL_LINEAR cannot be used. thats why nvidia invented the HILO texture format for normals, to calculate the reflection at higher precision. but else, you can rotate the whole cubeenvmap and you see that it gets reflected, and well.. what more can you want? you always need a vector for the lookup in a cubemap. so it needs to be the correctly reflected vector..
nvidia demos on gf3 hw don''t look different except more accurate.. thats all..
its not softwarerendering, they don''t use software at all, except that they plot individual pixels with glBegin(GL_POINTS); if you call that software..
its not rendering triangles anymore, but its hw.. and the only way for gf2mx to emulate texture-shader effects in hw. its btw MUCH faster than the softwareemulator from nvidia for the texture-shaders. THAT one you can feel that its software..

how it could be done much faster?
render it into a buffer (the reflected vectors wich are used directly for the lookup), lock this buffer to get the pointer to the data. that data there in is for example rgba with unsigned chars as components. bind this with glTexCoordArray to your array, wich consists of glVertexArray and glTexCoordArray . the vertexarray stores for each vertex (its 256x256 array for a 256x256 screen) the screenpos, the texcoordarray then simply has the lookupvector for the cubemap). draw the array as GL_POINTS.
it could be done quite fast, without any bustransfers and all, fully in hw. i bet we could have 50+ fps then.. (sure, it depends on res, but watching gf3 or gf4 demos smooth on a gf2 on 320x240 would be cool nontheless


"take a look around" - limp bizkit
www.google.com