loading a heightmap as texture in shader
Posted
by
wtherapy
on Game Development
See other posts from Game Development
or by wtherapy
Published on 2012-11-20T19:08:20Z
Indexed on
2012/11/20
23:24 UTC
Read the original article
Hit count: 184
I have a height map of 256x256, containing, foreach cell, not only height as a normal float value ( not 0-1 ) and also 2 gradient values ( for X and Y ), also as normal float values ( not 0-1 ). I have uploaded the texture via normal texture loading:
glEnable( GL_TEXTURE_2D );
glGenTextures( 1, &m_uglID );
DEBUG_OUTPUT("Err %x\n", glGetError());
glBindTexture( GL_TEXTURE_2D , m_uglID );
DEBUG_OUTPUT("Err %x\n", glGetError());
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB32F, unW + 1, unH + 1, 0, GL_RGB, GL_FLOAT, pvBytes );
DEBUG_OUTPUT("Err %x\n", glGetError());
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_LINEAR);
DEBUG_OUTPUT("Err %x\n", glGetError());
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_LINEAR);
DEBUG_OUTPUT("Err %x\n", glGetError());
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
DEBUG_OUTPUT("Err %x\n", glGetError());
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
DEBUG_OUTPUT("Err %x\n", glGetError());
as a parenthesis, the debug output is:
Err 500 Err 0 Err 0 Err 0 Err 500 Err 500 Err 0 Err 0
pvBytes is a 256x256 array of
typedef struct _tGradientHeightCell
{
float v;
float px;
float py;
}
TGradientHeightCell, *LPTGradientHeightCell;
then,
m_ugl_HeightMapTexture = glGetUniformLocation(m_uglProgram, "TexHeightMap");
I load it via:
glEnable(GL_TEXTURE_2D );
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D , pTexture->GetID());
glUniform1i(m_ugl_HeightMapTexture, 0);
in shader, I just access it:
uniform sampler2D TexHeightMap;
vec4 GetVertCellParameters( uint i, uint j ) { return texture( TexHeightMap, vec2( i, j ) ); }
vec4 vH00 = GetVertCellParameters( i, j );
My problem is that, when passing negative values in one of the values in TGradientHeightCell ( v, px, py ), the texture is corrupted. I need the values to be passed exact as I have them in memory.
Any help appreciated.
© Game Development or respective owner