[gameprogrammer] Re: terrain geometry calculation problem

On Tuesday 17 October 2006 18:12, Roger D Vargas wrote:
> It is the same. Here is an screenshot of the problem:
> http://www.granhotelstgo.cu/x/terrain.jpg

As I said it will only draw the over the edge ones.
You have also a face culling problem.

When the array goes over the edge it will use the next rows first 
points.

These are the vertex points in the grid
a,b,c is the first triangle.
The second triangle is b,c,d which it seams to draw on the screen.

When correct shape is triangles e,f,g and f,g,h
from vertices e,f,g,h.

  0 1 2 3 4 5 6 7 8 9
 0                  a
 1b                 c
 2d
 3
 4ef
 5gh
 6
 7
 8
 9
10

Try to exchange the drawing of vertex 1 and vertex 2 and see what it 
gives to you.

> Sami Näätänen escribió:
> > On Monday 16 October 2006 17:02, Roger D Vargas wrote:
> >> Im trying to implement a basic terrain renderer following the one
> >> explained in chapter 7 of Opengl game programming book. But the
> >> result is a weird mesh far from looking like a terrain. Can
> >> somebody see if Im missing something in the following code? Iti
> >> copied from the book with very few modifications.
> >>
> >> I use this map for heights
> >>
> >> float hm[MAP_Z][MAP_X]={
> >> {0,0,2.0,0,0,0,5.0,0,0,0},
> >> {0,2.0,0,0,0,0,0,0,0,0},
> >> {0,0,0,1.0,0,0,0,0,0,0},
> >> {0,0,0,0,0,0,0,0,0,0},
> >> {2,0,0,0,0,4.1,0,0,0,0},
> >> {0,0,0,0,0,0,0,0,0,0},
> >> {2,0,0,0,0,0,0,0,2.0,0},
> >> {0,0,0,0,2.0,0,0,0,0,0},
> >> {0,0,3.0,0,0,0,0,0,0,0},
> >> {0,0,0,0,0,0,4.0,0,0,0}
> >> };
> >>
> >> And here is the code to calculate the geometry
> >>
> >> void create_geometry()
> >> {
> >>   int z,x;
> >>   for (z=0;z<MAP_Z;z++) {
> >>    for (x=0;x<MAP_X;x++) {
> >>       terrain[x][z][0]=x*ts;
> >>       terrain[x][z][1]=hm[z][x];
> >>       terrain[x][z][2]=z*ts;
> >>    }//for x
> >>   }//for z
> >> }
> >>
> >> And this is the rendering code
> >>
> >> glBindTexture(GL_TEXTURE_2D,grass);
> >> for (z=0;z<=9;z++) {
> >>    glBegin(GL_TRIANGLE_STRIP);
> >>    for (x=0;x<=9;x++) {
> >
> > The loops are going too far.
> >
> > 'vertex 1' will use x+1 as x index, which is 10 when the x is 9.
> > So this will overflow the 0..9 index of the terrain array.
> > Same happens to the z index in vertices 2 and 3 and to the x index
> > in vertex 3.
> >
> >>     //vertex 0
> >> glColor3f(terrain[x][z][0]/255.0,terrain[x][z][1]/255.0,terrain[x]
> >>[z] [2]/255.0); glTexCoord2f(0.0,0.0);
> >>    
> >> glVertex3f(terrain[x][z][0],terrain[x][z][1],terrain[x][z][2]);
> >> //vertex 1
> >> glColor3f(terrain[x+1][z][1]/255.0,terrain[x+1][z][1]/255.0,terrai
> >>n[x +1][z][2]/255.0f); glTexCoord2f(1.0,0.0);
> >>
> >> glVertex3f(terrain[x+1][z][1],terrain[x+1][z][1],terrain[x+1][z][2
> >>]); //vertex 2
> >> glColor3f(terrain[x][z+1][1]/255.0,terrain[x][z+1][1]/255.0,terrai
> >>n[x ][z+1][2]/255.0); glTexCoord2f(0.0,1.0);
> >>
> >> glVertex3f(terrain[x][z+1][1],terrain[x][z+1][1],terrain[x][z+1][2
> >>]); //vertex 3
> >> glColor3f(terrain[x+1][z+1][1]/255.0,terrain[x+1][z+1][1]/255.0,te
> >>rra in[x+1][z+1][2]/255.0); glTexCoord2f(1.0,1.0);
> >> glVertex3f(terrain[x+1][z+1][1],terrain[x+1][z+1][1],terrain[x+1][
> >>z+1 ][2]);
> >>
> >>    }
> >>    glEnd();
> >>   }
> >
> > ---------------------
> > To unsubscribe go to http://gameprogrammer.com/mailinglist.html

---------------------
To unsubscribe go to http://gameprogrammer.com/mailinglist.html


Other related posts: