**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"

news:vuN8g.1258$x4.1233@newsread3.news.pas.earthlink.net...

> "halex2000"

> 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

>

>

Reply

View All Messages in

**comp.graphics.algorithms**

path:

tangent space for normal mapping =>Re: tangent space for normal mapping =>Re: tangent space for normal mapping =>Re: tangent space for normal mapping =>Re: tangent space for normal mapping =>Re: tangent space for normal mapping =>

Replies:

Copyright © 2006 WatermarkFactory.com. All Rights Reserved.