Terrain u. Straßen Terrain

Posted By: xxxxxxx

Terrain u. Straßen Terrain - 03/04/11 14:33

Hallo erstmal,
ich versuche grade ein Terrain an ein unebenes anzupassen
also die z.position jedes vertices wo der alpha wert(einer externen bitmap) über 10 liegt soll genauso groß + den rot wert(der externen bitmap)(Terrains sind beide 500 * 500 und die textur 512*512)
Code:
function setStreets(ENTITY*E1, ENTITY*E2, BMAP* H)
{
	CONTACT*c1;
	CONTACT*c2;
	COLOR* hight;
	var hightCheck;
	var translations=0;
	var xrow;
	var yrow;
	var sat = sqrt(ent_status(E1,1));
	bmap_lock(H,0);
	while(xrow < sat)
	{
		xrow+=1;
		while(yrow < sat)
		{
			yrow+=1;
			c1=ent_getvertex(E1,NULL,translations);
			hight = pixel_to_vec(hight,hightCheck,8888,translations/500*512);
			if(hightCheck >= 10)
			{
				c2=ent_getvertex(E2,NULL,translations);
				c1.v.y = c2.v.y+hight.red;
				ent_setvertex(E1,c1,translations);
			}
			translations += 1;
		}
		yrow = 0;
	}
	c_updatehull(E1,0);
	bmap_unlock(H);
}


1. egal was ich mache es wird keine position gesetzt egal was ich mache.
2. Ich habe höchst wahrscheinlich im BMAP*/COLOR* einen fehler!
Hoffe ihr findet den fehler!
xxxxxxx
Posted By: xxxxxxx

Re: Terrain u. Straßen Terrain - 03/04/11 21:01

Brauche dringend hilfe!!!
Ich kann so nicht weiter arbeiten frown
Warum wird die hüllle garnicht verändert?
Benutzte ich die bmap function richtig?
Bitte helft mir ich hatte bis jetzt noch nicht allzuviel mit terrain verformung zu tun crazy
xxxxxxx
Posted By: Uhrwerk

Re: Terrain u. Straßen Terrain - 03/04/11 21:22

Ich sehe jetzt so auf den ersten Blick keine Fehler. Was passiert denn nach dem Ausführen des Codes? Gibt es überhaupt eine Änderung? Bist Du den Code mal mit dem Debugger durchgegangen und hast geschaut, dass alle Verzweigungen auch tatsächlich erreicht werden? Wird der Code wirklich ausgeführt?

EDIT: Richi hat recht. Wenn Du PRAGMA_POINTER gesetzt hast, dann denk daran die Pointer an die Funktionen zu übergeben.
Posted By: MasterQ32

Re: Terrain u. Straßen Terrain - 03/04/11 21:24

ich glaube dein Fehler liegt hier:
Code:
CONTACT*c1;
CONTACT*c2;
COLOR* hight;



muss sein:
Code:
CONTACT c1;
CONTACT c2;
COLOR hight;


Posted By: xxxxxxx

Re: Terrain u. Straßen Terrain - 03/04/11 21:47

@Urwerk beim testen viel mir das überhaupt nix passiert frown
ich rufe die function dierekt in der main auf alles danach wird problemlos ausgeführt alle pointer sind gültig!
@Richi007
das gibt leider ne Fehlermeldung!
Pointer kann nicht in nen Struct umgewandelt werden!
EDIT: mir kam auch schon die Idee das es daran liegen könnte das var's nur bis 99999.999 gehen und hab einen float für alle diese variablen genommen! das/die Terrains haben 250000 vertices oder so
EDIT2: wenn du den eintrag #define PRAGMA_POINTER aus dem manual meinst da hab ich nichts gesetzt!
xxxxxxx
Posted By: MasterQ32

Re: Terrain u. Straßen Terrain - 03/04/11 21:53

dann musste anstatt dem struct die adresse des structs nehmen:
COLOR hight;
... &hight ... Adresse/Pointer
Posted By: xxxxxxx

Re: Terrain u. Straßen Terrain - 03/04/11 22:01

