I would suggest trying to do more than three at a time, but if this is for a trial, then OK...

In a ROUGH conversion of your actual code, I would take your OLD code...
Code:
//retrieve first point of containing triangle (base corner)
	c1= ent_getvertex(Terrain,NULL,SW);
	Triangle[0].x=c1.v.x;
	Triangle[0].y=c1.v.z;
	Triangle[0].z=c1.v.y;
	
	//retrieve second point of containing triangle (diagonal to base)
	c1= ent_getvertex(Terrain,NULL,SW-32);
	Triangle[1].x=c1.v.x;
	Triangle[1].y=c1.v.z;
	Triangle[1].z=c1.v.y;
	
	//determine third point of containing triangle (varying point)
	vec_set (temp_vec, P);
	vec_sub (temp_vec,Triangle[0].x);
	vec_to_angle (temp_ang.pan,temp_vec);
	
	//retrieve third point of containing triangle (varying point)
	if(temp_ang.pan>45)
	{
		c1= ent_getvertex(Terrain,NULL,SW-33);
	}
	else
	{
		c1= ent_getvertex(Terrain,NULL,SW+1);
	}
	Triangle[2].x=c1.v.x;
	Triangle[2].y=c1.v.z;
	Triangle[2].z=c1.v.y;


And turn it into THIS
Code:
//retrieve the three points of containing triangle

	//first, open the buffer
	ent_getvertex(Terrain,c1, 1);	ent_setvertex(Terrain,c1, 1);

	//retrieve the first point of containing triangle (diagonal to base)
	Triangle[0].x = c1.v[SW].x;
	Triangle[0].y = c1.v[SW].z;
	Triangle[0].z = c1.v[SW].y;
	
	//retrieve second point of containing triangle (diagonal to base)
	Triangle[1].x = c1.v[SW-32].x;
	Triangle[1].y = c1.v[SW-32].z;
	Triangle[1].z = c1.v[SW-32].y;
	
	//determine third point of containing triangle (varying point)
	vec_to_angle(temp_ang.pan, vec_sub( vec_set(temp_vec, P),Triangle[0].x));
	
	//retrieve third point of containing triangle (varying point)
	if(temp_ang.pan>45)
	{
		Triangle[2].x = c1.v[SW-33].x;
		Triangle[2].y = c1.v[SW-33].z;
		Triangle[2].z = c1.v[SW-33].y;
	}
	else
	{
		Triangle[2].x = c1.v[SW+1].x;
		Triangle[2].y = c1.v[SW+1].z;
		Triangle[2].z = c1.v[SW+1].y;
	}


Please bear in mind, Ive just done this in a text editor, so beware of syntax errors or typo's.

One thing that may hitch up is my referencing of the vertex array...
You may need to add parentheses like so...
Code:
this format
...  c1.v[SW].x  ...
may need changing to
...  (c1.v)[SW].x  ...


I can never remember that bit... grin ... until the compiler bitches at me...


"There is no fate but what WE make." - CEO Cyberdyne Systems Corp.
A8.30.5 Commercial