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

Aktuelle Zeit: Fr Jul 18, 2025 14:25

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



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Fr Nov 11, 2005 19:16 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Hallo...

Ich habe eine Procedure in der ich Render, genau die gleiche rufe ich auch für die selektion auf ...

Code:
  1.  
  2. procedure Tengine.Render();
  3. var
  4.   i: integer;
  5.   planetenzahl: integer;
  6. begin
  7.  
  8.  
  9.   glinitnames;
  10.   glpushname(0);
  11.  
  12.  
  13.   planetenzahl := Planeten.GetCount();
  14.   if planetenzahl > 0 then
  15.   for i := 0 to planetenzahl -1 do
  16.   begin
  17.     if Planeten.SelPlanet = i then
  18.       glcolor3f(0,1,1)
  19.     else
  20.       glColor3f(1,1,1);
  21.  
  22.     glloadname(i);
  23.     glpushmatrix();
  24.       gltranslatef(Planeten.Planets[i].x,Planeten.Planets[i].y,Planeten.Planets[i].z);
  25.       Planeten.Planets[i].model.Render;
  26.     glpopmatrix();
  27.     {glBegin(gl_triangles);
  28.       glVertex3f(Planeten.Planets[i].x  , Planeten.Planets[i].y  , Planeten.Planets[i].z  );
  29.       glVertex3f(Planeten.Planets[i].x-1, Planeten.Planets[i].y-1, Planeten.Planets[i].z-1);
  30.       glVertex3f(Planeten.Planets[i].x+1, Planeten.Planets[i].y-1, Planeten.Planets[i].z+1);
  31.     glEnd();}
  32.  
  33.   end;
  34.  
  35. end;


Nun, das was auskommentiert ist, dass war mein test "Objekt" ein Dreieck halt ...
das funktionierte wunderbar.
Nur jetzt, wo ich ein model render mit der translation geht es nicht, was mach ich falsch?

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 11, 2005 19:20 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Die Selektionsroutine im alten Tutorial war nicht so richtig.
Das ist vermutlich der Grund.
Hatte es auchmal, dass eine Kugel als Liste kompiliert nicht korrekt selektiert wird.
Als Lösung habe ich den Selektionscode mit dem von Sulaco verglichen und geändert.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Nov 12, 2005 00:57 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Hi, also habs mal versucht anzupassen, kommt kein Fehler, aber kommt immer die "1" raus ...

Code:
  1. function Selection : integer;
  2. var
  3. Puffer       : array[0..512-1] of GLUInt;
  4. Viewport     : TGLVectori4;//array[0..3] of Integer;
  5. i            : Integer;
  6. Treffer      : GLint;
  7. Z_Wert       : GLUInt;
  8. Getroffen    : GLUInt;
  9.  
  10. ptr          : PGLuint;
  11. ergebnis     : GLuint;
  12. begin
  13. glGetIntegerv(GL_VIEWPORT, @viewport);      //Die Sicht speichern
  14. glSelectBuffer(256, @puffer);               //Den Puffer zuordnen
  15. glRenderMode(GL_SELECT);                    //In den Selectionsmodus schalten
  16. glmatrixmode(gl_projection);                //In den Projektionsmodus
  17. glPushMatrix;                               //Um unsere Matrix zu sichern
  18. glLoadIdentity;                             //Und dieselbige wieder zurückzusetzen
  19.  
  20. gluPickMatrix(xs, viewport[3]-ys, 1.0, 1.0, viewport);
  21. gluPerspective(45.0, GLForm.ClientWidth / GLForm.ClientHeight, 1, 100);
  22.  
  23. Engine.Render();                            //Die Szene zeichnen
  24. glmatrixmode(gl_projection);                //Wieder in den Projektionsmodus
  25. glPopMatrix;                                //um unsere alte Matrix wiederherzustellen
  26.  
  27. treffer := glRenderMode(GL_RENDER);         //Anzahl der Treffer auslesen
  28.  
  29.  ptr := @PGLuint(puffer[0]);
  30.  ergebnis := ptr^;
  31.  if ergebnis <> 0 then begin end;
  32.  Result := ergebnis;
  33. end;


Vielleicht kannst du mir mal deine variante zeigen?

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Nov 12, 2005 19:54 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Meine Variante:
Code:
  1. //Funktion für die Selection
  2. function glSelection(x,y: Integer) : integer;
  3. var
  4.   Puffer    : Array[0..256] of GLUInt;
  5.   Viewport  : TGLVectori4;
  6.   Treffer,i : Integer;
  7.   Z_Wert    : GLUInt;
  8.   Getroffen : GLUInt;
  9. begin
  10.   glGetIntegerv(GL_VIEWPORT, @viewport);      //Die Sicht speichern
  11.   glSelectBuffer(256, @Puffer);               //Den Puffer zuordnen
  12.  
  13.   glmatrixmode(GL_PROJECTION);                //In den Projektionsmodus
  14.   glRenderMode(GL_SELECT);                    //In den Selectionsmodus schalten
  15.   glLoadIdentity;                             //Und dieselbige wieder zurückzusetzen
  16.  
  17.   gluPickMatrix(x, Viewport[3]-y, 1.0, 1.0, Viewport);
  18.   gluPerspective(60.0, Viewport[2]/Viewport[3], 1, 256);
  19.  
  20.   glMatrixMode(GL_MODELVIEW);
  21.  
  22.   glRender;                                   //Die Szene zeichnen
  23.   Treffer := glRenderMode(GL_RENDER);         //Anzahl der Treffer auslesen
  24.  
  25.   Getroffen := High(GLUInt);                 //Höchsten möglichen Wert annehmen
  26.   Z_Wert := High(GLUInt);                    //Höchsten Z - Wert
  27.   for i := 0 to Treffer-1 do
  28.   if Puffer[(i*4)+1] < Z_Wert then
  29.     begin
  30.     getroffen := Puffer[(i*4)+3];
  31.     Z_Wert := Puffer[(i*4)+1];
  32.     end;
  33.   if getroffen=High(GLUInt) then Result:=-1
  34.   else Result := getroffen;
  35. end;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 13, 2005 00:00 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Ist ja geil das funzt!!!

Evtl. Sollte man das Tutorial umändern!

_________________
www.audi32.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 13, 2005 14:39 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Könntest du mal checkne ob das im Wiki jetzt so stimmt. Hab den Code etwas modifiziert und verschönert...Da war ja sogut wie nix eingerückt...furchtbar! :x

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 13, 2005 14:55 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Habe es nochmal kurz verändert array[0..3] in TGLVectori4 umgeändert.
Das glPushMatrix und glPopMatrix könnte eigentlich noch entfallen, enn man Selektion erst am Ende ausführt bzw. im Render nochmal glLoadIdenity aufruft.


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 16 Queries | GZIP : On ]