Gut gibt keine Fehlermeldung aber ändert nix an der Tatsache das es nicht funktioniert. Und es leuft wie gesagt nicht durch(wenns perfect durschlaufen würde hätte ich anschließend ne andere auflösung!) hier mein code
Code:
function setStreets(ENTITY*E1, ENTITY*E2, BMAP* H)
{
	CONTACT c1;
	CONTACT c2;
	COLOR hight;
	var hightCheck;
	float translations=0;
	var xrow = 0;
	var yrow = 0;
	float sat = sqrt(ent_status(E1,1));
	bmap_lock(H,0);
	while(xrow < sat)
	{
		
		while(yrow < sat)
		{
			
			&c1=ent_getvertex(E1,NULL,translations);
			&hight = pixel_to_vec(hight,hightCheck,8888,translations/500*512);
			if(hightCheck >= 10)
			{
				&c2=ent_getvertex(E2,NULL,translations);
				&c1.z = c2.z+hight.red;
				&c1.v = NULL;
				ent_setvertex(E1,&c1,translations);
			}
			translations += 1;
			yrow+=1;
		}
		xrow+=1;
		yrow = 0;
	}
	if(yrow == 500 && xrow == 500)
	{
		video_screen=8;
	}
	c_updatehull(E1,0);
	bmap_unlock(H);
}


bitte noch korigieren wenn etwas an stuct adressen usw. falsch benutzt wurde!
xxxxxxx
Posted By: Uhrwerk

Re: Terrain u. Straßen Terrain - 03/04/11 22:29

video_screen kannst Du nur vor dem ersten frame setzen. Das sollte vor so einer aktion aber nicht der Fall sein. Verwende ein beep(); um so was auf die schnelle zu überprüfen. Von float würde ich hier ganz die Finger lassen. Ich kann nur nochmal meinen Tip wiederholen, den Debugger einzusetzen. Setze eine Breakpoint in der ersten Zeile der Funktion und schaue welche Zweige ausgeführt werden und welche nicht. Hast Du mal überprüft was sqrt(ent_status(E1,1)); ergibt?
Posted By: xxxxxxx

Re: Terrain u. Straßen Terrain - 03/04/11 23:18

jetzt pipst es *freu*
sqrt(ent_status(E1,1)); ergab 515 o_O eigentlich müssten es 500 sein! so siehts jetzt aus macht gar nix!
Code:
function setStreets(ENTITY*E1, ENTITY*E2, BMAP* H)
{
	CONTACT c1;
	CONTACT c2;
	COLOR hight;
	var hightCheck;
	var translations=0;
	var xrow = 0;
	var yrow = 0;
	var sat = sqrt(ent_status(E1,1));
	bmap_lock(H,0);
	for(xrow = 0; xrow < 500; xrow++)
	{
		for(yrow = 0; yrow < 500; yrow++)
		{
			
			&c1=ent_getvertex(E1,NULL,translations);
			&hight = pixel_to_vec(hight,hightCheck,8888,translations/500*512);
			if(hightCheck > 10)
			{  
				&c2=ent_getvertex(E2,NULL,translations);
				&c1.z = c2.z+10;//(hight.red/2);
				&c1.v = NULL;
				ent_setvertex(E1,&c1,translations);
			}
			translations += 1;
		}
	}
	if(yrow == 500 && xrow == 500)
	{
		beep();
	}
	c_updatehull(E1,0);
	bmap_unlock(H);
}


EDIT: wenn man die alpha if bedingung nicht setzt crasht es!
EDIT2: wird auch nichts in der bedingung ausgeführt!
Posted By: Uhrwerk

Re: Terrain u. Straßen Terrain - 03/05/11 00:17

Code:
&c2=ent_getvertex(E2,NULL,translations);
&c1.z = c2.z+10;//(hight.red/2);
&c1.v = NULL;


Diese Zeilen sind Käse. Du dereferenzierst da etwas was kein Pointer ist. Wundere mich, dass das keinen Syntaxfehler gibt. Ersetze das mal bitte mit:
Code:
ent_getvertex(E2,&c2,translations);
c1.z = c2.z+10;//(hight.red/2);
c1.v = NULL;


Gleiches gilt für die beiden Zeilen über "if (hightCheck > 10)". Du kannst grundsätliche keine Structs dereferenzieren. Nur Pointer können dereferenziert werden.
Ich weiss jetzt nicht was CONTACT.v ist. Soll da ein NULL Pointer rein?
Posted By: xxxxxxx

Re: Terrain u. Straßen Terrain - 03/05/11 10:51

