I think i read somewhere that if you generate a normal map from the heightmap you don't need normal, binormal and tangent vectors per vertex to transform into object space? I'm not sure but i want to use normal maps to do lighting in my terrain.
Normal map from heightmap?
Started by Waaayoff, Jul 29 2012 08:04 AM
3 replies to this topic
#1 Members - Reputation: 345
Posted 29 July 2012 - 08:04 AM
"Spending your life waiting for the messiah to come save the world is like waiting around for the straight piece to come in Tetris...even if it comes, by that time you've accumulated a mountain of shit so high that you're fucked no matter what you do. "
Sponsor:
#2 Members - Reputation: 356
Posted 29 July 2012 - 12:16 PM
Here is the code I use to to this:
for(int z = 0; z<terrainHeight; z++){
for(int x = 0; x<terrainWidth; x++){
indexNm = z*terrainWidth+x;
if(z > terrainHeight-1){ //aboth
nmOffset = terrainWidth;
}else{
nmOffset = 0;
}
D3DXVECTOR3 N1 = D3DXVECTOR3(x, heightMap[indexNm+nmOffset],z+1);
if(x > 0){ //left
nmOffset = -1;
}else{
nmOffset = 0;
}
D3DXVECTOR3 N2 = D3DXVECTOR3(x-1, heightMap[indexNm+nmOffset],z);
if(x > terrainWidth-1){ //right
nmOffset = 1;
}else{
nmOffset = 0;
}
D3DXVECTOR3 N3 = D3DXVECTOR3(x+1, heightMap[indexNm+nmOffset],z);
if(z > 0){//below
nmOffset = -terrainWidth;
}else{
nmOffset = 0;
}
D3DXVECTOR3 N4 = D3DXVECTOR3(x, heightMap[indexNm+nmOffset],z-1);
D3DXVec3Cross(&normalMap[indexNm], &(N2 - N3), &(N1 - N4)); // cross and done!
D3DXVec3Normalize(&normalMap[indexNm], &normalMap[indexNm]);
}
}
#3 Members - Reputation: 345
Posted 29 July 2012 - 02:01 PM
Thanks, but do i have to use tangents/binormals?
"Spending your life waiting for the messiah to come save the world is like waiting around for the straight piece to come in Tetris...even if it comes, by that time you've accumulated a mountain of shit so high that you're fucked no matter what you do. "






