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

Aktuelle Zeit: Do Jul 17, 2025 13:12

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



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: So Apr 20, 2008 19:47 
Offline
DGL Member
Benutzeravatar

Registriert: So Apr 13, 2008 09:52
Beiträge: 30
Hallo

Also ich hatte vor eine Bitmap bewegenzulassen.
Ich stellte mir das so vor:

Ich klicke auf eine Stelle (Momentan nur X Achse) und der Quad mit der Bitmap bewegt sich solange um sagen wir 0.02 Einheiten weiter bis er dort angekommen ist Wo ich hingeklickt habe.

Nun ist das Problem folgendes:
Im Delphi (und nicht nur im Delphi) ist die Nullstelle Oben Links
Bei Opengl sagen wir mal in der Mitte des Bildshirms wenn die Sicht so initialisiert wurde

Nun wenn ich aber zumbeispiel von Opengl ausgesehen 1 Einheit Rechts von der Mitte klicken würde dann wäre das aber als MausKoordinaten nicht dasselbe.

Ich hab echt keine Ahnung wie ich mich da anlegen sollte.
Die Bewegung wird mit einem Timer animiert.
Also immer wenn Timer abläuft bewegt er sich um 0.02

EDIT:
Ich habe auch eine Überprüfung eingebaut um zu sehen wenn ich Rechts vom Quad drücke dass er auch nach Rechts geht und umgekehrt
Aber wiegesagt ich hab dieses riesige Problem mit den Koordinaten.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Apr 20, 2008 22:00 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Siehe gl(Un)Project
Das löst das Problem. Auf Sulaco gibt es auch eine Demo mit ner Kiste, wo die Kiste an der Position der Maus ist.
Genau die Position willst du ja haben.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 21, 2008 07:21 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Die Billigste Version wäre (Falls du 2D willst), dein Koordinatensystem passend zu initialisieren. bei glOrtho kannst du ja angeben, welche Koordinaten die Linke-Obere und rechte-untere Ecke haben sollen.

Bei 3D wirds natürlich schwieriger, weil du einen Sichtkegel hast (Frustum) und nicht nur eine Ebene.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 21, 2008 08:26 
Offline
DGL Member
Benutzeravatar

Registriert: So Apr 13, 2008 09:52
Beiträge: 30
Vielen Dank
das war genau das was ich gesucht habe.

Ich habe zum testen erstmals den Code kopiert, doch hab ich eher 2 Probleme:

1. ich kann die Sicht nicht auf "Von Oben", also auf die X-Y-Achse von der Z-Achse draufschauen, stellen

Code:
  1. glMatrixMode(GL_PROJECTION);
  2. glLoadIdentity;
  3. glViewPort(0, 0, GLForm.ClientWidth, GLForm.ClientHeight);
  4. gluPerspective(60, GLForm.ClientWidth/GLForm.ClientHeight, 1, 256);
  5.  
  6. glMatrixMode(GL_MODELVIEW);
  7. glLoadIdentity;
  8. glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);


Bei vielen steht manchmal nur:

Code:
  1. glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);    // Clear The Screen And The Depth Buffer
  2.   glLoadIdentity();                                       // Reset The View
  3.  
  4.   glTranslatef(0.0,0.0,-5);
  5.  



wenn ich das so hinschreibe dann sieht man nichts mehr.

2. Problem ist dass wenn ich die Maus in der X-Achse bewege dann benimmt sich der Quad dementsprechend
aber in der Y-Achse flippt der Quad und bewegt sich nicht mit der gleichen Geschwindigkeit und wenn ich bisschen oberhalb der Mitte mit der Maus fahre
dann springt der Quad auf eine X-Achse und hängt dort bis ich mit der mua swieder etwas runtergeh

das liegt wahrscheinlich daran dass ich nicht in einem X-Y Plan sondern in einem X-Y-Z Plan liege oder?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Apr 21, 2008 10:39 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
1. Der Unterschied liegt darin, dass die Ansicht auf verschiedene Arten gesetzt werden kann und wird. Der eine Macht es direkt als erstes in der Renderfunktion und jemand anderes setzt sie nur im OnResize des Forms. Es genügt auch vollkommen, wenn man die Ansicht nur innerhalb des OnResize setzt, denn die Ansicht wird nur durch die Größe des Fensters verändert. Ansonsten ist das eigentlich überflüssige Arbeit. Außer, wenn man innerhalb des Renders zwischen 2D und 3D wechseln will.

Die Methoden glLoadIdentity, glMatrixMode und glClear musst du für dich nach Zugehörigkeit sortieren. Also um sie selber auseinander zu halten. MatrixMode (MatrixStack auswählen) und LoadIdentity (Matrix zurücksetzen) beeinflussen in diesem Falle die ModelViewMatrix und Clear leert nur die Buffer von OpenGL. So lange MatrixMode vor LoadIdentity aufgerufen wird ist alles okay. Wo Clear aufgerufen spielt erst mal keine Rolle. Da es einen ganz anderen Bereich beeinflusst. Welche Reihenfolge man leichter verstehen kann liegt an jedem selbst. Ich würde wohl zu erst Clear, leerzeile, MatrixMode, LoadIdentity machen.

2. Ich muss ehrlich gestehen, dass ich das nicht so ganz verstanden habe. Evtl wäre es hilfreich, wenn du etwas Code postet wie du es aktuell berechnet hast. Denn normal musst du nur anhand deiner X, Y Fensterkoordinaten und eines Tiefenwertes die Position innerhalb von OpenGL berechnen. Und dann entsprechend dein Quad an die Stelle verschieben.


Als Randanmerkung. Die Bewegung deines Quads um den fixen Wert 0.2 ist eher nicht zu empfehlen. Denn wenn deine Anwendung später mal mehr macht oder auf einem langsamerem System ausgeführt wird, dann wird die Animation verlangsamt dargestellt. Dazu solltest du aber mal Timebased_Movement anschauen. Und Fragen dazu bitte in einem neuen Thema. Sonst wird es nur unübersichtlich. Aber erst mal solltest du dich darum kümmern, dass es funktioniert. ;)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 3 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 | 16 Queries | GZIP : On ]