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

Aktuelle Zeit: Fr Jul 18, 2025 18:20

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



Ein neues Thema erstellen Auf das Thema antworten  [ 31 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags: Probleme mit Selektion
BeitragVerfasst: Mo Dez 21, 2009 18:58 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
Hallo,

ich habe mich durch das Tutorial "Objektselektion A" gelesen und es auch ausprobiert.

jetzt wollte ich das in mein programm einstricken und bekomme folgende Fehlermeldung bei der Zeile:

Code:
  1. gluPickMatrix(xs, viewport[3]-ys, 1.0, 1.0, @viewport);

Zitat:
[[Pascal Fehler] : E2010 Inkompatible Typen: 'TGLVectori4' und 'Pointer'


(Das ganze ist in der function selection)

komischerweise lässt sich der Original Beispielcode aber compilieren.
kann mir jemand helfen?
:?:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Probleme mit Selektion
BeitragVerfasst: Mo Dez 21, 2009 19:06 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
Ich habe mich jetzt nicht genau damit beschäftigt, aber wenn ich die Zeile aus dem Tutorial mit deiner vergleiche, fällt mir auf, dass du beim letzten Parameter den Adressoperator (@) verwendest. Wenn du den weglässt, sollte es gehen.

Gruß mrtrain


Zuletzt geändert von mrtrain am Mi Aug 31, 2011 17:35, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Probleme mit Selektion
BeitragVerfasst: Mo Dez 21, 2009 19:11 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
mrtrain hat geschrieben:
Ich habe mich jetzt nicht genau damit beschäftigt, aber wenn ich die Zeile aus dem Tutorial mit deiner vergleiche, fällt mir auf, dass du beim letzten Parameter den Adressoperator (@) verwendest. Wenn du den weglässt, sollte es gehen.

Gruß mrtrain


nein, das war mir auch bereits aufgefallen und ich hatte das schon probiert, mit dem Ergebnis:

Zitat:
[Pascal Fehler] : E2010 Inkompatible Typen: 'TGLVectori4' und 'Array'


ich habe jetzt gemerkt das es wohl am unterschiedlichen opengl header liegt, im beispiel sourcecode ist der orignal opengl header eingebunden, bei mir der DGLopengl header von hier.
wenn ich beide einsetze compiliert er zwar aber es kommt sofort eine access violation.
nur den opengl header einsetzen kann ich nicht denn dann fehlen ihm ein haufen befehle...

***EDIT***

ok ich habe jetzt erstmal die definition von Viewport von

Code:
  1. Viewport     : array[0..3] of Integer;

in
Code:
  1. Viewport     : TGLArrayi4;

geändert... jetzt ist die Fehlermeldung erstmal weg... sobald ich mir den kopf zerbrochen habe wie ich das mit dem Namestack lösen kann
(bei mir gibts keine const geometrie von der ich vorher schon die namen wüsste, sondern erst zur laufzeit zuzuladende modelle) kann ich testen ob ich damit selektieren kann oder nicht :)
das wird wohl noch paar stündchen dauern...

ich meld mich bestimmt wieder *lach*


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Probleme mit Selektion
BeitragVerfasst: Mo Dez 21, 2009 19:38 
Offline
DGL Member

Registriert: Fr Okt 03, 2008 13:32
Beiträge: 367
Ist "viewport" auch vom Typ TGLVectori4? Wenn das ein Array[0..3] of Integer ist funktioniert es nicht, weil der Compiler nicht versteht, dass beides eigentlich das selbe ist.

Edit: mist bischen zu spät


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Probleme mit Selektion
BeitragVerfasst: Mo Dez 21, 2009 21:20 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
Schläfer hat geschrieben:
Ist "viewport" auch vom Typ TGLVectori4? Wenn das ein Array[0..3] of Integer ist funktioniert es nicht, weil der Compiler nicht versteht, dass beides eigentlich das selbe ist.

Edit: mist bischen zu spät


Danke trotzdem :)

