Seite 1 von 1

Linien zeichnen (In 3D)

Verfasst: 05.07.2012, 12:43
von Stimpy
Einen wunderschönen guten Mittag,

herjeh - Schon wieder stecke ich in meinem Projekt fest, da ich mal wieder an der Lösung verzweifel :( Ich hoffe ich gehe euch nicht auf den Senkel :roll:

Mein Problem ist folgendes:

Stage3D kennt keine Primitive, leider, lediglich Triangle. Es gibt keine Linien, Punkte, TriangleStrips oder sonst irgendwas. Das ist an sich auch nicht weiter schlimm - Sofern man nicht auf einmal doch Linien zeichnen muss. Doch genau dies muss ich jetzt, in 3D Linien zeichnen. Das ganze funktioniert auch so halbwegs schon, allerdings sehen die Linien je nach Winkel o.ä. immer anders aus. Hier einmal ein Beispiel:

Bild

Mein bisheriger Ansatz war es, den Start-Vektor - Ziel-Vektor zu subtrahieren, dadurch habe ich den ViewVector. Und diesen gehe ich so dick meine Linie sein soll vom Start Punkt weg. Das selbe beim Zielpunkt und so erhalte ich meine 4 Punkte.

Klappt ganz gut, leider allerdings weit entfernt von wirklich gleich dicken Linien.

Der Quelltext sieht so aus:

Code: Alles auswählen

		public function lineTo(x1:Number, y1:Number, x2:Number,y2:Number):void
		{
			
			var size:Number = 0.5;
			var z:Number = -5;
			
			addIndex(mVertexCount); addIndex(mVertexCount + 3); addIndex(mVertexCount +1);
			addIndex(mVertexCount + 2); addIndex( mVertexCount + 3); addIndex(mVertexCount);
		
			var tmp:CVertex = new CVertex(x1,y1,z);
			tmp.minus(new CVertex(x2,y2,z));
			tmp.normalize(tmp);
			
			// Von DrawPosition zu X,Y,Z
			addVertex(new CVertex(x1, y1, z));
			addColor(0, 0, 0); addUV(0, 0); addNormal(new CVertex(0, 0, -1));
			
			addVertex(new CVertex(x1 + (tmp.x / 3), y1 + (tmp.y / 3), z));
			addColor(0, 0, 0); addUV(1, 0); addNormal(new CVertex(0, 0, -1));
			
			addVertex(new CVertex(x2, y2, z));
			addColor(0, 0, 0); addUV(0, 1); addNormal(new CVertex(0, 0, -1));
			
			addVertex(new CVertex(x2 + (tmp.x / 2), y2 + (tmp.y / 2), z));
			addColor(0, 0, 0); addUV(1, 1); addNormal(new CVertex(0, 0, -1));
		}
Hat hier jemand evtl. eine Idee wie man es besser macht?

Vielen Vielen Dank!

Re: Linien zeichnen (In 3D)

Verfasst: 05.07.2012, 12:58
von dot
Mal die Linien im Viewspace, also Start und Endpunkt mit der Viewmatrix transformieren und dann zwischen diesen Punkten eine Linie malen ohne World Matrix ;)

Re: Linien zeichnen (In 3D)

Verfasst: 05.07.2012, 13:06
von Stimpy
Meinst du jetzt sozusagen WorldToScreen umrechnung und dann mit Flash 2D die Linie zeichnen?!?!! Wenn ja, dann würde dies nicht gehen da die Linie schon in 3D da sein müsste.

Re: Linien zeichnen (In 3D)

Verfasst: 05.07.2012, 14:17
von eXile
dot hat geschrieben:Mal die Linien im Viewspace, also Start und Endpunkt mit der Viewmatrix transformieren und dann zwischen diesen Punkten eine Linie malen ohne World Matrix ;)
Das würde noch nicht ausreichen, weil man für überall gleich dicke Linien mindestens bis in den Projection-Space transformieren muss. D.h. für solche Linien muss man die Model-, View- und Projection-Matrizen invertieren, wenn du eine davon nicht hast, wird es schwierig.

Re: Linien zeichnen (In 3D)

Verfasst: 05.07.2012, 14:33
von dot
Das ist natürlich richtig. Ich ging nur davon aus, dass er mit "gleich dick" nicht tatsächlich überall die selbe Linienbreite meint, sondern eigentlich einfach nur einen stetigen Verlauf der Linienbreite, da er ja "3D" will...

Re: Linien zeichnen (In 3D)

Verfasst: 05.07.2012, 15:13
von eXile
Achso, ja, das kann sein; dann hast du natürlich vollkommen recht! In dem Falle geht das auch ohne Projektionsmatrix, und zwar so:

Bild