# How to convert tangent space normal to model space?

I’m editing the PreNormalPass to show normal include normalmap.

``````Technique PreNormalPass {

WorldParameters {
WorldViewProjectionMatrix
WorldViewMatrix
NormalMatrix
ViewProjectionMatrix
ViewMatrix
WorldMatrixInverseTranspose
}

Defines {
DIFFUSEMAP_ALPHA : DiffuseMap
HAS_NORMALMAP : NormalMap
NUM_BONES : NumberOfBones
INSTANCING : UseInstancing
}
}
``````

Now I have a tangent space normal map. How to convert it to world space or view space?

``Tangent Space <-> Model Space <-> World Space <-> View Space <-> Clip Space``

I’ve read any article. How can I get TBN Matrix in jme?

http://www.txutxi.com/?p=316#

Look at JME’s lighting shader and you will see how it gets the TBN from the normal and tangent vertex attributes.

I found this. I’ll try it, thx!
Tangent.glsllib

``````mat3 Tangent_GetBasis(){
vec3 wvBinormal = cross(wvNormal, wvTangent);
return mat3(wvTangent, wvBinormal, wvNormal);
}``````

why do you have a tangent space normal map ?

Most often that’s the case. The blueuish normal maps are in tangent space.

Sorry to necro but I just came across this struggling to do the exact same thing - I got the TBN matrix from the LightingShader, and my understanding is that this will convert from tangent space to model space.

So to go from that to viewspace

``````vec3 normal = vec3(normalColor.xyz) * tbnMat;
vec4 viewSpaceNormal =  vec4(normalFromMap,0.0) * g_WorldViewMatrix;
``````

I know I’ve done something wrong since I’m getting some messed up results. Is this bit wrong? Else I must be cocking up the TBN matrix bit.

EDIT: Oh shit I forgot about taking it from [0,1] to [-1,1] GG no more questions for now! All works