Mam problem z heightmapami w Opengl. Kod poniżej poprawnie ładuje i wyświetla heightmapy mniejsze jednak przy większych pojawiają się błędy - mapa jest jakby na ukos. Gdzie może leżeć problem?
class Heightmapa
{
private:
float ** mapa_wys;
unsigned long roz_sz, roz_wys;
unsigned textura;
public:
void ZaladujHeightmape(char*, char*);
void WyswietlHeightmape();
~Heightmapa();
};
void Heightmapa::ZaladujHeightmape(char * naz_h, char * naz_t)
{
{
unsigned rozmiar;
unsigned char * dane;
ifstream strum;
strum.open(naz_h);
if(!strum)
{
return;
}
strum.seekg(18);
strum.read((char*)&roz_sz, 4);
strum.seekg(22);
strum.read((char*)&roz_wys, 4);
strum.seekg(34);
strum.read((char*)&rozmiar, 4);
dane = new unsigned char[rozmiar];
strum.seekg(54);
strum.read((char*)dane, rozmiar);
mapa_wys = new float*[roz_wys];
for(int h = 0; h < roz_wys; ++h)
{
mapa_wys[h] = new float[roz_sz];
}
int i = 0;
for (int j = 0; j < roz_wys; ++j)
{
for(int k = 0; k < roz_sz; ++k)
{
mapa_wys[j][k] = dane[i];
i+=3;
}
}
ZaladujBitmape(naz_t, textura);
delete[] dane;
strum.close();
}
}
void Heightmapa::WyswietlHeightmape()
{
glPushMatrix();
glBindTexture(GL_TEXTURE_2D, textura);
glBegin(GL_TRIANGLES);
for(int i = 0; i < roz_wys-1; ++i)
{
for(int j = 0; j < roz_sz-1; ++j)
{
glTexCoord2f(0, 0);
glVertex3f(i, mapa_wys[i][j], j);
glTexCoord2f(0, 1);
glVertex3f((i+1), mapa_wys[(i+1)][j], j);
glTexCoord2f(1, 0);
glVertex3f(i, mapa_wys[i][(j+1)], (j+1));
glTexCoord2f(1, 0);
glVertex3f(i, mapa_wys[i][(j+1)], (j+1));
glTexCoord2f(0, 1);
glVertex3f((i+1), mapa_wys[(i+1)][j], j);
glTexCoord2f(1, 1);
glVertex3f((i+1), mapa_wys[(i+1)][(j+1)], (j+1));
}
}
glEnd();
glPopMatrix();
}