Is sprite transform applied before or after cropping?

Started by
4 comments, last by Aardvajk 10 years, 2 months ago

So if I have a sprite with a rect to crop from the main texture,is the texture cropped and then transformed by the matrix,or the main texture is is transformed and then cropped?

Advertisement

Drawing is done along the scanlines of the framebuffer. Which scanlines and also which span on each of the scanlines are touched depends on the sprite's geometry, i.e. the vertices' positions after transformation to screen space.

For each pixel on a span the belonging texture co-ordinates are computed and used to sample the texture, considering the set filter method (i.e. bi-linear). The resulting color is then used for the pixel.

The mapping between the pixel co-ordinates and the texture co-ordinates can be understood as computing the span in the texture that corresponds to the span in the framebuffer. So, cropping in the usual meaning of image processing is not done at all, although the effect is the same.

I hope I've understood your question correctly.

the rectangular sprite quad is transformed, then clipped to the viewing frustrum. Sections of scan lines in the quad that pass viewing frustum clip are then texture mapped as described above, assuming a z-buf check on the pixel is passed first.

Norm Barrows

Rockland Software Productions

"Building PC games since 1989"

rocklandsoftware.net

PLAY CAVEMAN NOW!

http://rocklandsoftware.net/beta.php

It's worth adding to all of this that a "sprite" is nothing more than a wrapper around vertex buffers, index buffers, textures, states and draw calls, rather than being any kind of separate object type. So it will follow the very same transformation and rasterization rules and any other geometry.

Direct3D has need of instancing, but we do not. We have plenty of glVertexAttrib calls.

I'm sorry but I still don't quite get it:

if i have a big image that contains 4 sprites. And I pass a rect (to crop from it just 1 sprite) and a transform matrix(that i just put into the sprite),will it:

-crop the sprite from the main image, and then transform it

-transform the main image,and the crop the sprite out of it

EDIT: Well as someone said...sprites are made of vertices...so technically,the vertices are transformed first,and then a texture is mapped to them...so the transform would be done first...

Forget about cropping. There is no cropping. Once your vertices are transformed into their screen positions (you'll have four for a sprite, defining two triangles) then each pixel of the triangle is rendered using the rasterizer. As it draws each pixel it will sample the texture at the interpolated texture co-ordinate to get the diffuse colour for that pixel.

I recommend building your own sprite renderer as an exercise, or even for real use. D3DXSprite (I assume you are using) is very general purpose so has overhead you may not need. All you need is an indexed triangle list - four verts for the corners of the sprite with the appropriate texture co-ordinates defined, then an index list creating two triangles from the four verts.

Once you've got your head round this D3DXSprite will make more sense if you choose to go back to it. If you jump straight from old-school sprite approaches into using D3DXSprite I can see how you end up very confused about what it is doing.

This topic is closed to new replies.

Advertisement