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

Aktuelle Zeit: Mi Jul 16, 2025 15:38

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 23 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Per Selection eine Maussteuerung
BeitragVerfasst: Sa Mär 05, 2005 11:49 
Offline
DGL Member

Registriert: Sa Mär 05, 2005 11:40
Beiträge: 13
Wohnort: Berlin
Hallo!

Ich bin gerade an einem Projekt (erst kürzlich auf Delphi und OpenGL gestoßen), wobei ich eine Figur auf einer Karte bewegen möchte. Hab mir bereits den A* Algorithmus angeschaut - war nicht einfach aber hab ihn erfolgreich implementiert und optimiert.

Jetzt würde ich aber gerne per Mausklick meine Figur auf eine bestimmte Stelle der Karte bewegen. Sprich: Der User klickt irgendwohin und ich weiß genau wo er hin will. Wie mach ich das am besten?

Ich habe überlegt per Blending unsichtbare Quads einzufügen die ein Stück über dem Fußboden liegen und per OpenGL Selection Methode das Quadrat herauszufinden - X und Z des Quadrats hab ich vorher in einem Array mit noch ein paar mehr Informationen gespeichert. Das ganze soll halt aus der Isoperspektive stattfinden - wie bei C&C zum Beispiel.

Würde mich freuen, wenn jemand eine Lösung parat hat!

Thx


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 05, 2005 11:56 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Also aus technischen Gründen wirst Du in jedem Fall auf einer Art "Quadrat-Karte" zurückgreifen werden. Wie zeichnest Du den bisher die Karte? Sofern Du diese überhaupt in irgend einer Form dynamisch anpassen willst, wirst Du ja bereits dafür ein Array haben, dass daraus die Karte zeichnet (z.B. unterschiedliche Höhen oder sowas). Das ist dann auch der Ansatzpunkt für Dich. Da solltest Du nicht mit unsichtbaren Quads herangehen, die wichtigen Informationen sollten ja bereits alle da sein. Oder wo habe ich dich falsch verstanden? ;)

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 05, 2005 12:04 
Offline
DGL Member

Registriert: Sa Mär 05, 2005 11:40
Beiträge: 13
Wohnort: Berlin
Zur Zeit ist die Karte im Bitmap-Format, ich lese Pixel für Pixel aus und sehe zur Zeit nur, ob ein Weg ist oder nicht. Soll später erst komplexer werden, wollte erstmal rumspielen.

Ja, im Prinzip ist es ein Array mit den Werten schon mal vorgespeichert, aber trotzdem isses jetzt nicht einfacher das zu machen oder? =) Das mit der Quadrat-Karte is richtig - ich wollte die ganze Karte in Sektoren unterteilen - halt relativ klein, damit der User sich relativ frei bewegen kann.

Hoffe du verstehst jetzt was ich meine :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 05, 2005 12:20 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Du kannst deine Bitmapkarte mit deiner Kästchenkarte kombinieren. Du kannst ja eifach die Texturkoordinaten für jedes Kästchen berechnen (was nicht schwer ist) und die Selection dann einfach Pro Kästchen machen. Sollte eigentlich ganz gängig sein.

Vorschlag der dich interessieren könnte:

Anstatt eine Textur für die ganze Karte zu nehmen solltest du Texturen für verschiedene Untergründe machen. Je nachdem welcher Untergrundtyp ein Kästchen hat bekommt das dann die entsprechende Textur verpasst.

Vorteile:
-Die Texturen werden nicht so groß gezerrt
-Du kannst dir nen Karteneditor basteln mit dem du verschiedene Karten für dein MännlÜberKarteBewegen-Projekt basteln kannst
- Die zeichenroutine in deinem Editor ist die selbe wie in deinem Projekt. (Der Mehraufwandt hält sich in Grenzen.)

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 05, 2005 12:26 
Offline
DGL Member

Registriert: Sa Mär 05, 2005 11:40
Beiträge: 13
Wohnort: Berlin
Ich nehm mal an, ich hab dich verstanden, wenn nicht berichtige mich :).

Aber ich hab jetzt relativ große Quadrate als Fußboden, per Vertex3f sinds 4x4 groß. Sind Einheiten und keine x-Werte kann das sein? Wie auch immer - ich habe es hinbekommen, dass der User auf eines der Quadrate klickt und dann weiß ich wo er hin will - geht ja auch! Nun is mir das Quadrat aber zu groß und ich wollte es unterteilen. Wenn ich das aber in 16 Quadrate zB unterteile müsste ich doch dann auch 16 Texturen anstatt einer haben, oder?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 05, 2005 12:33 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Du kanst doch eine Textur mehrfach draufkleben. Also Jedes Viereck mit der selben textur.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 05, 2005 12:36 
Offline
DGL Member