vielleicht kannst du mir ja bei meinem jetzigen problem helfen....

und zwar dieses namens array in dem tutorial, das müsste bei mir dynamisch sein, ich finde aber nichts wie ich bei einem dynamischen array die untere grenze auf -1 setzen kann für das "ins nichts klicken"
Code:
  1. setlow(namen,-1);
gibts leider nicht.

***EDIT***
hat sich erledigt, ich habe zwar gerade keine Ahnung wieso, aber mein Programm macht bereits das was es soll, obwohl ich mir ziemlich sicher war noch nicht fertig zu sein....
aber aus irgendeinem Grund funktioniert es schon... :shock: :shock:

winke


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Probleme mit Selektion
BeitragVerfasst: Mo Dez 21, 2009 22:33 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

um trotzdem deine Frage noch zu klären: Meiner Meinung nach ist ein dynamisches Array mit -1..x nich möglich. Du könntest aber auch einfach den Namen/Index um eins nach unten rechnen ;)

MfG Bergmann

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Probleme mit Selektion
BeitragVerfasst: Di Dez 22, 2009 01:59 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
Also irgendwie habe ich mich wohl total zu früh gefreut... und Stunden später gebe ich auf.
in meinem Programm findet er immer genau das Teil das am nächsten zur Kammera steht, ganz egal wie weit ich daneben klicke.
eine Besonderheit in meinem Programm im Vergleich zu dem Tutorials ist, dass ich in ein Panel rendere...

deswegen habe ich mir die Tutorials Selektion A und B mal vorgenommen und versucht sie im Panel gerendert zum laufen zu bringen...

ohne wirklichen Erfolg.

Bei dem mit dem Quadrat, dem Dreieck und dem Stern schaffe ich es nur wenn das Panel exakt so groß ist wie die Form, ansonsten treffe ich da, wo die Figuren wohl wären (aber nicht sind) wenn ich auf die Form und nicht das Panel rendern würde. Ich vermute irgendwas läuft beim Viewport kopieren schief... aber ich weiss net was :roll:

Bei dem Planetentutorial treffe ich überhaupt nichts mehr wenn ich in ein Panel rendere... ganz gleich wie groß ich das panel mache, auch nicht bei identischen größen.


hier mal der von mir abgeänderte Tutorial Code teil, in dem wohl das mit dem Viewport schief geht...

Code:
  1. function TGLForm.GetSelectBufferHit : Integer;
  2. var
  3.  SelectBuffer : array[0..512] of TGLUInt;
  4.  Viewport     : TGLVectori4;      //musste ich ändern schon bevor ich ins panel bin
  5.  Hits,i       : Integer;
  6.  HitZValue    : TGLUInt;
  7.  Hit          : TGLUInt;
  8. begin
  9. // Store our Viewport
  10. glGetIntegerv(GL_VIEWPORT, @viewport);
  11. // Tell OpenGL the size of our select buffer
  12. glSelectBuffer(512, @SelectBuffer);
  13. // Change our render mode to GL_SELECT
  14. glRenderMode(GL_SELECT);
  15. // Init the namestack
  16. glInitNames;
  17. glPushName(0);
  18. glMatrixMode(GL_PROJECTION);
  19. glPushMatrix;
  20. glLoadIdentity;
  21. // Zoom the view to one pixel around the mouse position
  22. gluPickMatrix(mx, viewport[3]-my, 1.0, 1.0, viewport);
  23. gluPerspective(45.0, panel2.width/panel2.Height, 0.1, 1000);     //geändert weil in panel rendern
  24. // Now we draw our scene in the select render mode
  25. DrawScene;
  26. glMatrixMode(GL_PROJECTION);
  27. glPopMatrix;
  28. // Now store the number of hits in Hits
  29. Hits := glRenderMode(GL_RENDER);
  30. // Now we look which hit has the lowest Z-Value i.e. was in front
  31. Hit       := High(TGLUInt);
  32. HitZValue := High(TGLUInt);
  33. for i := 0 to Hits-1 do
  34.  if SelectBuffer[(i*4)+1] < HitZValue then
  35.   begin
  36.   Hit       := SelectBuffer[(i*4)+3];
  37.   HitZValue := SelectBuffer[(i*4)+1];
  38.   end;
  39. Result := Hit;
  40. end;


