I’ve currently put together a simple multitexture program. I have two questions that I hope someone on this list can help me with.
Is is possible to place a texture in the centre of a polygon? For example, if I have a 5 x 5 square polygon, can I draw a texture in a 1 x 1 square in the centre of the poly but not draw it anywhere else?
I’ve managed to get a simple lightmap working however when I move around the scene it flickers a lot (sometimes it disappears completely!). Why is this happening and is there a way to fix it?
Is is possible to place a texture in the centre of a polygon? For example, if I have a 5 x 5 square polygon, can I draw a texture in a 1 x 1 square in the centre of the poly but not draw it anywhere else?[/b]
Yes, but you’ll have to set up the texcoords accordingly and provide a correct wrap mode.
I’ll be more specific: you need something like CLAMP (or variants) and a border color which ‘clips’ the texture. Another option is to avoid all texture contributions when out of unwrapped texture space thuru a fragment shader.
A similar result could be accomplished thuru multitexturing.
The approaches I suggested you all require the texture to have correct borders - you know how CLAMP works.
YOu can use borders as suggested or you can simply make sure the border of your texture has alpha = 0 and be more broadly and more efficiently supported. Using an alpha test will even kill the fragments.
The flickering is probably caused by zfighting. Make sure you use glPolygonOffset to avoid zfighting, but if both passes are textured I’d have expected fill invariance to work. Oh well, all sorts of state can mess with this on older cards. You could try to use multitexture instead of multipass for your lighting to avoid the flickering.
you need something like CLAMP (or variants) and a border color which ‘clips’ the texture. Another option is to avoid all texture contributions when out of unwrapped texture space thuru a fragment shader.
A similar result could be accomplished thuru multitexturing.
Would it be possible for you to explain this further.