Edit(Nov. 25, 07): There is a newer version of VAtlas with support for colour keying and tile sheets, VAtlas 0.3. Also for anyone looking for help, please PM me, do not e-mail me or comment on this journal entry, I won't see it.
Download VAtlas 0.2
VAtlas 0.1 (incase of problems with 0.2)
results:
For volume textures the output is always in DDS format, but I added the ability to export PNGs for single textures for you non-Direct3D infidels. Only problem is Direct3D will only output 24-bit PNGs, oh well. If you want 32-bit PNGs, you'll have to convert the DDS files yourself.
I would appreciate it(read: giant rate++) if people could give it a try and report any possible errors. Read the readme file first though. Also you'll need .Net 2.0 and Managed DirectX installed.
MDX and volume textures
There seems to be very little information on volume textures out there, especially concerning MDX. So here is how to create a custom vertex format that will use the Tw coordinate in MDX.
public struct CustomVertex { public float X; public float Y; public float Z; public float Tu; public float Tv; public float Tw; public static readonly Direct3D.VertexFormats Format; public static readonly Direct3D.VertexElement[] Declarator = new Direct3D.VertexElement[] { new Direct3D.VertexElement( 0, 0, Direct3D.DeclarationType.Float3, Direct3D.DeclarationMethod.Default, Direct3D.DeclarationUsage.Position, 0 ), new Direct3D.VertexElement( 0, 12, Direct3D.DeclarationType.Float3, Direct3D.DeclarationMethod.Default, Direct3D.DeclarationUsage.TextureCoordinate, 0 ), Direct3D.VertexElement.VertexDeclarationEnd }; public static readonly int StrideSize = Direct3D.VertexInformation.GetDeclarationVertexSize( Declarator, 0 ); static CustomVertex() { Format = Direct3D.VertexInformation.FormatFromDeclarator( Declarator ); return; } public CustomVertex( float X, float Y, float Z, float Tu, float Tv, float Tw ) { this.X = X; this.Y = Y; this.Z = Z; this.Tu = Tu; this.Tv = Tv; this.Tw = Tw; return; } }
What algorithm are you using to decide where to put the images? I've written a dynamic atlasing system for my Direct3D sprite wrapper that bungs images onto a Direct3D texture and produces similar results to the above, but the method I use is naive to say the least and I'm curious to know about more intellegent approaches than my sort of brute force method.