3D Koordinatensystem - Verzweifelung

PS: Warum machst du das nicht in VB --- Weil es für VB umsoweniger Beispiele gibt ... Aber ich versuche und Suche nochmal ...
Das ist halb so wild, denn die Aufrufe von OpenGL sind gleich, nur das Datenhandling mit Arrays und Datenstrukturen ist in VB natürlich anders im Vergleich zu C bzw. zu C++.
Aber da du ja schon ein ganz ordendliches Programm hast, welches ja in VB geschrieben ist oder, würde ich bei VB bleiben und einfach die 3D Ansicht in die Oberfläche integrieren.
Nur Mut.
Als Initial wird bmQuads angegeben, welche Formeninitials gibt es denn noch ? Ausser bmQuads und bmTriangles kennt er nix, ist das richtig, oder gibts da noch mehr ?
Schau mal in der MSDN nach, dort gibt es sehr wohl etwas mehrere Arten.
Was für dich am ehesten in Frage kommt in deinem Fall wäre GL_TRIANGLE_STRIP bzw. noch einfacher GL_QUAD_STRIP.
Wenn du das Prinzip verstanden hast, dann wirst du es am Ende ziemlich einfach haben.

Außerdem hast du noch einen entscheidenden Vorteil:
du must nicht unbedingt 50-200 Frames hinbekommen (wobei das bestimmt möglich ist, auch in VB mit einer GForce 4 MX (was ja heute schon unterer Standard ist)).
Denn wenn du nur 20 Frames in deiner 3D-Ansicht hast, ist das auch kein Beinbruch weil es ja nur eine 3D-Vorschau ist und kein Mega 3D-Spiel.

Gruß Homer

P.S.: ich bleich auf alle Fälle dran und hilf dir dabei.

Gruß Homer
 
Hi,

erstmal vielen Dank für deine Hilfe und dein Interesse :)

Wie sähe es denn ( der einfachheit halber ) mit GL_LINE_STRIP aus ?

Und wie rufe ich diese in der MSDN angegebenen GL_XXX in VB auf ?

Das zeichnen ansich ist ja wirklich nicht so schwer ( NeHe Tuts 1-9 ) das drumherum macht da doch sehr viel mehr arbeit ...


Gruß

EDIT: Habs schon gefunden und Linien mit GL_LINE_STRIP gezeichnet ..
Werd die nächsten zwei Tage mal rumexperimentieren ...
 
Zuletzt bearbeitet:
Also ich würde das persöhnlich nicht mit einem GL_LINE_STRIP machen, da du mit einem GL_QUAD_STRIP z.B. viel mehr Kontrolle über das Mesh (das Drahtgittermodell) hast.
Außerdem finde ich wäre das einfacher zu implementieren.

Nochmal eine grobe Vorgehensweise:

Du hast ein Rohr das der Länge nach sagen wir 4 mal unterteilt ist und im Querschnitt eine Unterteilung von 12, d.h. ein "Kreis" wir durch 12 Eckpunkte bestimmt. Daraus ergibt sich dann ein Rohr.
Ich hab das mal als Bild angehängt.

So jetzt hast du für diese 4 Längsunterteilungen 6 "Kreise" mit (in diesem Fall) gleichen Radien (größe is irrelevant). Da ein Kreis ja bekanntlich 360° Hat unterteilst du 360/12 = 30. Also alle 30 Grad haben wir einen Eckpunkt eines Kreises.
Nennen wir diese Eckpunkte mal 1-12. Und die 6 Kreise A-F somit können wir alle Eckpunkte leicht bennenen. (A1-F12).
So jetzt zeichnen wir also mit GL_QUAD_STRIP 12 Quadrate und das insgesamt 5 mal.
Die Reihenfolge ist von A nach F wir brauchen aber immer 2 Stück um die QUAD's zu zeichnen also:
A-B
B-C
C-D
D-E
E-F
Von der Vertex Reichenfolge würde das so aussehen:
A1->B1->B2->A2
A3->B3->B4->A4
A5->B5->B6->A6
usw...
Das ergibt dann 5*12 = 60 QUAD's

In diesem Fall sieht das natürlich sehr grob aus, aber das soll ja nur den Weg verdeutlichen.
Die Koordinaten der Eckpunkte musst du natürlich berechnen, dazu hast du ja 3 Angaben zu jedem Kreis:
- Radius
- Koordinaten des Mittelpunkts
- Vektor vom Mittelpunkt (liegt Senkrecht auf der Imaginären Kreisfläche im Mittelpunkt)
Anhand von ein bischen Trigonometrie und Vektorberechnung lassen sich dann Alle Eckpunkte berechnen.
Die Anzahl der Eckpunkte kannst du dann Variabel bestimmen.
Von mindestens 3 (was dann ein Dreiecksprisma und kein Zylinder bzw. Rohr ergeben würde) bis x (wobei x natürlich abhängig von der Rechenpower bzw. von der Grafikkarte ist). Die Unterteilung muss übrigens nicht so sehr hoch sein, denn wenn dann am Ende noch die Normalenvektoren richtig berechnet werden und eine Beleuchtung eingerichtet ist, dann sieht das auch bei einer Unterteilung von 24 oder so schon "sehr" Rund aus. (Diese Verfahren ist übrigens bekannt aus dem Goraud-Shader).
So ich hoffe das die Ganze sache langsam Verständlicher wird.

