Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Jul 16, 2025 17:13

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 65 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5  Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 24, 2006 15:38 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Hallo,

jaaaaaaaa, das hab ich nun schon x mal ansehen sollen und hab ich auch gemacht.
Aber das löst mein Problem nicht. Ich möchte doch einfach nur an den koordinaten 12,51,0 etwas darstellen und das dann drehen können.
Ich möchte nicht um 0,0,0 zeichnen, das macht sich schlecht wegen den Koordinaten.

Matthias


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 24, 2006 15:47 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Nun dann musst du erst Translate aufrufen und dann rotieren.

Also erst ans ziel verschieben, und dann ausrichten. Nur musst du dann deine Vertexkoordinaten entsprechend ausrichten.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 24, 2006 15:56 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Hallo,

sorry, aber das mach ich doch so, oder nicht ?
Ist denn hier was falsch ??????

Code:
  1.  
  2. procedure TForm1.Render;
  3. begin
  4.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  5.   glLoadIdentity;
  6.  
  7.   // Erst Translate
  8.   glTranslatef(-11.5, -50.5, -10);
  9.   // und hier jetzt Rotate oder ????????????????????????
  10.   // sobald ich hier was anderes als 0 als Winkel eingebe seh ich nix mehr ??
  11.   // weiss nicht wohin das dann verschwindet, aber es scheint sich um irgendeine
  12.   // andere Achse zu drehen
  13.   glRotatef(0,1,0,0);
  14.  
  15.   glBegin(GL_QUADS);
  16.     glColor3f(1, 0, 0); glVertex3f( 12, 51, 0);
  17.     glColor3f(0, 1, 0); glVertex3f( 11, 51, 0);
  18.     glColor3f(0, 0, 1); glVertex3f( 11, 50 , 0);
  19.     glColor3f(1, 1, 0); glVertex3f( 12, 50 , 0);
  20.   glEnd;
  21.  
  22.   SwapBuffers(DC);
  23. end;
  24.  


Ist da irgendwas falsch dran ?

Wenn ich einen anderen Winkel als 0 eingebe sieht man den Effekt.
Bei 1 oder 2 als winkel geht es noch, aber mehr geht nicht, dann is alles weg.
Es scheint sicht irgendwie um eine andere Achse zu drehen ?????

Matthias


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 24, 2006 16:22 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
nun... deine Objekte liegen alle wie bereits gesagt in der Z-Ebene (Dein Z-Wert ist constant). Jetzt möchtest du aber um die Y-Achse drehen. Ich schätze dadurch versaust du dir die ausgabe. Du musst um die Z-Achse drehen.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 24, 2006 16:42 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Hallo,

ahm erst mal danke für die Antwort.

Aber wieso liegen meine Objekte denn in der Z-Achse ?
Hab ich jetzt nen totalen flash ??

glVertex3F(12,51,0) ist doch von 0,0,0 aus gesehen 12 schritte nach Rechts(x) und 51(y) schritte nach oben
und 0 Schritte nach vorne/hinten(z) oder etwa nicht ?

Hä ? jetzt versteh ich nix mehr...sorry

Matthias


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 24, 2006 17:03 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 26, 2002 22:12
Beiträge: 259
Wohnort: Dresden
@Koordinaten:
Ja da hast du Recht. Ich vermute Phobeus hat sich hier verschrieben.

@glRotate:
glRotate rotiert immer um den Ursprung. Genau das passiert auch. Du möchtest aber dein Viereck um die eigene Achse drehen. Damit musst du sicherstellen, dass der Koordinatenursprung auch auf der Achse deines Vierecks liegt. Der gewünschte Rotationspunkt liegt aber sehr weit vom Koordinatenursprung entfernt (-11.5, -50.5, -5). Das ganze ist auch ganz logisch. Möchtest du, dass sich ein Würfel um einen bestimmten Punkt dreht, dann muss sich jedes Viereck, das eine Fläche des Würfels bildet etwas anders verhalten als die anderen. Wie hängt vom Rotationspunkt ab.
Am einfachsten ist es, wenn du dein Viereck direkt so definierst, dass der Rotationspunkt im Ursprung liegt und du die Verschiebung komplett mittels glTranslate vornimmst.

