# 3D Koordinatensystem - Verzweifelung



## mordillo (13. Februar 2004)

Erst mal ein herzlichstes "Hallo" und nun gleich zu meinem Problem:

Wie kann ich in VB6 ein Gebilde aus einem 3Dimensoinalen KoordinatenSystem darstellen, ich bin schon langsam am Verzweifeln.
Muß ich das über die DirectX Schnittstelle machen ? (Dann hab ich verloren!), oder gehts auch einfach über das Picture Steuerelement?
Gibt es vielleicht ein schon solch ein Steuerelement?


Anwendungsbeispiel:

      X                             Y                           Z
1:   0                             0                           0
2:   100                        0                           100
3:   100                       100                        100
4:   0                            100                        0

Da sollte dann ein U-Förmiges Gebilde rauskommen, wenn man die Punkte mit Linien verbindet.


Wäre sehr nett, wenn mir da jemnad helfen könnte, Danke


Gruß
Mordillo


----------



## Daniel Toplak (13. Februar 2004)

Die Frage ist, was willst du eigentlich machen?
Wenn du richtig in 3D einsteigen willst, dann kommst du um DirectX oder OpenGL nicht herum.
Es sei denn du entscheidest dich eine eigene Library zu entwickeln, aber dann bitte nicht mit VB.
Wenn du "pseudo" 3D haben willst, dann schreib dir doch Allgorithmen, die 3D Koordinaten in 2D Koordinaten über eine perspektivische Ansicht umrechnen.

Gruß Homer


----------



## mordillo (17. Februar 2004)

Hi,

Danke für die Antwort, leider hilft sie mir nicht wirklich weiter.

Was will ich damit machen, ich Versuch es mal zu beschreiben:

Ich arbeite in einer Metallumformungsfirma, welche gestreckte Rohre "krumm" macht.

In welcher Art und Weise diese Rohre zu verbiegen sind, gibt uns der Kunde via Koordinatensystem vor.

Meine Aufgabe besteht darin eine theoretische Machbarkeit zu beurteilen. Hierzu wollte ich mir ein tool schreiben, welches dieses Rohr nun visualisiert.

Eine perspektivische Ansicht, wegen mir mit der Picturebox sollte mir da schon genügen.

Wie kann ich denn aus 3D Daten eine 2D perpektivische Ansicht erzeugen? Da ich auch mehr oder weniger blutiger Anfänger bin, bin ich um jeden Tipp dankbar.

So long


----------



## Daniel Toplak (17. Februar 2004)

Da du in einer Metallumformungsfirma Arbeitest, denke ich doch daß ihr auch CAD Anwendungen besitzt. Besteht denn da keine Möglichkeit das über ein Makro des jeweiligen CAD Programms arbeitest. Also sprich aus den 3D Koordinaten des Kunden ein Makro für z.B. Inventor, Catia oder äh zu erstellen.
Die meisten CAD Anwenundungen unterstützen da auch mehrere Formate (3DS, DXF, usw...).

Wenn du das allerdings selbst visualisieren möchtest, dann wird da OpenGL denke ich die besere Wahl sein.
Und glaub mir das geht auch in Verbindung mit VB (obwohl nicht unbeingt empfehlenswert). Außerdem ist es auch nicht so schwer sich in OpenGL einzuarbeiten.
Zudem hast du ja schon die Modelle vorliegen (als Koordinaten).

Wenn du selbst das ganze angehen möchtest über Perspektive, dann kann ich dir davon eigentlich nur abraten, denn das wird aufwendiger als die OpenGL Variante.
Wenn du dich aber denoch nicht abschrecken lässt, dann überleg mal ein wenig zurück in die Schulzeit, da hast du doch bestimmt Technisches Zeichnen gelernt oder?
Das kann dir da enorm viel helfen.

Gruß Homer


----------



## mordillo (20. Februar 2004)

Hi,

natürlich haben wir CAD Programme die das können, aber wo bleibt da der Spass 

