From: "Nick Anderson" Newsgroups: comp.os.msdos.djgpp Subject: Re: Terrain Shading in Allegro Date: Wed, 15 Apr 1998 09:33:40 +0100 Organization: [not set] Lines: 73 Message-ID: <6h1rfm$897$1@svr-c-02.core.theplanet.net> References: <01bd6738$2a16aac0$a3a325cb AT jring> NNTP-Posting-Host: gate-isdn.telsci.co.uk To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Precedence: bulk > I have been using Allegro for drawing 3D terrains from a set of random >points (turned into a set of edge-connected triangular polygons) and it >works well, but I really need to shade the terrain for a bit of realism and >better perspective (at the moment, its just a big unicolor blob with the >polys in the right place!). Texture mapping doesn't seem to be a realistic >way of getting shading working so I was wondering if anyone knew how to >shade a series of triangular polygons across the whole set of polygons (as >if the light source was shining in one place onto the whole set of >triangular polygons). Any information pertaining to this subject would be >greatly appreciated as I am relatively new to 3D programming. Are you using a global variable like: y[128][128] to hold the landscape in? if so, what I do is have a colour gradient going from black to white in my colour palette(0 to 15 in the index). so, pal[0] = black ... pal[7] = grey ... pal[15] = white I have another global matrix called int colour[128][128]; which holds the colour at each point on the terrain. I then say:- void shading() { float gradient; for(x=0; x<128; x++) for(z=0; z<128; z++) { // Take the height of the next point (x+1,z) from the // current point (x,z) to get a gradient. gradient = 8 + (y[x][z] - y[x+1][z]); colour[x][z] = (int)gradient; // Now check boundary points. if(colour[x][z] > 15) colour[x][z] = 15; else if(colour[x][z] < 0) colour[x][z] = 15; } } You often need to play about with the colour[x][z] = 8 + (y[x][z] - y[x+1][z]); code until it looks about right. Yours sincerely, Nick Anderson. email: andersnd AT NOSPAMPLEASEhotmail DOT com - remove NOSPAMPLEASE from the email address. P.S. Jason, if you want, send me your email and I will send my source for my Allegro 3d engine as soon as it is finished.