für sachdienliche Hinweise bin ich wie immer äußerst dankbar!

Wölfchen


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Probleme mit Selektion
BeitragVerfasst: Di Dez 22, 2009 02:58 
Offline
DGL Member

Registriert: Fr Okt 03, 2008 13:32
Beiträge: 367
Hm, ich hab' das mal mit meinem Code verglichen (der funktioniert) aber eigentlich mach' ich das genauso.
Hast du mal die Werte in Viewport überprüft ob die auch richtig sind? Wenn die von der größe abweichen die das Panal hat würde das bei gluPerspective nicht funktionieren. Außerdem mx und my. Die müssen natürlich auch relativ zum Panal angegeben werden. Und ich glaub der Viewport müsste dann auch in der Höhe mit dem Panal übereinstimmen.
Dann könnte es vielleicht sein, dass der Matrix Mode nicht wieder auf Modelview gesetzt wird?

Ansonsten fällt mir da aber nichts ein.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Probleme mit Selektion
BeitragVerfasst: Di Dez 22, 2009 03:18 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
Schläfer hat geschrieben:
Hm, ich hab' das mal mit meinem Code verglichen (der funktioniert) aber eigentlich mach' ich das genauso.
Hast du mal die Werte in Viewport überprüft ob die auch richtig sind? Wenn die von der größe abweichen die das Panal hat würde das bei gluPerspective nicht funktionieren. Außerdem mx und my. Die müssen natürlich auch relativ zum Panal angegeben werden. Und ich glaub der Viewport müsste dann auch in der Höhe mit dem Panal übereinstimmen.
Dann könnte es vielleicht sein, dass der Matrix Mode nicht wieder auf Modelview gesetzt wird?

Ansonsten fällt mir da aber nichts ein.



ich weiss ja nicht was in Viewport reingehört wenn ich die 4 integerwerte ausgebe dann steht da 0 0 600 600... und 600x600 ist die größe meines panels.
die mauskoordinaten werden aufs panel bezogen zurückgegeben, weil ich sie ja im onclick event vom panel mit x und y hole.

wenn du einen funktionierenden tutorial code hast, wo du in ein panel renderst und trotzdem noch selektieren kannst, wärs echt toll wenn du mir den mal schicken könntest :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Probleme mit Selektion
BeitragVerfasst: Di Dez 22, 2009 11:18 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

also so gehts jetz bei mir. Ich kann aber auf den 1. Blick auch kein unterschied zu deinem Code festellen.
Im Viewport stehen der X-Offset, der Y-Offset, die Breite und die Höhe. Also is (0,0,600,600) schon OK, wenn dein Pannel 600x600 is.

MfG Bergmann


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Probleme mit Selektion
BeitragVerfasst: Di Dez 22, 2009 11:20 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
Bergmann89 hat geschrieben:
Hey,

also so gehts jetz bei mir. Ich kann aber auf den 1. Blick auch kein unterschied zu deinem Code festellen.
Im Viewport stehen der X-Offset, der Y-Offset, die Breite und die Höhe. Also is (0,0,600,600) schon OK, wenn dein Pannel 600x600 is.

MfG Bergmann



danke!

schau ich mir heut mittag an und sag bescheid...

muss jetzt einkaufen, wegen dem fest da bald.

winke

Wölfchen


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Probleme mit Selektion
BeitragVerfasst: Di Dez 22, 2009 15:45 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
Ok ich habe jetzt 2 Stunden lang verglichen und gesucht....

