Advertisement Jump to content
Sign in to follow this  

How would I go about stretching a quad-ish area in a texture over a whole quad?

This topic is 4207 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Part 1:

Say that I have a texture like so: (obviously the colours won't be like that, but the diagram is coloured that way for easy understanding) I also have the 4 vertices of that "inner" quad in world space. Now, how would I go about "stretching" the inner quad's contents, as found in that texture, onto a whole quad?

Part 2:

The bad part is that the "inner" quad won't necessarily be fully inside the texture, as so: So, how would I go about getting "what I have" to stretch correctly? I don't really mind what happens to the part of the quad which is off the screen - it can be garbage, a single colour, anything, really. But I'm looking that for the part of the quad that IS seen, that part of the real quad I'm trying to texture is correct... Ideas? Thanks in advance!

Share this post

Link to post
Share on other sites
Hm... Anyone have any ideas?

I thought of getting the positions of the vertices in screen space, then using them as texture coordinates, but that doesn't work quite right. Especially when part of the quad is off-screen, and part is on-screen.

Share this post

Link to post
Share on other sites
Split the quad against the screen (i.e. clip it), and recalculate the screen coordinates to map it to.
e.g. in the example you have there, first split the source quad:
source quad = vertices s0, s1, s2, s3
Say it splits on edges s0-s1 and s2-s3, the new vertices created (v0 on edge s0-s1 and v1 on edge s2-s3) will be some fraction along the vectors of their edges. You take those fractions and use them to interpolate along the corrisponding edges of the target quad.
Say the fraction along s0-s1 that v0 occurs is f0 (i.e. f0 = (v0-s0)/(s1-s0)), and s0-s1 maps to the target edge t0-t1 then the new target coordinate is f0*(t1-t0).
If during the clipping it was s0 that fell outside the clip region then you replace t0 with the new coordinate, otherwise replace t1.
Hope this makes sense!

/edit, corrected silly math mistake.

[Edited by - bluntman on July 14, 2007 9:57:58 PM]

Share this post

Link to post
Share on other sites
Sign in to follow this  

  • Advertisement

Important Information

By using, you agree to our community Guidelines, Terms of Use, and Privacy Policy. is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!