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?
Is sprite transform applied before or after cropping?
Crossbones+ - Reputation: 6999
Posted 02 March 2014 - 05:20 AM
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.
Edited by haegarr, 02 March 2014 - 05:20 AM.
Crossbones+ - Reputation: 5258
Posted 02 March 2014 - 09:02 PM
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.
Rockland Software Productions
"Building PC games since 1989"
PLAY CAVEMAN NOW!
Crossbones+ - Reputation: 11348
Posted 03 March 2014 - 02:20 AM
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.
It appears that the gentleman thought C++ was extremely difficult and he was overjoyed that the machine was absorbing it; he understood that good C++ is difficult but the best C++ is well-nigh unintelligible.
Members - Reputation: 917
Posted 03 March 2014 - 11:03 AM
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...
Edited by noatom, 03 March 2014 - 11:09 AM.
Crossbones+ - Reputation: 11176
Posted 04 March 2014 - 08:44 AM
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.
Edited by Aardvajk, 04 March 2014 - 08:47 AM.