3D-Koordinaten in 2D-Koordinaten umrechnen

mamarulez

Mitglied
Hallo,

ich hoffe ich habe hier im richtigen Bereich geposted...

ich schreibe im Moment eine eigene, einfache 3D-Engine, die soweit auch wunderbar funktioniert. Doch habe ich ein kleines Problem: Um Polygone mit meiner Engine auf den Bildschirm zeichnen zu können, benutze ich eine einfache Funktion, die eine Linie zwischen zwei Koordinaten ( nämlich X und Y ) zeichnet. Diese Funktion zeichnet also zweidimensional, ich habe allerdings in meiner Engine eine weitere ( Tiefen- ) Koordinate Z. Jetzt geht es darum, in einer beziehungsweise zwei Funktionen dreidimensionale Koordinaten, die ich sonst überall in der Engine selbstverständlich verwende, unmittelbar vor dem Zeichnen der Polygone in zweidimensionale umzuwandeln. Ich habe ungefähr einen Tag nach dem richtigen Algoritmus gesucht, aber nichts gefunden und mittlerweile raucht mir der Kopf so von diesen beiden Funktionen, dass ich gar nichts mehr verstehe...

Hier sind die Funktionen:

Code:
function TranslateCoordinatesX ( int pointx, int pointz )
// translates three-dimensional points with x, y and z coordinates to two dimensional
// ones with only x and y coordinates
{
	// define the new x-coordinate
	int pointnewx;
	
	// translate the coordinates
	if ( pointx < 160 )
		pointnewx = pointx + pointz;
	else if ( pointx > 160 )
		pointnewx = pointx - pointz;
	else if ( pointx == 160 )
		pointnewx = pointx;
	
	// return the new x-coordinate
	return pointnewx;
}
Das ist die Funktion, die die im Parameter überlieferten dreidimensionalen X und Z Koordinaten in eine zweidimensionale X-Koordinate umwandelt oder besser gesagt umwandeln sollte. Sie gibt den neuen X-Wert wieder zurück.

Code:
function TranslateCoordinatesY ( int pointy, int pointz )
// translates three-dimensional points with x, y and z coordinates to two dimensional
// ones with only x and y coordinates
{
	// define the new y-coordinate
	int pointnewy;
	
	// translate the coordinates
	if ( pointy < 100 )
		pointnewy = pointy + pointz;
	else if ( pointy > 100 )
		pointnewy = pointy - pointz;
	else if ( pointy == 160 )
		pointnewy = pointy;
	
	// return the new y-coordinate
	return pointnewy;
}
Diese Funktion sollte das gleiche für Y-Koordinaten tun.

ZUR ERKLÄRUNG: Ich bin mir bewusst, dass der Algoritmus im Moment falsch ist. Was er tut ist, er addiert den Z-Wert zu dem X- oder Y-Wert wenn der Punkt links oder oberhalb vom Zentrum des Bildschirms ist. Wenn nicht, dann subtrahiert er den Wert und wenn das Objekt genau im Zentrum des Screens liegt, dann ändert die Tiefen-Koordinate gar nichts.

Kann mir irgendjemand helfen? Mache ich einen Denkfehler oder bin ich einfach nur zu blöde den richtigen Weg zu finden?

Danke,

Jan.
 
Zuletzt bearbeitet:
Danke für die Hilfe, aber ich habe schon einiges an Antworten in anderen Foren erhalten, in denen ich einen ähnlichen Thread erstellte, nachdem hierauf mehrere Wochen keine Antwort kam.

Zur Vollständigkeit: Man muss die Koordinaten ganz einfach durch Z teilen...

Danke für die Antwort, aber es würde helfen, wenn demnächst etwas schneller geantwortet wird... :)
 
Sorry, tümmele mich in anderen Teilen dieser Seite rum..

Weiterhin viel Erfolg und Glück :)

mfg chmee
 

Neue Beiträge

Zurück