AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Linie zeichen OpenGL

Ein Thema von EWeiss · begonnen am 17. Mai 2008 · letzter Beitrag vom 17. Mai 2008
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

Linie zeichen OpenGL

  Alt 17. Mai 2008, 09:45
Ich verwende das gluUnProject um die koordinaten der Mausposition ins OpenGl Format umrechnen zu lassen.

jetzt möchte ich zum testen der Position vier Linien zeichnen
die von den 4 Ecken des GLWindow ausgehen und sich an der Mausposition treffen sollen.

Jemand ne Idee ? Wie ich die zeichnen kann.

Möchte damit testen ob die Mausposition passend zum OpenGl Window ist.
Irgendwas scheint nicht zu stimmen.

Delphi-Quellcode:
vLine[1] := MousePosToOpenGl(FMousePos.X, FMousePos.Y);
  
glBegin(GL_LINES);
glVertex2f(x1, y1);
glVertex2f(x2, y2);
glEnd();
wie vLine[1] an glVertex2f übergeben ?

vLine[1] enthält ja 3 positionen vLine[1][0], vLine[1]{1], vLine[1][2]
benötige aber nur 2

Das wäre nur 1 Linie

gruss Emil
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Linie zeichen OpenGL

  Alt 17. Mai 2008, 09:58
Die z Koordinate ist ja in deinem Fall uninteressant.
Markus Kinzler
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

Re: Linie zeichen OpenGL

  Alt 17. Mai 2008, 10:06
Zitat von mkinzler:
Die z Koordinate ist ja in deinem Fall uninteressant.
Jo das stimmt ..
Bringt mich aber nicht weiter
kann da eingeben was ich will ist aber nur rätzelraten.

hmmm....

gruss Emil
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#4

Re: Linie zeichen OpenGL

  Alt 17. Mai 2008, 10:16
Zitat von EWeiss:
Bringt mich aber nicht weiter
kann da eingeben was ich will ist aber nur rätzelraten.

hmmm....
Hi,
sorry aber wen soll das jetzt weiter bringen? Du stellst eine Frage und bekommst doch eine gute Antwort (dass eben die drei Koordinaten x, y und z sind und Du natürlich nur x und y übergeben musst).
Wie genau bringt es Dich denn nicht weiter, was hast Du eingegeben und was passiert dabei? Oder sollen die Leute, die Dir helfen sollen jetzt rätselraten?

Hast Du denn überhaupt mal (ganz ohne Maus) erfolgreich eine Linie zeichnen können, die Du gut siehst? Zeichne doch einfach mal eine solche als Winkelhalbierende durch Dein OpenGL - Fenster. Dann kennst Du ja die Koordinaten der Linie. Nun kannst Du einfach mal mit der Maus über diese Linie fahren und schauen, ob die berechnete (OpenGL) Position des Mauszeigers auch tatsächlich auf der OpenGL-Linie liegt.
Wenn das stimmt, dann kannst Du natürlich leicht das Programm so umwandeln, dass Du auch Linien ziehst.

Gruß,
Der Unwissende
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

Re: Linie zeichen OpenGL

  Alt 17. Mai 2008, 10:31
Zitat:
sorry aber wen soll das jetzt weiter bringen? Du stellst eine Frage und bekommst doch eine gute Antwort (dass eben die drei Koordinaten x, y und z sind und Du natürlich nur x und y übergeben musst).
Wie genau bringt es Dich denn nicht weiter, was hast Du eingegeben und was passiert dabei? Oder sollen die Leute, die Dir helfen sollen jetzt rätselraten?
Habe verstanden was mkinzler mir damit sagen wollte.
raten mußt du nix ..

aber Z brauch ich trotzdem da ich die kameraposition mit berücksichtigen muss.
so einfach ist es also doch nicht.

hab es schon gelößt

trotzdem Danke

gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von idontwantaname
idontwantaname