So habe alles gemacht jetzt wird es deformiert aber total wilkürlich!
CONTACT.v ist die position in weltkoordinaten und wenn man die lokale position setzten will muss .v = NULL gesetzt werden hab jetzt einfach mal durch .z durch v.y(v ist in direchX koordinaten)
wie ich das ergebnis meinse codes einschätzte kriege ich:
1. Falschen alpha wert
2. Falsche pixelposition für die vertices
sorry wenn das jetzt etwas dumm klingt, hab zuvor noch nie bitmap functionen benutzt schon garnicht in verbindung mit terrain!
Code:
function setStreets(ENTITY*E1, ENTITY*E2, BMAP* H)
{
	CONTACT c1;
	CONTACT c2;
	COLOR hight;
	var hightCheck;
	var translations=0;
	var xrow = 0;
	var yrow = 0;
	var sat = sqrt(ent_status(E1,1));
	bmap_lock(H,0);
	for(xrow = 0; xrow < 500; xrow++)
	{
		for(yrow = 0; yrow < 500; yrow++)
		{
			ent_getvertex(E1,&c1,translations);
			pixel_to_vec(&hight,hightCheck,8888,translations/500*512);
			if(hightCheck > 1)
			{  
				ent_getvertex(E2,&c2,translations);
				c1.v.y = c2.v.y+(hight.red*2);
				ent_setvertex(E1,&c1,translations);
//				beep();
			}
			translations += 1;
		}
	}
	if(yrow == 500 && xrow == 500)
	{
		
	}
	c_updatehull(E1,0);
	bmap_unlock(H);
}


xxxxxxx
Posted By: fogman

Re: Terrain u. Straßen Terrain - 03/05/11 13:01

Versuch mal terrain_chunk = 0;
http://www.conitec.net/beta/aterrain_chunk.htm
Posted By: xxxxxxx

Re: Terrain u. Straßen Terrain - 03/05/11 13:29

geht nicht das terrain dann gibts ne fehlermeldung zu viele polys! bei einem kleinen wert beschwert er sich wegen zu vielen chunks! Trotzdem Danke!
Posted By: Uhrwerk

Re: Terrain u. Straßen Terrain - 03/05/11 18:06

Poste doch mal bitte einen Screenshot vom Bitmap und vom deformierten Terrain.
Posted By: xxxxxxx

Re: Terrain u. Straßen Terrain - 03/05/11 20:06

einmal das deformierte terrain ich hab die seltsamen stellen makiert(nach entfernung rot u. blau abwechelnt außer ganz hinten) es sieht über all so aus(es werden im regelmäßigen abstand erhöhungen geformt sonst passt sich das terrain dem anderen an)
und hier die hight-map

EDIT: weiß = alpha
xxxxxxx
Posted By: xxxxxxx

Re: Terrain u. Straßen Terrain - 03/06/11 16:05

Hat denn niemand eine Lösung parat? Es liegt zu an der vec_for_bmap function nur hab ich keine ahnung was ich falsch mache!
@Uhrwerk und alle anderen die bis jetzt geholfen haben
Danke für die Hilfe, weiß das zu schätzen!
xxxxxxx
Posted By: xxxxxxx

Re: Terrain u. Straßen Terrain - 03/06/11 16:26

Ich bin dumm, aber richtig dumm! Wieso nur? *schlag kopf gegen Tüschplatte*
Es ist logisch das wenn man auch nirgendwo schreibt das die bmap einfluss auf vec_for_pixel hat, dass sie dann keinerlei einfluss auf vec_for_pixel hat! *schlag nochma gegen Tüschplatte*

Code:
function setStreets(ENTITY*E1, ENTITY*E2, BMAP* H)
{
	CONTACT c1;
	CONTACT c2;
	COLOR hight;
	var hightCheck;
	var translations=0;
	var xrow = 0;
	var yrow = 0;
	var sat = sqrt(ent_status(E1,1));
	bmap_lock(H,0);
	for(xrow = 0; xrow < 500; xrow++)
	{
		for(yrow = 0; yrow < 500; yrow++)
		{
			ent_getvertex(E1,&c1,translations);
			
			pixel_to_vec(&hight,hightCheck,8888,pixel_for_bmap(H,integer(yrow/500*512),integer(xrow/500*512)));//integer(xrow/500*512)*(integer(yrow/500*512)));
			if(hightCheck > 1)
			{  
				ent_getvertex(E2,&c2,translations);
				c1.v.y = c2.v.y+(hight.red*2);
				ent_setvertex(E1,&c1,translations);
			}
			translations += 1;
		}
	}
	c_updatehull(E1,0);
	bmap_unlock(H);
}


Nochma, Vielen Dank!!!
xxxxxxx
Posted By: Uhrwerk

Re: Terrain u. Straßen Terrain - 03/06/11 17:09

Jaja, programmieren ist manchmal ein sehr hartes Geschäft... ^^ Wieso danke? Hast es doch selber gerichtet!
Posted By: xxxxxxx

Re: Terrain u. Straßen Terrain - 03/06/11 17:54

das war als:
"Danke für die vielen/viele Tipps/Hilfe!" gemeint wink
Posted By: Widi

Re: Terrain u. Straßen Terrain - 03/06/11 20:15

Hoffe die Tischplatte hat nicht zu sehr gelitten wink
Ist aber immer wieder ein schönes Gefühl, wenn man einen Fehler selber rausfindet.
© 2024 lite-C Forums