meine selection function ist jetzt eigentlich identisch mit der von dir:
Code:
  1. function Tform1.Selection : integer;
  2. var
  3. Puffer       : array[0..512] of GLUInt;
  4. Viewport     : TGLArrayi4;
  5. Treffer,i    : Integer;
  6. Z_Wert       : GLUInt;
  7. Getroffen    : GLUInt;
  8. begin
  9. glGetIntegerv(GL_VIEWPORT, @viewport);      //Die Sicht speichern
  10. glSelectBuffer(512, @Puffer);               //Den Puffer zuordnen
  11. glmatrixmode(gl_projection);                //In den Projektionsmodus
  12. glRenderMode(GL_SELECT);                    //In den Selectionsmodus schalten
  13. glPushMatrix;                               //Um unsere Matrix zu sichern
  14. glLoadIdentity;                             //Und dieselbige wieder zurückzusetzen
  15. gluPickMatrix(xs, (viewport[3]-ys), 1.0, 1.0, viewport);
  16. gluPerspective(45, viewport[2]/viewport[3], NearClipping, FarClipping);
  17.  
  18. render;
  19.  
  20. glMatrixMode(gl_Projection);                //Wieder in den Projektionsmodus
  21. glPopMatrix;                                //um unsere alte Matrix wiederherzustellen                             //Die Szene zeichnen
  22.  
  23. treffer := glRenderMode(GL_RENDER);         //Anzahl der Treffer auslesen
  24. Getroffen := High(GLUInt);                  //Höchsten möglichen Wert annehmen
  25. Z_Wert := High(GLUInt);                     //Höchsten Z - Wert
  26.  
  27. panel8.Caption:=inttostr(Gl_modelview_matrix); // da kommt was womit ich nix anfangen kann
  28. panel6.caption:=inttostr(viewport[0])+' '+inttostr(viewport[1])+' '+inttostr(viewport[2])+' '+inttostr(viewport[3]); // da kommt 0 0 600 600
  29. panel1.Caption:=inttostr(treffer); // da kommt 0 manchmal im nirvana 1 (obwohl nix zu sehn ist)
  30.  
  31. for i := 0 to Treffer-1 do
  32. if Puffer[(i*4)+1] < Z_Wert then
  33.  begin
  34.  getroffen       := Puffer[(i*4)+3];
  35.  Z_Wert := Puffer[(i*4)+1];
  36.  end;
  37.    if getroffen=High(GLUInt)
  38.     then Result := -1
  39.     else Result := getroffen;
  40. end;



was mir aufgefallen ist, ist das ich nur etwas gerendert bekomme wenn ich in meiner render procedure auch nochmal ein glu_perspective habe, ohne gehts nicht.
das ist der einige unterschied den ich jetzt zu deinem code finde und ich weiss auch nicht wieso ich die zeile brauch um meine geometrie zu sehen.

hier mal meine render procedure, vielleicht versteht ja hier jemand was ich falsch mache:
Code:
  1. procedure TForm1.Render;
  2. var i:integer;
  3. begin
  4.  
  5.   glMatrixMode(GL_MODELVIEW);
  6.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  7.   glLoadIdentity;
  8.   gluPerspective(45.0, Panel2.Height/Panel2.Width, NearClipping, FarClipping); // ohne das seh ich garnix... aber im beispielcode von Bergmann (danke!) brauch er das nicht... warum?
  9.  
  10.   glTranslatef(0, 0, (-50));
  11.  
  12.  
  13.  
  14. if geladen then
  15.     begin
  16.     glInitNames;
  17.     glPushName(0);
  18.  
  19. // ***********************************************************************
  20. glcolor3f(0,1,0);
  21. glloadname(viereck);
  22. glbegin(gl_quads);
  23. glvertex3f(-1,0,10);
  24. glvertex3f(-2,0,10);
  25. glvertex3f(-2,-1,10);
  26. glvertex3f(-1,-1,10);
  27. glend;                               // nur zum testen
  28. glcolor3f(0,1,0);
  29. glloadname(viereck2);
  30. glbegin(gl_quads);
  31. glvertex3f(-10,10,10);
  32. glvertex3f(-12,10,10);
  33. glvertex3f(-12,-11,10);
  34. glvertex3f(-11,-11,10);
  35. glend;
  36. // **********************************************************************
  37.  
  38. SwapBuffers(myDC);
  39. Errorhandlergl;
  40.   end;
  41. end;


