Fresh

Member
  • Content count

    168
  • Joined

  • Last visited

Community Reputation

122 Neutral

About Fresh

  • Rank
    Member
  1. OK I understand: the bitmap is stretched to fill the entire texture at load time. r.
  2. > thats the magic that happens when you load a non power-of-2 sized image. > Texture dimensions have to be a power of 2. I must not be making myself clear. TextureLoader has somehow sensed that this image will not use its entire texture and has arranged it for me, the user, so that the uv coordinate (1.0, 1.0) maps to the bottom right hand corner of the image and not of the texture. As far as I can tell, the Texture object returned by TextureLoader is an ordinary Texture object, for which I don't see any facility for remapping texture coordinates. So how does the API know to treat texture coordinates across a Texture loaded by TextureLoader specially? Surely somebody must have come across this before... r.
  3. Yes, I agree I can store the percentages of the texture I need to draw for the various sized images I might place in it. The point I was trying to make is that TextureLoader has somehow conveniently mapped your: (1) Left: 0.0f, Top: 0.0f, Right: .586f, Bottom: .651f To: (2) Left: 0.0f, Top: 0.0f, Right: 1.0f, Bottom: 1.0f i.e. to draw the full image loaded by TextureLoader I do not need to worry about the relation between the image size and the texture size. I just draw it with the texture coordinates in (2) and it works. I thought perhaps when I call device.SetTexture(0, texture); that a TextureTransform is setup, doing the above scaling of texture coordinates. But a call to System.Console.WriteLine(device.TextureState[0].TextureTransform.ToString()); informs me that even after setting the texture, transformations of the coordinate transforms are disabled. Does anybody know how TextureLoader achieves this magic? r.
  4. I am using C# and Managed DirectX. Is there a way to tell a texture how texture coordinates map across its surface? Consider the following: texture = TextureLoader.FromFile(dev, "eye.png", 0, 0, 1, 0, Format.Unknown, Pool.Default, Filter.Box, Filter.None, 0); SurfaceDescription sd = texture.GetLevelDescription(0); System.Console.Write("Height: {0}, Width: {1}", sd.Height, sd.Width); eye.png is an image with dimensions of around 600x500. The above code tells me that TextureLoader has given texture a size of 1024x512, which is to be expected. When I render this, the uv coordinate (1.0, 1.0) maps to the far corner of the *image* of the eye (texel 600x500) and not at the far corner of the *texture* (texel 1024x512). Now consider: destTexture = new Texture(dev, 1024, 512, 1, Usage.RenderTarget, Format.X8R8G8B8, Pool.Default); In this case the uv coordinate (1.0, 1.0) will always map to the far corner of the *texture* (texel 1024x512). Given that the images I intend to put in destTexture are not of this size exactly, I would like to be able to change this mapping in the clean way that TextureLoader seems to do. Does anybody know how TextureLoader is changing this mapping, and how I can do it for textures I create myself? Thanks, r.