Irgendwie habe ich das Gefühl, dass wir im Moment alle heftig aneinander vorbeireden.

_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 24, 2006 17:18 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Hallo,

ich glaub auch das wir jetzt irgendwie aneinander vorbei geredet haben. Deswegen wusstet Ihr sicher auch nicht genau was ich will. Daher auch die ( sorry ) Antworten , die sicher funktionieren, aber eben nicht für das was ich machen will.

Also hier nochmal zwei Bilder, die genau aussagen was ich machen will :

Das ganze soll mal so eine Art Flugplaner werden, ist es schon, ich möchte eben nnur die Strecke anzeigen lassen.
Also hier die draufsicht. So soll das Aussehen wenn es erst mal nur gezeichnet ist.
Leipzig hat halt als Koordinaten irgendwas bei Y=51 und X=12.
Frankfurt weiss ich nicht, sagen wir Y=49 und X=8...als Beispiel

Bild

So, wenn das alles auf der Scene ist soll sich das GANZE drehen und danach, wenn man also genau auf die Z-Achse


((((((((( EDIT SORRY nicht Z sondern Y-Achse )))))))))))))))))))


schauen würde so aussehen:

Bild

Also um die X-Achse gedreht.
Y geht dann "in den Bildschirm hinein und in die andere richtung hinter mich", X wie gehabt von links (-) bis rechts (+).
Z geht dann von unten (-) nach oben (+).

Ich glaube jetzt wisst Ihr was ich meine.

Das muss doch möglich sein, das ganze, nachdem alles gezichnet ist, um die Waagerechte Achse zu drehen.
Muss doch gehen oder ?

Dank Euch für die Hilfe !!
Matthias


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 24, 2006 18:00 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 26, 2002 22:12
Beiträge: 259
Wohnort: Dresden
Du hast also ne riesige Welt in der alle Flughafen eingezeichnet sind und du möchtest dann 2 herauspicken, die Flugroute zeichnen, die beiden Flughäfen ins Blickfeld holen und dann die ganze Welt quasi drehen.
Dann kannst du in etwa wie folgt vorgehen

Code:
  1. glLoadIdentity;
  2. //dein Abstand zum Blickpunkt/Flughafen
  3. glTranslatef(0, 0, -5);            
  4. //dein Rotationswinkel
  5. glRotatef(Angle, 1, 0, 0);
  6. //Deine Kameraposition (invertiert)
  7. glTranslatef(-11.5, -50.5, 0);
  8.                        
  9. //Dein Flughafen etc.
  10. glBegin(GL_QUADS);
  11. glColor3f(1, 0, 0); glVertex3f(12, 51, 0);
  12. glColor3f(0, 1, 0); glVertex3f(11, 51, 0);
  13. glColor3f(0, 0, 1); glVertex3f(11, 50, 0);
  14. glColor3f(1, 1, 0); glVertex3f(12, 50, 0);
  15. glEnd;

_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 24, 2006 18:20 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Hallöchen,

ich habs grad getestet , FUNKTIONIERT.... ich bin echt happy !!!!!!!!!!!!!!!

DANKE DIR !!!!!!!


Die frage ist nur warum ?
Ich will ja nicht einfach nur den Code von Dir verwenden sondern es auch verstehen warum das so geht.

Also...

Mit dem ersten Translatef setze ich die Position auf 0,0,-5 .
dann wird das ganze gedreht mit glRotateF(winkel, 1,0,0); um die X Achse, genau so wie ich es wollte. aber warum denn am Punkt 0,0,-5 ??

und dann wird die Kamera verschoben auf den Flughafen.

Hmmmm, echt toll das das jetzt geht, aber ich würd wirklich zu gerne wissen warum.
Die WIKI ist ja echt nicht schlecht, aber seid mal ehrlich....DAS steht doch da nicht drin oder bin ich denn wirklich sooooooooo blind ?

