# comp.graphics.algorithms

## Subject: Re: tangent space for normal mapping

Thank you again. Now I'm trying to make my shader work just to see what
happens. Unlukily it seems that when I use glEnableVertexAttribArrayARB for
my tangent vectors, as soon as the shader tries to use it the renderer stop
and refuses to render (the frames freezes). But this is a question for some
other place :-) Thank you again!

"Dave Eberly" ha scritto nel messaggio
> "halex2000" wrote in message
> news:KdN8g.5959\$b5.100193@twister2.libero.it...
>>> Now regarding your variation. Have you guarded against the
>>> tangents averaging to zero (or nearly zero)?
>> Could that happen? Before averaging all the tangents are normalized...
>
> What if one of the tangents is (1,0,0) and another (-1,0,0)?
> This is an unlikely when you use texture coordinates as the
> surface parameters, assuming the artist has arranged for the
> texture image not to fold over on itself, but it is something
> you might want to worry about. The source code I posted
> earlier does check for degenerate behavior.
>
>> Currently I'm using Gram-Schmidt to orthogonalize.
>
> If you were to start with N in the Gram-Schmidt process, you
> would project out the N component of T. Then you would'
> project out the N and T components from B. This produces
> the same results as my approach, except that I just compute
> B as a cross product, not by projecting out components.
>
> If you start with T and project out the T component of N,
> then you probably will have different results. Gram-Schmidt
> is dependent on the order in which you process the vectors.
>
>> I've have some problems in figuring out exactly what happens. For
>> example, we are talking about tangent space (normal maps normals are
>> defined here), but the normals on my mesh are defined in object space. I
>> suppose that after orthogonalization, also tangent and bitangent are
>> defined here...
>
> I build my coordinate frame in "object space"; I tend to call it
> "model space". By implication, the normal and tangents are
> in "object space". The use of the term "tangent space" regarding
> shaders has been abused, just like folks use to say "binormal"
> instead of "bitangent". (Note to CG folks: How many more
> terms containing the words "space" or "map" are y'all going to
> invent :)
>
> You can build the coordinate frame in other spaces if those
> are natural to the algorithm you are implementing. You can
> pass matrix transformations as shader constants and apply
> them as needed. My goal in writing vertex shaders is to minimize
> the amount of transforming done by the program.
>
>> In addition, I was not able to find the answer to my question: when I
>> build the inverse of my TBN matrix, can I just transpose it?
>
> Yes. The matrix is orthogonal since {T,B,N} is an orthonormal
> set of vectors. Thus, its transpose is its inverse.
>
> --
> Dave Eberly
> http://www.geometrictools.com
>
>