Hallo Zusammen,
während meine Kollisionserkennung bei Blöcken und Modellen gut funktioniert, scheitert sie an Terrains ab un zu (vor allem an Steigungen).
Hat mir jemand einen Tipp?
Hier der entsprechende Code:
Code:
void updateCam(ENTITY* ent)
{
	//Positionsparamter
	ANGLE camang;
	vec_set(camang, vector(-180,20,100));
	var camdist = 200;
	var camheight = 10;
	var tiltmin = -80;
	var tiltmax = 80;
	var collshorten = 5;
	
	//Updateparameter
	var angupdate = 0.5;
	var centerupdate = 0.3;
	var distupdate = 0.3;
	var tiltspeed = 10;
	
	//aktuelle Kameraparameter
	ANGLE currang;
	vec_set(currang, ent.pan);
	vec_add(currang, camang);
	VECTOR currcenter;
	vec_set(currcenter, vector(ent.x, ent.y, ent.z));
	var currdist = camdist;
	
	//Temporäres
	ANGLE targetang;
	VECTOR tempvec;
	var tempdist;
	
	proc_mode = PROC_LATE;
	while(1)
	{	
		//Steuern der Höhe mit der Maus
		camang.tilt -= mouse_force.y*tiltspeed*time_step;
		camang.tilt = clamp(camang.tilt, tiltmin, tiltmax);
		
		//Setzen der relativen Zielposition
		vec_set(targetang, ent.pan);
		vec_add(targetang, camang);
		
		//relatives Positionsupdate
		vec_diff(tempvec, targetang, currang);
		vec_scale(tempvec, angupdate*time_step);
		vec_add(currang, tempvec);
		
		//absolutes Positionsupdate
		vec_diff(tempvec, ent.x, currcenter);
		vec_scale(tempvec, centerupdate*time_step);
		vec_add(currcenter, tempvec);
		
		//setzen der resultierenden Position
		vec_set(camera.x, vector(camdist, 0, 0));
		vec_rotate(camera.x, currang);
		vec_add(camera.x, vector(currcenter.x, currcenter.y, currcenter.z+camheight));
		
		//Kollision der Kamera
		you = ent;
		tempdist = c_trace(vector(ent.x, ent.y, ent.z+camheight), camera.x, IGNORE_YOU|USE_POLYGON|IGNORE_PASSABLE);
		tempdist = minv(tempdist, abs(tempdist-collshorten));
		if(tempdist > 0 && currdist >= tempdist)
		{
			currdist = tempdist;
		}else
		{
			if(tempdist > 0)
			{
				currdist += (tempdist-currdist)*distupdate*time_step;
			}else
			{
				currdist += (camdist-currdist)*distupdate*time_step;
			}
		}
		
		//Anpassen der Position bei Kollision
		vec_diff(camera.x, camera.x, vector(currcenter.x, currcenter.y, currcenter.z+camheight));
		vec_normalize(camera.x, currdist);
		vec_add(camera.x, vector(currcenter.x, currcenter.y, currcenter.z+camheight));
		
		//setzen der Blickrichtung
		vec_diff(camera.pan, vector(ent.x, ent.y, ent.z+camheight), camera.x);
		vec_to_angle(camera.pan, camera.pan);
		camera.roll = 0;
		
		wait(1);
	}
}



MfG
Jürgen