ich weiss so langsam echt nimmer weiter :/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Probleme mit Selektion
BeitragVerfasst: Di Dez 22, 2009 16:51 
Offline
DGL Member

Registriert: Do Mär 05, 2009 20:17
Beiträge: 284
Wohnort: Kaiserslautern
ich weiss garnit wie ich das phänomen das ich nu habe in worte bringen soll :cry:

also ich habe jetzt als beispielgeometrie horizontal langes und ein vertikal langes rechteck.
Code:
  1. glcolor3f(0,1,0);
  2. glloadname(viereck);
  3. glbegin(gl_quads);
  4. glvertex3f(0,200,10);
  5. glvertex3f(-10,200,10);
  6. glvertex3f(-10,-200,10);
  7. glvertex3f(-0,-200,10);
  8. glend;                               // nur zum testen
  9. glcolor3f(0,1,0);
  10. glloadname(viereck2);
  11. glbegin(gl_quads);
  12. glvertex3f(-200,10,10);
  13. glvertex3f(-200,8,10);
  14. glvertex3f(200,8,10);
  15. glvertex3f(200,10,10);
  16. glend;


und jetzt kommts:
wenn ich die perspective zeile in meiner rendeprocedure weglasse, dann sehe ich die rechtecke nicht.
aber ich kann sie - äh - fühlen? also ich meine wenn ich mit der maus dahinfahre wo sie sein müssten, dann äh... sieht die maus sie?
:roll: :roll:
sobald ich die zeile einschalte, dann seh ich zwar die rechtecke aber die maus sieht sie nimmer...

da soll einer durchsteigen :shock:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Probleme mit Selektion
BeitragVerfasst: Di Dez 22, 2009 18:26 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Schau dir mal deinen Code und den laufenden Code unter dem Gesichtspunkt an, wo und wie oft du gluPerspective aufrufst.

Beim "Selectionsdurchlauf" setzt du die Perspektive doppelt. Allerdings in zwei verschiedenen Matrizen (Perspektiv und Modelview). Ich kann mir vorstellen, dass das Probleme macht.

Dazu mal ein Zitat aus dem Wiki zu "glPerspective":
Zitat:
Wo gehört gluPerspective hin?:

In die Initialisierung des Forumulars um überhaupt eine Projektion zu erhalten.
In die Behandlung des OnResize-Events, da die Projektion an die neuen Fenstermaße angepasst werden sollte.
In den Render-Code wenn sich innerhalb des Renderdurchgangs die Projektion ändert.

Wo gehört gluPerspective nicht hin?:

In den Render-Code wenn sich die Projektion während des Rendervorgangs nicht ändert.


Deine Perspektive ändert sich nicht. Auch nicht zwischen den Durchläufen. Also raus mit dem Ding und an die Richtige Stelle geschoben.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Probleme mit Selektion
BeitragVerfasst: Di Dez 22, 2009 18:49 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

das Problem was du jetzt beschrieben hast hört sich ganz danach an, also ob du das alles nur einmal renderst. Du musst einmal normal rendern und einmal die Selektion. Du hast also 2 Renderdurchläufe in einem. Machst du das so, oder versucht du alles in einem zum laufen zu bringen, denn das geht glaub ich nicht.
€: hab grad ma bisl mit der gluPerspective-Zeile rum gespielt und die in meinem Code verschoben. Ich kann deinen Fehler fast reproduzieren (mit einem Renderdurchlauf), also wirds wo daran liegen. sag mir wenn ich falsch liege ^^

MfG Bergmann.

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 31 Beiträge ]  Gehe zu Seite 1, 2, 3  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 ]