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

Filed under:
|
|

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

Related posts about textures

Related posts about shaders