Eine einfache Darstellung über die PictureBox hab ich nun auch endlich hinbekommen ( ohne Z-Achse :-( )

OpenGL (bibber) gibt es ebooks, wo man sich mal einlesen kann ?

Ich werd gleich mal die Suchfunktion anstrengen, falls du noch tipps haben solltest: Immer her damit ...

Danke


----------



## sra (20. Februar 2004)

opengl.org 
untergrund-spiele.de  <-- unter Tutorials / openGL hats ein paar gute... 

Allerdings kann ich mir das mit vb nicht so vorstellen
Das ist wie wenn man versucht mit 100 deutschen Worten die ganze Japanische Sprache zu übersetzten 

Aber... mach mal - nimmt mich wunder obs geht


----------



## Daniel Toplak (20. Februar 2004)

*OpenGL + VB*

Es geht schon mit OpenGL, hab schon projekte gesehen, bzw. Tutorials, einfach mal bei Google suchen. 
http://nehe.gamedev.net/ wäre da sehr zum empfehlen, die haben wunderschöne tutorials und auch Beispielcodes in zig Sprachen. (gibt es auch irgendwo auf deutsch übersetzt).


> natürlich haben wir CAD Programme die das können, aber wo bleibt da der Spass


Wenn das Ganze Spass sein soll, dann kannst du es ja machen wie du magst, ich denke da eher etwas produktiv, ich dachte da du das ja in der Firma machen musst, hast du da auch einen Zeitlichen Rahmen, wenn du allerdings die Freiheit hast das ganze zu machen wie du willst, dann is ja schön.
Zum Thema OpenGL kann ich dir schon einiges beisteuern.
Denn Anfang solltest du allerdings, selbst machen, wobei dir o.g. Link sehr behilflich sein wird.
Vorraussetzung ist natürlich, daß du dich mit VB schon einigermaßen auskennst.


> Allerdings kann ich mir das mit vb nicht so vorstellen  Das ist wie wenn man versucht mit 100 deutschen Worten die ganze Japanische Sprache zu übersetzten     Aber... mach mal - nimmt mich wunder obs geht


Naja ganz so schlimm ist nicht, eher als würde man mit nem Porsche mit angezogener Handbremse fahren. 
Für die Zwecke der Visualisierung von Rohren (die haben ja unter umständen nicht alzuviele Polygone) dürfte das schon reichen.

Also  wenn du dich an OpenGL ranmachen solltest und nicht weiterkommst, dann frag einfach.

Gruß Homer


----------



## mordillo (20. Februar 2004)

Erst einmal Vielen Dank. Da ich VB auch erst seit kurzem kennenlerne, wird das mit OpenGL in nächster Zeit wohl nix, schade.

Aber noch ne andere Frage: Ihr kennt doch alle diesen Bildschirmschoner der in Windows Integriert ist - *3D-Rohre*

Das wär doch quasi alles was ich benötige um meine Röhrchen korrekt darzustellen. Ist das auch mit OpenGL, oder DirectX aufgebaut, oder eher einfach ?


PS. Ich mach das alles in meiner Freizeit, da mir VB Spass macht und ich so das angenehme mit dem nützlichen Verbinden kann 


Gruß


----------



## Daniel Toplak (20. Februar 2004)

> Erst einmal Vielen Dank. Da ich VB auch erst seit kurzem kennenlerne, wird das mit OpenGL in nächster Zeit wohl nix, schade.


Ach das is halb so wild.
So eine Rohrvisualisierung ist ziemlich schnell geschrieben.





> Das wär doch quasi alles was ich benötige um meine Röhrchen korrekt darzustellen. Ist das auch mit OpenGL, oder DirectX aufgebaut, oder eher einfach ?


Das is OpenGL.

Gruß Homer


----------



## mordillo (25. Februar 2004)

Hi,

wie schnell wär das für dich ?
Was verstehst du unter 'schnell geschrieben' ?

Wenn du jetzt mit 1-2 Stunden anfängst, dann muß ich mich mit meinem schlechten Englisch doch durch das Thema schieben ...


Danke


----------



## Daniel Toplak (28. Februar 2004)

> wie schnell wär das für dich ?  Was verstehst du unter 'schnell geschrieben' ?


Das hängt davon ab, wie deine 3D Koordinaten für die Rohre vorliegen, gib mal ein Beispiel.


> Wenn du jetzt mit 1-2 Stunden anfängst, dann muß ich mich mit meinem schlechten Englisch doch durch das Thema schieben ...


Naja 1-2 Stunden werden da nicht ausreichen. Es sei denn du bist schon absolut fit in OpenGL und VB. Nicht mal dann wäre das in 1-2 Stunden geschrieben.
Allerdings solltest du dir genau im klaren sein was du möchtest und außerdem auch die Vorteile eines OpenGL Displays sehen:
 - echte 3D Ansicht
 - Du kannst dein Objetkt drehen, zoomen und verschieben
 - gute Verarbeitung von bestehenden 3D Geometriedaten
 - usw...

Natürlich will ich dich nicht von der Picturebox abhalten, aber da hast du hald keine echte 3D Ansicht.

Gruß Homer


----------



## mordillo (28. Februar 2004)

Hi, 

Ein Beispiel, ok.

Also die Daten liegen z.B. in folgendem Format vor:
Position-------X-------------Y-------------Z---------------Radius
1----------------1194,30----121,70-----	34,30-------	0
2----------------1126,30----191,80-----	35,30-------	35
3----------------966,50------10,50------	23,20-------	35
4----------------924,80----	-115,70-----	92,10-------	35
5----------------924,80----	-157,70-----	92,10--------	35
6----------------949,90----	-195,60-----	87,60-------	35
7----------------949,90----	-347,10-----	92,10-------	35
8----------------628,40----	-347,10-----	92,10-------	35
9----------------578,30----	-385,80-----	28,90-------	35
10--------------505,00----	-385,80-----	28,90--------	35
11--------------565,50----	-346,50-----	120,40-------35
12--------------162,80----	-346,50-----	253,40------	35
13--------------122,20----	-307,00-----	280,00------	35
14--------------121,10----	-265,40-----	360,00------	35
15--------------112,40----	-181,40-----	359,10------	35
16---------------26,20-----	-69,90-------	340,80------	35
17---------------26,20------50,00--------340,80------35
18---------------69,50------102,50------	303,80------35
19---------------177,70----102,50------	321,90------35

Da ich kaum etwas über OpenGL und VB gefunden hab, hab ich mich entschieden eine dll in C++ zu schreiben auf die mein VB zugreift. Leichtergesagt als getan mußte ich schmerzlich feststellen.
Bis jetzt hab ich es nicht mal hinbekommen ein Sample zu kopieren und in MSVC6 zum laufen zu bringen.

Wie du schon sagtest sollten alle Merkmale die du aufgeführt hast vorhanden sein (zoom, drehen etc.)

Ich denke wenn ich mit VC6 mal klarkommen würde, schreibn ich da einfach ne executable und rufe diese per Shell unter VB auf. Naja, da bin ich noch lange nicht, muß erstmal so klar kommen.

Sind eigentlich die OpenGL Dateien (glut.h / glut32.lib etc. ) immer alle gleich, oder benötige ich extra Versionen für MSVC6 ?

Gruß


----------



## Daniel Toplak (28. Februar 2004)

> Ein Beispiel, ok.
> Also die Daten liegen z.B. in folgendem Format vor:
> Position-------X-------------Y-------------Z---------------Radius
> 1----------------1194,30----121,70----- 34,30------- 0
> ...


Was sind das für Koordinaten? 
Bezugspunkte?
Und in welchem Zusammenhang steht dabei der Radius?


> Da ich kaum etwas über OpenGL und VB gefunden hab,


Wie gesagt: http://nehe.gamedev.net/
Dort gibt es (zumindestens für die anfangs-lessons) auch VB-Codebeispiele.

Gruß Homer


----------



## mordillo (28. Februar 2004)

Hi,

Nunja die Daten sind eben die Maßpunkte auf den Achsen in einem gewöhnlichen 3D - Koordinatenfeld.

Da es sich um Rohre handelt, haben die Verbindungspunkte zwischen den Geraden natürlich einen Radius, in diesem Fall soll das 35mm sein.

Gint es bei OpenGL eine Function glTUBE, das wär der Hit, dann könnt ich auf schnellem weg zumindest teilerfolg haben  und besser in OpenGL einsteigen (Verständnismäßig).


Gruß


----------



## Daniel Toplak (2. März 2004)

Also ein glTUBE gibt es nicht aber gluCylinder, allerdings wird dabei GLUT benötigt, was eine Zusatzlibrary für OpenGL ist. Und ich bin mir nicht sicher, ob das auch unter VB einsetztbar ist, aber ich denke schon.
Mit dem GLUT kann man relativ bequem primitiven Zeichnen (Zylinder, Kugel, oder äh).
Aber da du ja gebogenen Rohre erstellen möchtest, würde ich dir zu einer reinen Verarbeitung von Koordineten raten.
Ich würde das ganze in etwa so machen:
Zunächst hast du für dein Rohr einige Referenzpunkte (also die Querschnitte) die du als Kreise betrachtest (bzw. als Vielecke, es gibt ja keine Kreise in 3D) sagen wir mal mit einer Unterteilung von etwa 48 oder 72 oder mehr (je nach Grafik, bzw. Rechenpower)
von diesen Kreisen benötigst du dann einfach nur die 3D Koardinaten vom Mittelpunkt und den Radius, und den Vektor, wie der Kreis im Raum steht.
Gezeichnet werden diese Pseudokreise nicht, sondern es werden dann nur die Eckpunkte für die Hülle verwednet.
Jetzt hast du sagen wir mal 10 Kreise für ein bestimmtes Rohr, nun verbindest du die Eckpunkte der Kreise (ich weiß Kreise haben keine Ecken, in OpenGL sind das ja auch Vielecke, s.o.). Somit hast du dann ein Drahtgitter, des Rohres.
Das nur aus den Ausenlinien besteht.
In wirklichkeit sind das allerdings Polygone bzw. Dreiecke.
Als Anhang hab ich mal ein Bild rein, was den Vorgang etwas verdeutlicht. (ist allerdings mal schnell mit einem 3D Programm erstellt worden).

Wenn du dann da noch eine entsprechende Textur drauflegst, und die Normalenvektoren berechnen lässt, und die Szene entsprechend ausleuchtetst, dann sieht das ganz nett und vorallem auch RUND aus.

Das ganze klinkt jetzt aufwendiger als es scheint, glaub mir, wenn du ein wenig Mathematikverständnis und Programmierverständnis mitbringst, dann kannst du sowas in ein paar Tagen fertig haben.

Außerdem hast du ja noch tutorials.de (und mich  ).


Überleg dir das ganze gut, ob du das mal schnell unprofessionell machen willst, oder ob du das gleich gescheit machen willst.

Gruß Homer


----------



## Daniel Toplak (15. März 2004)

Nur mal interesshalber, was ist aus deinem Projekt geworden?

Gruß Homer


----------



## mordillo (15. März 2004)

Hi,

Ja eigentlich sollte das zu bewerkstelligen sein, allerdings scheiterts an einigen Verständnisproblemen.

Die Seite von NeHe ist ja prima, allerdings ist mein Englisch zu bescheiden um wirklich etwas damit anfangen zu können.

Auch fehlen immer wieder einige Libs um etwas zum laufen zu bekommen.

(glut.h, glaux.h etc. ) Ich finde sie einfach nicht. Desweiteren fehlt mir immer noch das verständnis (Sprachprblem Englisch) wie das ganze initialisiert wird (glInit)

Desweiteren ist mir immer noch nix eingefallen, wie ich die Radien zeichnen könnte, da die geforderten Winkel sehr viel spitzer und die Radien sehr viel kleiner sind als in deinem Beispiel.

Wenns doch was gutes in Deutsch geben würde, hach wär das schön.

Aber Vielen Dank für dein Interesse, freue mich sehr.



Gruß


----------



## Daniel Toplak (15. März 2004)

Wie gesagt, es gibt die NeHe Tutorials auch auf deutsch. Sind zwar nicht alle, aber auf alle Fälle die wichtigsten. Man muss nur etwas suchen:
http://www.codeworx.org/opengl_tuts.php

Warum machst du das jetzt nicht in VB, ich dachte da hast du schon Erfahrungen für deine Zwecke sollte da VB schon ausreichend sein.

Das mit den Radien und Größen ist alles relativ.
Was meinst du mit "spizer" wie sieht denn so ein Beispielrohr aus, mach doch mal ne grobe Zeichnung.

Gruß Homer


----------



## mordillo (16. März 2004)

Hi,

hier mal ein Screenshot von der bisherigen Programmversion mit der Grafikansicht via PictureBox:



Hab jetzt 2 Tage Urlaub. Mal sehen ob ich in der Zeit was gerlernt bekomme 

Gruß

PS: Warum machst du das nicht in VB --- Weil es für VB umsoweniger Beispiele gibt ... Aber ich versuche und Suche nochmal ...


----------



## mordillo (16. März 2004)

Hi ...

Folgendes Quadrat via Maus zu Manipulieren (Größe, Drehrichtung, Farbe etc. ) war doch ziemlich einfach

glBegin bmQuads                     ' Draw A Quad
        glColor3f 0#, 1#, 0#                    ' Set The Color To Blue
        glVertex3f 1#, 1#, -1#                  ' Top Right Of The Quad  Top)
        glVertex3f -1#, 1#, -1#                 ' Top Left Of The Quad  Top)
        glVertex3f -1#, 1#, 1#                  ' Bottom Left Of The Quad  Top)
        glVertex3f 1#, 1#, 1#                   ' Bottom Right Of The Quad  Top)
        glColor3f 1#, 0.5, 0#                   ' Set The Color To Orange
        glVertex3f 1#, -1#, 1#                  ' Top Right Of The Quad  Bottom)
        glVertex3f -1#, -1#, 1#                 ' Top Left Of The Quad  Bottom)
        glVertex3f -1#, -1#, -1#                ' Bottom Left Of The Quad  Bottom)
        glVertex3f 1#, -1#, -1#                 ' Bottom Right Of The Quad  Bottom)
        glColor3f 1#, 0#, 0#                    ' Set The Color To Red
        glVertex3f 1#, 1#, 1#                   ' Top Right Of The Quad  Front)
        glVertex3f -1#, 1#, 1#                  ' Top Left Of The Quad  Front)
        glVertex3f -1#, -1#, 1#                 ' Bottom Left Of The Quad  Front)
        glVertex3f 1#, -1#, 1#                  ' Bottom Right Of The Quad  Front)
        glColor3f 1#, 1#, 0#                    ' Set The Color To Yellow
        glVertex3f 1#, -1#, -1#                 ' Bottom Left Of The Quad  Back)
        glVertex3f -1#, -1#, -1#                ' Bottom Right Of The Quad  Back)
        glVertex3f -1#, 1#, -1#                 ' Top Right Of The Quad  Back)
        glVertex3f 1#, 1#, -1#                  ' Top Left Of The Quad  Back)
        glColor3f 0#, 0#, 1#                    ' Set The Color To Blue
        glVertex3f -1#, 1#, 1#                  ' Top Right Of The Quad  Left)
        glVertex3f -1#, 1#, -1#                 ' Top Left Of The Quad  Left)
        glVertex3f -1#, -1#, -1#                ' Bottom Left Of The Quad  Left)
        glVertex3f -1#, -1#, 1#                 ' Bottom Right Of The Quad  Left)
        glColor3f 1#, 0#, 1#                    ' Set The Color To Violet
        glVertex3f 1#, 1#, -1#                  ' Top Right Of The Quad  Right)
        glVertex3f 1#, 1#, 1#                   ' Top Left Of The Quad  Right)
        glVertex3f 1#, -1#, 1#                  ' Bottom Left Of The Quad  Right)
        glVertex3f 1#, -1#, -1#                 ' Bottom Right Of The Quad  Right)
    glEnd                               ' Done Drawing The Quad

Hier jedoch meine Fragen:
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 ?


----------



## Daniel Toplak (16. März 2004)

> 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


----------



## mordillo (16. März 2004)

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 ...


----------



## Daniel Toplak (16. März 2004)

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


----------



## Daniel Toplak (17. März 2004)

Ups Bild Vergessen.


----------



## mordillo (17. März 2004)

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 ?


----------



## mordillo (17. März 2004)

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ß


----------



## Daniel Toplak (17. März 2004)

> 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:


```
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


----------



## mordillo (17. März 2004)

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:
> 
> ...



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ß


----------



## Daniel Toplak (19. April 2004)

Was ist eigentlich aus deinem Projekt geworden?
Mal interessehalber nachfrag.

Gruß Homer


----------



## mordillo (2. Mai 2004)

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


----------



## Daniel Toplak (2. Mai 2004)

Kannst du das mal etwas genauer erklären? Evtl. mit Zeichnung, ich hab da jetzt keine Ahnung was du damit meinst.

Gruß Homer


----------



## mordillo (4. Mai 2004)

Hi,
ich will es mal versuchen.

Unten siehst du den unter Punkt 1, den Biegewinkel zwischen Koordinatenpunkt 1 und 3. Bis hierhin kann ja noch keine Verdrehung stattgefunden haben, logisch.

Unter Punkt 2 siehst du nun den Verdrehwinkel zwischen Koordinatenpunkt 1 und 4. Diesen Winkel kann ich relativ vom letzen aus berechnen.

Stellt man sich jetzt vor man würde auf dem unteren Gebilde entlanggehen, so wären die von mir bezeichneten Biegewinkel gleichzusetzen mit Bergen und Tälern und die Verdrehwinkel mit Abzweigen im Weg. Mein Problem ist nun: Ich weiß zwar um wieviel grad ich abbiegen muß, allerdings nicht ob links oder rechts

Ich hoffe es einigermaßen verständlich erklärt zu haben.

Gruß


----------



## Daniel Toplak (5. Mai 2004)

Ich glaube ich habe dich verstanden.
Das mit dem Wegbeispiel ist da sehr gut, ich knüpfe mal daran an:
Du musst versuchen dich mehr in ein 3D Koordinatensystem reinzudenken, sprich mit der X,Y,Z-Achse denken.
Kurz:
(0,0,0) ist idR. dein Bildschirmmittelpunkt.
Die X Achse geht von links nach rechts. Wobei links vom Mittelpunkt negativ und rechts positiv.
Die Y Achse geht von unten nach oben. Wobei unten vom Mittelpunkt negativ und oben positiv.
Die Z Achse geht von hinten durch den Monitor zu dir (als Betrachter) (als würde jemand einen Strahl von hinten durch den Monitor schießen und dich treffen, hoffentlich tut das niemand  ). Wobei vom Mittelpunkt in den "Monitor rein" negativ ist und aus dem Monitor raus zu dir positiv ist.

So zurück zu dem Wegbeispiel:

Stell dir vor du fängst bei (0,0,0) an zu laufen, was dem Mittelpunkt deines Monitors entspricht. (der Z wert ist zwar idR. außerhalb des Monitors auf deiner Nase, aber das is egal)

Jetzt hast du ja dir Koordinaten der Punkte z.B.:

P   = x,y,z
----------------
P1 = 0,0,0
P2 = 1,2,-3
P3 = 3,-1,4
usw...
Ok fangen wir an zu "laufen" von 
P1 nach P2
- wir gehen also +1 in X-Richtung also nach rechts
- dann +2 in Y-Richtung also nach oben
- dann -3 in Z-Richtung also nach hinten (merke richtung Monitorrückseite)
Dann laufen wir weiter nach P3
- wir gehen also +2 in X-Richtung ( (+3) -(+1) = +2) also nach rechts
- dann -3 in Y-Richtung ( (+2) - (-1) = -3 ) also nach unten
- dann +7 in Z-Richtung ( (+4) - (-3) = +7) also nach vorne (merke in dene Richtung).

So und somit kannst du ja auch festlegen, daß die Winkel positve bzw. negativ sind.

Betrachtet man das Mathematisch, dann sind glaub ich rechtsdrehende Winkel Positiv und linksdrehende Winkel negativ.
Also wenn du dann nach unten (-y) und nach vorne (+z) gehst, dann wäre der Winkel positv und umgekehrt wäre er negativ (+y und -z).

Eine weitere Möglichkeit wäre aber auch, nur mit positven Winkeln zu rechnen:
Sagen wir einemal, du hast einen Winkel von 30° nach rechts, dann entspräche das bei einer Biegung nach links im selben Winkel 330° .

So ich hoffe ich konnte dich mal wieder weiterbringen.
Ansonsten, versuch daß Ganze bitte noch etwas ausführlicher zu erklären, evtl eine bessere Zeichnung.

Gruß Homer


----------

