On Mon, 2010-07-12 at 22:54 +0200, Henri Verbeet wrote: > On 12 July 2010 22:43, Misha Koshelev <misha...@gmail.com> wrote: > > Thank you Henri for the explanation. In fact it seems that this flag is > > default on D3DXComputeTangentFrameEx: > > > > D3DXTANGENT_WEIGHT_BY_AREA > > Weight the direction of the computed per-vertex normal > > or partial derivative vector according to the areas of > > triangles attached to that vertex. Mutually exclusive > > with D3DXTANGENT_WEIGHT_EQUAL. > > > Actually, looking at the docs for D3DXComputeTangentFrameEx() a bit > more closely, it says in the description for dwOptions that if neither > D3DXTANGENT_WEIGHT_BY_AREA nor D3DXTANGENT_WEIGHT_EQUAL is specified > it does indeed weight the normals by the the angle of the outgoing > edges for that face.
Henri: I love your polite way of saying RTFM ;) Anyway you are correct, I have made a patch: http://github.com/misha680/wine/commit/f199b0fba2cdfb2b0987d1b9fac73f39762220bc Next steps I believe are: * Add tests for D3DXCreateCylinder with unequal radii * Implement D3DXCreateCylinder * Implement D3DXComputeNormals One minor note about the patch - the compute_normal function is adapted from a book, which I have credited in a comment /* * Adapted from pg. 246, Frank D Luna, "Introduction to 3D Game Programming with Direct X 9.0c: * A Shader Approach (Wordware Game and Graphics Library) [Paperback]," 2006. */ The function differs from the book in the: * name * parameters all on one line rather than separate lines (minor) * use of D3DXVec3Subtract rather than operator- (only available in C++ I believe) * name of output parameter is normal vs out I believe this should be okay for inclusion of this function. Plus it is quite basic. However, if this is not ok let me know (I honestly can't imagine such a case though...) Misha