Mal was für die Mathe-Freaks *g*

EdDerUnsichtbare

Grünschnabel
Also es geht um folgendes:

Meine OGL-Engine, die ich grad mache soll in der Lage sein, dynamisch Bäume zu erstellen. Das funktioniert so, dass man einfach mit einer Funktion ein paar Argumente übergibt, aus denen dann die Baumstruktur erstellt wird. Allerdings hab ich da meine Probleme wenns um die Bestimmung der Vertex-Koordinaten geht. Hier erstmal der Code...
Code:
int CreateTree(ATL_Object* dest,
			   int rootradius,
			   int trunkradius
			   )
{

	dest->Faces = 0;
	// The root
	float i;
	V3Df p1,p2,p3;

	for (i = 0; i <= (360); i+= (360 / 6) )
	{
		p1.x = cos(i*(180/PI)) * rootradius;
		p1.z = sin(i*(180/PI)) * rootradius;
		p1.y = 0;
		p2.x = cos((i+(360/6))*(180/PI)) * rootradius;
		p2.z = sin((i+(360/6))*(180/PI)) * rootradius;
		p2.y = 0;
		p3 = VMidf(p1.x,p1.y,p1.z,p2.x,p2.y,p2.z);
		p3.x = cos((i+(360/12))*(180/PI)) * rootradius;
		p3.y = sin((i+(360/12))*(180/PI)) * rootradius;
		p3.z = rootradius / 2;
		dest->Mesh.Face[dest->Faces].v1 = p1;
		dest->Mesh.Face[dest->Faces].v2 = p2;
		dest->Mesh.Face[dest->Faces].v3 = p3;
		dest->Faces++;
	}

	Normalize(dest);

	return 0;
}

Im Prinzip funktioniert das ganze wie die Lathe-Funktion bei MAX/GMAX, aber irgendwie wills nicht wie ich will.

Also die Punkte p1-p3 sind die Eckpunkte des jeweiligen Faces. Die For-Schleife springt 6 mal innerhalb von 360° (zumindest soll sie das ; )

die X und Y-Koordinaten für P1 und P2 stimmen auch, allerdings krieg ich es nicht hin, dass P3 genau zwischen den beiden liegt und etwas nach innen ragt (wie bei einer Wurzel halt :)

Hm na ich könnt wohl noch ewig erklären, aber ich poste einfach mal zwei Bilder, eins wie es aussehen sollte und eines wies direkt durch den Code oben tatsächlich in der Engine aussieht...

Hoffe ich hab mich nicht zu verwirrend ausgedrückt*g*
 

Anhänge

  • bild1.jpg
    bild1.jpg
    40,6 KB · Aufrufe: 111
Code:
p1.x = cos(i*(180/PI)) * rootradius;

Wenn du Altgrad in Radiant umrechnen willst (weil z.B. cos() die Winkel in Radiant erwartet), dann multiplizier mit (PI/180), nicht mit (180/PI). Möglicherweise war's das schon.
 

Neue Beiträge

Zurück