Registriert seit: 31. Aug 2004
Ort: Traiskirchen
575 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Linie zeichen OpenGL

  Alt 17. Mai 2008, 10:53
Hi!

Ich kenn mich zwar nur mit DirectX aus, aber 3D-Mathematik bleibt 3D-Mathematik Irgendwie verstehe ich deinen Code nicht ganz.

Du errechnest dir aus deiner Mausposition ein Array mit 3 Werten x, y und z. Du nimmst an, das ist ein Punkt, was jedoch nicht sein kann, denn an der Stelle der Maus können sich unendlich viele Punkte im Raum befinden. Sprich, du kannst dir höchstens einen Strahl ausrechnen, eine Gerade, deren Punkte auf den Bildschirm an die Mausposition projiziert werden.

Warum benötigst du nur 2 Koordinaten? Es scheint so, als ob du nicht im 3D-Raum zeichnest, sondern in 2D. Welchen Sinn macht es, die Mauskoordinaten in den dreidimensionalen Raum umzurechnen, wenn du zweidimensionale Linien zeichnest? Die x/y-Werte der Mausposition entsprechen doch schon den Koordinaten auf der 2D-Bildfläche (höchstens dass OpenGL in einem Intervall von [0,1] rechnet und du das noch berücksichtigen musst).

Und zu guter letzt wäre es noch nett, deinen Lösungsweg hier zu beschreiben. Jemand anderer, der eventuell das selbe Problem hat, kann dann von deiner Vorarbeit profitieren. Ansonsten ist dieser Thread relativ unnötig, da zwar das Problem, nicht aber die Lösung präsentiert wird.

Lg oli
Oliver Hanappi
Besucht meine neue Homepage: http://oli.hux.de
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Linie zeichen OpenGL

  Alt 17. Mai 2008, 11:01
Dan übergebe doch alle x, y, z statt nur x, y
Markus Kinzler
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

Re: Linie zeichen OpenGL

  Alt 17. Mai 2008, 11:11
Mein problem ist dies.
Ich versuche ein objekt zu identifizieren auf dem ich eine aktion ausführen kann wenn denn mal gefunden.

Dafür benutze ich

Delphi-Quellcode:
      if IntersectedPolygonf(vQuad, vLine, 4 , nil) then
      begin
        glColor3f(1.0, 0.0, 0.0);
        // Dieses Quad liegt unter der Maus
      end
Das mit der Linie habe ich verworfen und benutze zum testen lediglich eine Farbe die sich verändert
wenn das Objekt getroffen wird.

Es wird aber nicht getroffen .. deshalb mein ansatz mit dem zeichnen der Linien
was aber nicht geht da ich mehrere Viewports auf der Oberfläsche habe.


Delphi-Quellcode:
  // Kamera ausrichten, damit man was sieht
  glTranslatef(0, -7, -30);

  // Maus verarbeiten
  if FMousePos.X > 0 then
  begin
  if FMousePos.X < 50 then
     ListAngle := ListAngle - pi/4 * ADeltaTime
  else
  if FMousePos.X > _FNormal.Image1.Width - 50 then
     ListAngle := ListAngle + pi/4 * ADeltaTime;
  end;

  vLine[0] := Vector_Make3f(0, 7, 30); // die von glTanslate, nur mal -1
  vLine[1] := MousePosToOpenGl(FMousePos.X, FMousePos.Y);
Diese abfrage MousePosToOpenGl sollte mir eigentlich die korrekte position der Maus zum OpenGL Window zurückgeben
was sie aber nicht tut.
Finde einfache den Fehler nicht.

Deshalb meine überlegung das mal gegenzuprüfen mit einer Linie
welche von der oberen linken ecke zur aktuellen Mausposition gezogen wird damit ich sehen kann ob das Objekt getroffen wird.

Aber leider geht das mit der aktuellen Kameraposition nicht.

Zitat:
Dan übergebe doch alle x, y, z statt nur x, y
habe ich
über glVertex3f

gruss Emil
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz