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

Aktuelle Zeit: Fr Jul 18, 2025 20:07

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



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: selektion und rechteck
BeitragVerfasst: Mi Okt 11, 2006 18:44 
Offline
DGL Member

Registriert: Mi Mär 08, 2006 17:38
Beiträge: 153
Wohnort: Rümmelsheim (bei Bingen)
hey,
bin grad bei der selektion und versuch es in meinen mapeditor reinzupacken. Das klappt auch schon gut. nur will ich jetzt nicht n ur gugen was auf einem Punkt P(x1,x2) liegt, sondern was in einem kompletten Rechteck liegt.
wie geht das ?! einfach ne for do schleife jeden punkt testen der im rechteck liegt. oder gibts da ne schönere lösung ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 11, 2006 21:06 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ja das wäre eine Möglichkeit aber einfacher wäre es, wenn du die größe der gluPickMatrix veränderst. ;-) Dann weitet sich die Selektion aus. Achte aber darauf, dass dein Puffer groß genug ist. Um so größer die Pickmatrix um so mehr Objekte können ausgewählt werden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Okt 11, 2006 22:00 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Problem dabei ist, dass du extra noch herausfinden musst welche von den vielen Objekten überhaupt sichtbar sind. Wenn die Pickmatrix sehr klein ist, geht das ja recht einfach. Sobald die sich weitet ist das aber mit dem Z-Wert vergleich nicht mehr die Lösung (oder irre ich mich hier)

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 12, 2006 07:49 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Eigentlich hast du damit durchaus recht. Aber ich denke mal es kommt ganz darauf an was man vor hat. Wobei ich auch gestehen muss, dass ich das bisher selber noch nie gemacht habe. Das auf jeden Fall mal vorweg. Ich weiß also nicht welcher Z-Wert dann in dem Feedbackbuffer steht oder ob für jedes Pixel dort ein Wert drinne steht. Aber bei einem MapEditor ist es denke ich mal nicht ganz so schwierig das so zu machen. Also es dürfte wohl darauf hinaus laufen, dass man alle Einträge auswählen möchte.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 12, 2006 09:50 
Offline
DGL Member
Benutzeravatar

Registriert: Do Aug 25, 2005 16:00
Beiträge: 189
Programmiersprache: Java, C#
Das hört sich für mich ganz nach ner "sweep selection" an, also das du beispielsweise mit der Maus ein Rechteck ziehst und alles was in dem Rechteck liegt wird selektiert. Kanns sein das du so was vorhast?
Denn dann würde das verändern der gluPickMatrix nit viel bringen.

Nen eigenen Vorschlag hätt ich jetzt allerdings nit anzubieten...

cya,
Deathball


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 12, 2006 10:59 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Deathball hat geschrieben:
Denn dann würde das verändern der gluPickMatrix nit viel bringen.

Hmmm. Mich würde interessieren warum das nichts bringt?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 12, 2006 11:57 
Offline
DGL Member

Registriert: Mo Dez 20, 2004 08:58
Beiträge: 442
Wohnort: Mittweida (Sachsen)
Im Buffer steht je Treffer der kleinste und größte Tiefenwert.
Je kleiner also die Selection-Matrix, umso näher sind sich die beiden Werte und umso unwarscheinlicher ist es, dass zwei selektierte Objekte gegenseitig voreinander sind. Darum kann man auch bei normaler Selektion den größten Z-Wert ignorieren.
Es ist also bei einer größeren selektierten Fläche nur umständlicher herauszufinden, welches Objekt nun das vorderste ist, da sich ie Warscheinlichkeit erhöht, dass sich im Selektierten Bereich zwei Objekte überschneiden (also (zmin1>smin2)<>(zmax2>zmax2)).
Wenn also nur interessant ist, welche Objekte sich in dem Bereich befinden, spricht überhaut nix gegen eine größere Selection-Matrix (ausser der Puffergröße).

p.s.: mit Objekt ist hier immer OpebGL-Objekt, also angegebener Name(ID) gemeint.

_________________
Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Okt 12, 2006 13:18 
Offline
DGL Member
Benutzeravatar

Registriert: Do Aug 25, 2005 16:00
Beiträge: 189
Programmiersprache: Java, C#
Naja, ich bin jetzt davon ausgegangen das er wirklich ne Sweep Selection meint.
Er meinte ja außerdem das er nen MapEditor programmiert. Das heißt imho er will mehrere Tiles/Vertizes/was weiß ich auf einmal selektieren um dann die Eigenschaften von allen selektierten gleichzeitig zu ändern.
Wenn ich jetzt die gluPickMatrix vergrößere, dann wird ja der Radius in dem ich selektiere, wahrscheinlich um den Mauszeiger, in alle Richtungen größer (es sei denn ich steh grad aufm Schlauch).
Das is bei nem MapEditor aber eigentlich nicht gewollt, sondern der User soll selbst ein Rechteck definieren in dem selektiert werden. Und da kann es sein das er gerne nur die Dinge links vom Mauszeiger, aber nicht die rechts auswählen möchte. Deswegen würde ein verändern der gluPickMatrix imho nicht viel bringen.

Oder kanns sein das ich grad voll aufm Schlauch steh?

cya,
Deathball


edit: HALT!!!!!!!!! Denkfehler gefunden. Dachte das der Selektionsbereich in alle Richtungen gleich vergrößert wird, is aber natürlich Schwachsinn...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Okt 14, 2006 15:21 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 02, 2003 12:47
Beiträge: 300
Wohnort: Marburg
Ich habs so gelöst:

setzen der Matrix:

Code:
  1. ...
  2.   DX:=round(X-X2);
  3.   DY:=round(Y-Y2);
  4.   if DX<0 then DX:=-DX
  5.   else
  6.     if DX=0 then DX:=2;
  7.   if DY<0 then DY:=-DY
  8.   else
  9.     if DY=0 then DY:=2;
  10.   gluPickMatrix(round((X+X2)/2), viewport[3]-round((Y+Y2)/2),DX,DY, viewport);
  11. ...


X,Y,X2,Y2 sind die beiden Punkte des rechtecks (Also mauskoordinaten beim Klicken und LLoslassen der taste).
DX,DY ist die rechteckgröße (die muss man auf mind. 1 setzen).

Code:
  1. ...
  2.   for i := 0 to Treffer-1 do begin
  3.     getroffen       := Puffer[(i*4)+3];
  4.     Z_Wert := Puffer[(i*4)+1];
  5.  
  6.     TankSelected[Getroffen]:=true;
  7.  
  8.   end;
  9. ...


Und Hier gehe ich alle im Puffer gelandeten treffer durch, und markiere in meinem fall die entsprechenden panzer.
Hoffe das hilft.

Achja, das zeichnen des Rechtecks geht prima in TGLForm.ShowText, da mann da eh im ortho modus ist. Musst nur die Auflösungen anpassen oder die Koordinaten umrechnen).

_________________
Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 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.008s | 15 Queries | GZIP : On ]