Normal map from heightmap?
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.
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]);
}
}
No, you don't. Just look up a terrain lightning tutorial. It's mostly the same like with any other object.
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement