Hallo, ich stehe vor einem Problem. Ich will etwas wie ein Flachenetiket zeichnen:
also ein Polygon, welches auf einem Zylinder abgerollt ist. Habe das nun so probiert:
Code:
gluTessBeginPolygon(tess,nil);
gluTessBeginContour(tess);
for i :=1to AnzahlPunkte do
gluTessVertex(tess, Punkte[i].pkt,@Punkte[i]);
gluTessVertex(tess, Punkte[1].pkt,@Punkte[1]);
gluTessEndContour(tess);
gluTessEndPolygon(tess);
Nun hab ich aber das Problem, dass das Polygon nicht so tesseliert wird, wie ich es gerne hätte. Ich würde es hat gerne wie ein 'Flaschenetiket' haben. Bei dem was dabei herauskommt werden, sieht das aber alles aus wie ein strammgezogenes Tuch... gibt es da Möglichkeiten so etwas zu verwirklichen. (zu allem Überfluss kann es sich auch um konkave Polygone handen...)
nun ich kann mal eine Beschreibung der Form geben, die ich zeichnen möchte:
Alle Punkte liegen in der x-z-Ebene auf einem Radius. In dieser Ebene wird ein Viertelkreis dargestellt. In der 2D-Höhendarstellung habe ich zwei Linien, die durch eine beliebige Anzahl an Punkten definiert ist (eine oben und eine unten) und zwei Verbindungen. Ich brauche das für eine technische Darstellung. Bin gelernter Tischler und will einige Dinge in OpenGL darstellen...
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Nun...da wird es wohl das beste sein, wenn du dir Blender schnappst, dort die Dinge modelierst und dann (falls überhaupt noch nötig) exportierst und in deinem Programm wieder einlädst.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Nun ist einige Zeit vergangen und ich bin wieder auf mein Problem gestoßen... Habe leider noch keine Lösung gefunden die Möglichkeit das Polygon vorher zu modellieren ist auch nicht gegeben, da sich die Konturpunkte des Polygons erst zur Laufzeit ergeben.
Ich hatte ich die Idee (ich hoffe ich liege mit meiner Vorstellung der Funktionsweise von GLUPolygon nicht vollkommen falsch), dass man doch während der Callbacks alle neu gewonnen Punkte auf die "Flasche" projeziert. Meint Ihr das würde gehen??? oder ist so etwas der falsche Ansatz???
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Nö das is sogar ne recht gute Idee. Ich weiß zwar nicht wie es geht, ich weiß nur dass es geht - aber etwas komplizierter ist. Vielleicht musst du dazu 2 Renderpasses machen. Aber dafür gibts ja sicherlich ein paar Spezis hier im Forum.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Ich wiederhole mal: Du erzeugst Punkte in der X/Z Ebene, die ein (möglicherweise konkaves) Polygon bilden, das Du dann automatisch tesselieren (triangulieren) lässt. Die Tesselierung erzeugt nur ein flaches Mesh, weil auch das Polygon flach war und weil eine bloße Silhouette keine vollständige Information über ein Mesh liefern kann. Wenn Du dieses Mesh auf ein anderes 3D-Objekt angepasst haben willst, ist Dein Ansatz mit dem Projizieren zwar ganz richtig. Aber:
Am leichtesten hast Du es wenn Du gar kein 3D-Objekt hast, sondern - wie im Fall einer Flasche - nur eine bestimmte mathematisch erzeugbare Form haben willst. Dann brauchst Du fürs Projizieren eigentlich nur eine Funktion, die das flache Polygon (bzw. seine Punkte, die alle in einer Ebene liegen) an einen idealen Zylinder anpasst.
Wenn Du es aber auf ein existierendes anderes 3D-Objekt aufbringen willst (es gibt auch viereckige, bauchige etc. Flaschen), dann heisst das, dass Du ein Mesh auf ein anderen draufklebst aber das geht m.E. nur, wenn das neue Mesh in das alte "eingewebt" wird und das stell ich mir reichlich kompliziert vor.
Traude
Ich erkläre es nochmal: ich habe ein beliebiges Polygon (beispielsweise einen Stern). Die Konturpunte an sich habe ich schon so berechnet, das sie auf einem Zylinder liegen. Ich habe mich evtl. auch etwas mißverständlich ausgedrückt. Ich habe das Bild mit der Flasch nur zu Vorstellungszwecken benutzt. Ich will auch die kontur eigendlich gar nicht auf eine andere legen. Ich brauche die Polygone auf einen Radius gekrümmt... das Problem, dass ich habe, wenn ich die Kontur tesselieren lassen ist , dass ich Kanten bekomme, die nicht auf dem Radius, sondern in der direkten Verbindung der Konturpunkte liegen...
Registriert: Di Okt 03, 2006 14:07 Beiträge: 1277 Wohnort: Wien
Ich wollte damit nur sagen, dass der GluTesselator erwartet, dass die Kontur die Du übergibst auf einer Ebene liegt. Wenn Du ihm eine gebogene Kontur überreichst, kann nur Müll herauskommen. Er müsste ja gebogene Linien produzieren, und dafür fehlt ihm jegliche Info.
Du musst daher Deine Kontur auf einer Ebene erzeugen, diese dann tesselieren lassen und DANN ERST das entstandene Mesh in die richtige Form bringen. Das sollte keine Schwierigkeiten bereiten, denn die Konturpunkte konntest Du ja auch auf den Zylinder legen, jetzt machst Du einfach das gleiche mit den zusätzlichen Punkten, die aus der Tesselierung kommen.
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.