Matthias ... Dankt Euch


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Feb 24, 2006 18:53 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 26, 2002 22:12
Beiträge: 259
Wohnort: Dresden
Eigentlich ist das doch logisch. Du weißt jede Matrixmanipulation wirkt sich auf alle folgenden aus.
Du denkst also rückwärts. Der Ursprung liegt 0, 0, 0. Dein Quad bei x, y, z. Du willst aber um den Mittelpunkt des Quads rotieren. Also verschiebst du das Quad in den Ursprung (-x, -y, -z). Jetzt kannst du beliebig rotieren. Damit du nun noch was siehst verschiebst du das ganze etwas ins Bild hinein.
Ich hätte nur gedacht, dass das ganze recht klar in den Tutorials rüber kommt :(. Da lag ich wohl falsch.

_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 25, 2006 15:08 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Hallo,

naja, ich würde vielleicht nicht unbedingt sagen das in den Turorials schlecht rüberkommt.
Was ich dort jedoch vermisse ( auch in der WIKI ) sind so einige Beispiele an denen
man sehen kann wie man die einzelnen Befehle einsetzen kann.
Eine rotation zb. an 0,0,0 zu erklären ist ja gut, aber dazu vielleicht mal noch ein spezielles Beispiel wie das halt so geht wie ich das gerade brauchte.
So wird es für einen blutigen Anfänger wie mich sicher einfacher das ganze nachzuvollziehen.

Nun mal zu meinem nächsten problem:

Ich hab ja nun mein gezeichnetes am Punkt irgendwo bei 51,12,x. Drehen geht jetzt, das ist toll.
Wenn ich mit einem Button oder ähnlichen sage das ich daas ganze an einem anderen Punkt zentriert haben möchte geht das auch wunderbar ! Danke übrigens nochmal !!

So, jetzt hätt ich aber gerne noch das ich das mit der Maus verschieben kann.
Also ich möchte mit der Maus auf mein Panel ( da drin läuft das ganze, da ich den Rest der Form noch für was anderes brauche ) entweder klicken oder am besten mit der Linken maustaste ziehen und dann soll die Scene der Maus folgen.
Ich hoffe ihr wisst was ich meine ???

Also ich hab da ja nun schon rumprobiert, so ist es ja nicht, hab auch gelesen und gefunden das das mit glGet funktionieren sollte.
( um das oben gesagte zu untermauern ..... )
So, also in der Wiki hab ich dann folgendes herausbekommen :

Zitat:
GL_MODELVIEW_MATRIX
params liefert 16 Werte zurück. Diese entsprechen den 16 Werten der Modelview-Matrix die als letztes auf den Modelview-Matrixstack gelegt wurde.

So, ( man muss ja davon ausgehen das hier jemand ist der von OGL noch keine Ahnung hat, wie ich ) jetzt weiss ich das das ganze etwa so aussehen muss :

glGet( GL_MODELVIEW_MATRIX ); Mehr steht da ja erst mal nicht, allerdings ist da ja ein Link zur Modelview Matrix, also drauf geklickt...dort steht erst mal das hier ..

Zitat:
GL_MODELVIEW
Legt Position und Größe des zu zeichnenden Primitiven fest


hmm, scheint richtig zu sein...POSITION und grösse..ist ja genau das was ich will, die Position verändern, also weiterlesen.
Da steht wie Matritzen multipliziert werden und wie bestimmte berechnungen gemacht werden...das ist echt alles nicht schlecht. Mit glLoadIdentity mach ich dann die verschobene Matrix zu einer identitätsmatrix, was wohl heisst das diese dann aktiv ist und angezeigt wird. Sich also alles nun auf diese bezieht.
Das wärs ja, aber wie war das noch mal ... wo steht denn nun wie ich das machen muss ???

Bis jetzt weiss ich nur das hier : glGet( GL_MODELVIEW_MATRIX ); . Gut, ich hab da noch gefunden das der Rückgabewert einVector ist :

Code:
  1.  
  2. TVektor = record X,Y,Z,W:glFloat end;
  3. TMatrix = array[(mat_XAchse,mat_YAchse,mat_ZAchse,mat_Position)]of TVektor;
  4. PMatrix = ^TMatrix;
  5.  


Aber wie mach ich das denn nun.

Verstht Ihr was ich damit sagen möchte ? Es wird ja , was echt toll ist Hut ab, alles mögliche erklärt, aber nicht wie man das was ich machen will nun machen kann.
Da fehlen mal so ein Beispiel oder zwei.

Wie geht das denn nun ?
Alle anderen Links hab ich probiert, da komm ich nur wieder zum Inhalt zurück.

Das einige war der Link zu glLoadMatrix, welcher mich hier hingeführt hat :
http://wiki.delphigl.com/index.php/glLoadMatrix

Das bin ich grad am lesen. Da steht aber nix wie ich das mit der Maus in verbindung bringe, oder hab ich irgendwo was überlesen, bin falsch vorgegangen oder so ?
Berichtigt mich bitte falls das so sein sollte und vielleicht kann mir ja auch jemand einen anstupser in die richtige richtung geben ?

Dank Euch
Matthias


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 25, 2006 18:30 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Viel zu kompliziert gedacht!

Du nimmst dir das OnMouseDown-Event und speicherst deine MouseCoord irgendwohin, und auch den Tastenstatus. Dann tust du im MouseMove-Event die Positionsänderung immer schön abspeichern. Anhand dieser Kannst du dann mit glTranslate() deine Objekte verschieben. Die Modelviewmatrix kannste da schön in Ruhe lassen.

Und wegen den Beispielen: Am Ende des Tutorial Matrix2 findest du ein Tool mit dem du solche Sachen ausprobieren kannst.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 25, 2006 18:33 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 26, 2002 22:12
Beiträge: 259
Wohnort: Dresden
OpenGL ist eine GrafikAPI, die möglichst plattformunabhängig sein soll. Es ist keineswegs gegeben, dass deine Plattform überhaupt eine Maus hat. Daraus lässt sich schließen, dass es auch keinen OpenGL-Befehl dafür geben wird.
Das macht aber auch nichts, schließlich bietet dir Delphi die VCL. Dort gibt es diverse Ereignisse wie OnMouseMove etc. Die genau das tun, was du brauchst.
Du musst dir immer zuerst die Frage stellen, wie du etwas umsetzen willst und was du dafür benötigst. Es kann nicht für alles eine Funktion geben (und das ist auch gut so).
Für dein konkretes Problem brauchst du lediglich die Mauskoordinaten zu verschiedenen Zeitpunkten um daraus die Mausbewegung des Nutzers ermittelt zu können.

_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 25, 2006 18:43 
Offline
DGL Member

Registriert: So Feb 19, 2006 18:52
Beiträge: 110
Hallöchen,

ja, das mit der Mouse Position hab ich schon versucht, oder bin dabei...naja, ich werds schon hinbekommen.

Zu den beiden Tool....

1. gib mal glTranslate(12,51,0) ein, bei welchem ist egal.
Dannn siehst Du gar nix mehr.
Wenn man sich das nicht gleich so denken kann, das das alles an 0,0,0 gezeichnet und dann verschoben wird, dann kommt man einfach nicht auf den Trichter ers 12,51,0 zu translaten und dann -12,-51,0 zu machen.
Ist jedenfalls bei mir so.

Ach so, was zu dem Skizzenrenderer, da kommt ein Fehler wenn man das letzte Element aus der Liste löschen will und dann geht nur noch TaskBeenden .
Könnt ja mal danach schauen. Ist mir schon das letzte mal aufgefallen, aber ich dachte ich hab irgendwas falsches eingegeben.

Matthias


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Feb 26, 2006 01:55 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Immer noch? Ich hab heute eine neue Version hochgeladen, bei der das nichtmehr passieren sollte.

Das du mit 12 und 52 aus dem Fenster rausbist ist ja zu verstehn, oder. Du sollst es ja auch mal mit paar kleineren Werten ausprobieren. Das Prinzip bleibt dabei das gleiche. OpenGL macht das selbe bei glTranslate(500,20000,11) wie bei glTranslate(5,200,0.11). Der unterschied ist einfach nur Quantitativ, aber nicht Qualitativ. ;)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 65 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste


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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 15 Queries | GZIP : On ]