Gruß Homer
 
Zuletzt bearbeitet:
Hiu ui ui, du bist echt gut. Respekt.

Wenn ich das richtig verstanden hab, liegen die Eckpunkte der Quads auf einer Kreisbahn um meine Mittelpunktkoordinaten im Abstand r richtig ? OK das kann ich berechnen, aber wie verbinde ich die Quads untereinander ?
 
Hi,

So ich habs es jetzt doch erstmal auf die ganz einfache Tour via Line_Strip gezeichnet. Unten mal ein Bild vom Ergebnis.

Die Anwendung lässt sich jetzt zoomen, auf allen ebenen drehen und ich kann das XYZ - File einlesen und zeichnen.

Irgendwie freu ich mich jetzt schon ein bisserl :)

Hab zwar nicht alles selbst gemacht ( Teilweise Code kopiert, wegen der Faulheit :) ), aber bin schon einen Schritt weiter.

Werde nun versuchen das ganze schöner zu gestalten ... mal sehen

Gruß
 

Anhänge

  • opengl_linestrip.jpg
    opengl_linestrip.jpg
    8,2 KB · Aufrufe: 174
Hiu ui ui, du bist echt gut. Respekt.
Danke. :)
Wenn ich das richtig verstanden hab, liegen die Eckpunkte der Quads auf einer Kreisbahn um meine Mittelpunktkoordinaten im Abstand r richtig ? OK das kann ich berechnen, aber wie verbinde ich die Quads untereinander ?
Richtig die Eckpunkte liegen auf der Kreisbahn.
Wichtig ist dabei nur, daß den den Vektor mit einbeziehst, sonst weißt du ja nicht, wie ein "imaginärer" Kreis im Raum "liegt".
Die Quads verbindest du ganz einfach in dem du Immer 4 Punkte setzt also z.B. so:

Code:
glBegin bmQuads ' Draw A Quad
 ' Quad A
 glVertex3f  x, y, z  ' Vertex A1
 glVertex3f  x, y, z  ' Vertex B1
 glVertex3f  x, y, z  ' Vertex B2
 glVertex3f  x, y, z  ' Vertex A2
' usw
glEnd
Wobei du natürlich die berechneten Werte für x,y,z einsetzten musst.

Gruß Homer
 
Daniel Toplak hat gesagt.:
Richtig die Eckpunkte liegen auf der Kreisbahn.
Wichtig ist dabei nur, daß den den Vektor mit einbeziehst, sonst weißt du ja nicht, wie ein "imaginärer" Kreis im Raum "liegt".
Die Quads verbindest du ganz einfach in dem du Immer 4 Punkte setzt also z.B. so:

Code:
glBegin bmQuads ' Draw A Quad
 ' Quad A
 glVertex3f  x, y, z  ' Vertex A1
 glVertex3f  x, y, z  ' Vertex B1
 glVertex3f  x, y, z  ' Vertex B2
 glVertex3f  x, y, z  ' Vertex A2
' usw
glEnd

Ja nee, das ist klar, ich mein wie ich die im raum stehenden Polygone dann untereinader verbinde, quasi das Drahtgitter in Längsrichtung um dann optisch ein Rohr zu bekommen.


Gruß
 
Sorry das ich mich so lange nicht gemeldet hab - Prüfungsstreß der wohl noch bis Ende Oktober anhalten wird (Ja wenn man Zeitnah lernen würde hätt man das Problem nicht :) )

Status:

Ich konnte das alles gut in mein Projekt (anderes Programm) einfügen und bin mit der LINE_STRIP Methode eigentlich zufrieden.

Open GL ist wirklich ne Prima Sache und wenn man die ganzen Initals mal geschrieben hatt, ist es ja fast einfacher als ne PictureBox anzusprechen ;)

Doch nun ein neues Mathematisches Problem, weil ich das Programm um eine Simulation erweitern will, also um eine Entwicklung aus der gestreckten Länge zum umgeformten Teil.

Ich berechne aus den Koordinaten die Verfahrwege und die Dreh-, Biegewinkel. Mein Problem ist jetzt: Die Drehwinkel benötigen ein Signum, welches Positiv, oder Negativ ist, da ich ja nach jeder Länger relativ neu drehen muß(rechts oder links). Leider bekomm ich es einfach nicht hin dieses Signum zu berechnen (Die Winkel schon, sind nur immer positiv).
Meine Frage:
Wie kann ich den Verdrehwinkel zwischen den Koordinaten korrekt berechnen um eine saubere Simulation zu bekommen.

Danke im vorraus - (Kann sein das ich nicht sofort antworte falls jemand Rat weiß, wie gesagt, Streß am Hals)


Gruß

Mordillo
 

Neue Beiträge

Zurück