Ok, remember the problem from 16 September re texture coordinates and confusion over whether (0,0) was the top or bottom left corner of the texture? Well it turns out that once again Direct3D is the odd one out, and 3DS is actually using the more common convention, i.e. (0,0) is the bottom left corner – a little unintuitive to me since I’m used to coordinates in 2D painting programs, but this is the norm for APIs like OpenGL and modelling tools (but not D3D).
I have therefore changed the 3ds2oof routine back to how it was before (using 3DS UV corrdinates directly) and am flipping the texture itself in the Y-axis when loading it in the Direct3D texture implementation to compensate (D3DTexture.cpp). I should have checked more thoroughly before changing things to be in line with D3D, I should have known it would probably be the odd one.