Registriert: Sa Mär 05, 2005 11:40
Beiträge: 13
Wohnort: Berlin
mh ja stimmt schon.. Außer die Textur ist etwas besonders, wie eine Straße oder ähnliches (durch die Mittelstriche, etc).

Aber ich hab trotzdem noch nicht ganz verstanden, wie ich die Karte jetzt fein unterteilen könnte, um genug Bereiche für das Selection Verfahren zu haben - ist alles ein bischen schwierig :( gibt auch kein Tutorial dazu oder ähnliche Beschreibungen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 05, 2005 13:15 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
Hmmm. Ich hab dass Ganze jetzt blos überflogen, sorry, wenn das schon gefallen ist, aber wie wärs mir gluProject?
Damit bekommst du die Position der Maus in deiner "Welt" und kannst dann deine Figur da hinschicken.
http://wiki.delphigl.com/index.php/GluProject

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 05, 2005 13:22 
Offline
DGL Member

Registriert: Sa Mär 05, 2005 11:40
Beiträge: 13
Wohnort: Berlin
hey kool!

GluUnProject könnte mir eine sehr gute Hilfe in diesem Zusammenhang sein!
Is glaube ich auch nütlich für den Rest des Spiels =)

danke!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 05, 2005 14:39 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 14, 2004 18:56
Beiträge: 804
Wohnort: GER/OBB/TÖL-WOR/Greiling
da der thread gerade passt:

was ist denn bei glu(un)project bittes sehr winz??

_________________
Bild

"User Error. Replace User and hit Continue."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 05, 2005 15:03 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
Also der Code, um die Koordinaten herauszufinden, sieht folgendermaßen aus: (C++, hab auf die Schnelle nix besseres gefunden)
Code:
  1.    double modelview[16], projection[16];
  2.    int viewport[4];          
  3.    glGetDoublev(GL_MODELVIEW_MATRIX, modelview );
  4.    glGetDoublev(GL_PROJECTION_MATRIX, projection );
  5.    glGetIntegerv(GL_VIEWPORT, viewport );
  6.                      
  7.    int X, Y;        
  8.    float Z;                  
  9.    double PosX, PosY, PosZ;    
  10.  
  11.    X= mouse_x;
  12.    Y= viewport[3]- mouse_y;
  13.    glReadPixels(X, SimpleRoundTo(Y, 0), 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &Z );
  14.    gluUnProject(X, Y, Z, modelview, projection, viewport, &PosX, &PosY, &PosZ);
  15.  

Z, bzw winz ist die Entfernung des Pixels vom Beobachter.

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 05, 2005 15:37 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 14, 2004 18:56
Beiträge: 804
Wohnort: GER/OBB/TÖL-WOR/Greiling
ah ja. dann ist alles klar. gluunproject nimmt also praktisch alle manipulationen(gltranslate, glrotate, glscale) aus dem ergebnis raus und zeigt mir die "echten" koordinaten, so wie ich sie beim glvertex eingegeben habe. :?:

_________________
Bild

"User Error. Replace User and hit Continue."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 05, 2005 16:17 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
Nein, das hast du falsch verstanden. glReadPixels liesst die virtuelle Z-Position des Pixels, an dem sich der Mauszeiger befindet, aus. Dabei werden natürlich nur bis zum Funktionsaufruf gezeichnete Objekte/Pixel einbezogen. Wenn du also einfach ein Viereck 2 Einheiten vom Beobachter wegzeichnest, dann liefert dir diese Funktion -2. gluProject nimmt dann diese Werte und rechnet sie so um, dass du drei Koordinaten von der Stelle hast, an der ein imaginärer Mauszeiger, der in der Welt rumfliegt, praktisch das erste Objekt trifft. Diese Koordinaten entsprechen dann wiederum "richtigen" OGL-Koordinaten und können direkt nach dem Funtkionsaufruf weiterverwendet werden.
Zum Bleistift habe ich diese Funktionen dazu verwendet, um praktisch pixelgenau Objekte mit der Maus auf einem Terrain zu verschieben. Pseudocode:
Code:
  1.  
  2. 1. Terrain zeichnen;
  3.  
  4. 2. glReadPixels/gluProject um Mausposition in der Szene herauszufinden;
  5.  
  6. 3. glTranslatef(Werte_aus_2.)
  7.  
  8. 4. Objekt zeichnen

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 05, 2005 16:54 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 14, 2004 18:56
Beiträge: 804
Wohnort: GER/OBB/TÖL-WOR/Greiling
nein, du hast falsch verstanden, dass ich es nicht so verstanden hätte, wie du es verstehst. ich habe es nämlich genauso verstanden, wie du gerade geschrieben hast, dass es zu verstehen sei. verstanden? :D

_________________
Bild

"User Error. Replace User and hit Continue."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 05, 2005 17:08 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
Nein :wink:

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


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


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.012s | 14 Queries | GZIP : On ]