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

Aktuelle Zeit: Mi Jul 16, 2025 19:45

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



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: glLoadName...glPushName...
BeitragVerfasst: Mi Dez 22, 2004 20:05 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
In einem Tutorial über Objektselektion habe ich gelesen dass man immer als zuerst glPushName(0) aufrufen muss damit die Dinge auch func. Das mache ich nicht und habe keine Problemme mit der Selektion, alles klappt.

Also, ist es ein Fehler in Tutorial oder bei mir ? :)

und Noch ein Tipp für diejenigen die es nicht wissen:
Wie kann man sowenig wie möglich FPS verliehren wenn man auch Mouse ünerstüztung braucht, d.h., die Objekte werden mit dem Maus selektiert ? Dabei MUSS man bekannterwiese 2 "Renderpasses" machen. Einmal für die Ausgabe, und einmal fur die Selektionpuffen (oder liege ich falsch?) .
Also benutzen Sie nicht dieselbe Render procedure für Selektiospuffer, die sie beim normalen Render tun, sondern schreiben sie eine zweite ("optimierte") die nur rendert was eingentlich erkannt sein sollte.schalten sie dabei z.B. texturen aus.
Verstehen sie? Mein deutsch ist nicht so gut :? , aber nun ja....


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 22, 2004 21:09 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 02, 2003 12:47
Beiträge: 300
Wohnort: Marburg
Hm, ohne
Code:
  1. glPushName(0)

funktioniert die Selection bei mir nicht.

Aber ich habe noch einen Vorschlag zur Optimierung:
Ich benutze, wenn ich modelle mit vielen Polygonen selectieren will, extra low-poly-modelle zur Selection, dass kann je nach modellgröße ne menge Performance bringen... (Naja da wäre sicherlich der ein oder andere auch drauf gekommen)

P.S.: Ich finde an deinem Deutsch ist nichts auszusetzen :-) Meine Rechtschreibung dagegen... Naja LRS

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 22, 2004 21:36 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
ich werde dir mal mein selektionscode posten sobald ich es habe (ich bin nicht zu hause...), weil wenn ich es so mache, mit glPushName(0) dann ist das ergebniss immer 0....
und noch eine optimirungsvorschlag :) ....
wenn man eine scene rendert (mit objekten und texturen) und dabei die ganze bildschirm bedeckt wird, braucht man nicht mehr GL_COLOR_BUFFER_BIT bei glClear procedure....das bringt ein "stuckrl" mehr von FPS


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 22, 2004 21:56 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 26, 2002 22:12
Beiträge: 259
Wohnort: Dresden
Auf den Selektionsmodus der OpenGL sollte man möglichst verzichten, wenn einem die Geometrie bekannt ist. Stattdessen sollte man prüfen ob die Gerade zwischen Near- und Far-Clipping-Plane an der Mausposition eines der Polygone eines Objektes schneidet.
Diese Methode ist sehr viel schneller und lässt jede Menge Platz für Optimierung, denn man kann auch Raumunterteilungsmethoden wie z.B. Octrees in die Selektion mit einführen. Auch kann man zuerst auf einen Schnittpunkt mit dem Objekt umschließenden Volumen prüfen um die Selektion noch effizienter zu gestalten.

_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 22, 2004 23:44 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Von der hierachischen Struktur wie z.B. Octree kann man auch bei der Selektion Gebrauch machen, wenn man einfach Frustum Culling verwendet. Die Seitenflächen werden ja extra so beschränkt, dass sie dem Selectionsrechteck, dass man bei gluPickMatrix angibt, entsprechen. Langsamer wird es wohl trotzdem sein, aber dann eher um einen konstanten Faktor. Alle Tests gegen das Frustum entsprechen ungefähr Tests gegen den Strahl.
Bei glLoadName kann man auch direkt das Objekt bzw. den Zeiger auf den Stack laden anstelle einer Zahl. Dann spart man sich die Zuordnung. Geht unter .Net leider nicht mehr so schön.
Selektion ist bei VBO's sehr langsam.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Dez 25, 2004 00:05 
Offline
DGL Member

Registriert: Mi Dez 15, 2004 20:36
Beiträge: 454
Wohnort: Wien, Österreich
so, so sieht mein "Selektionsvorgang" aus...OHNE glPushName(0)

render teil:
Code:
  1.  
  2. procedure TForm1.NameRender();
  3.  var x,y : byte;
  4.      Ime:Cardinal;
  5. begin
  6. // glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  7.  
  8.  glDisable(GL_TEXTURE_2D);
  9.  
  10.  glMatrixMode(GL_MODELVIEW);
  11. -----
  12.  glPushName( SOMENAME ); // nicht 0
  13.  glLoadIdentity();
  14.  // hier zeichne ich
  15.  glPopName();
  16.  
  17.  glEnable(GL_TEXTURE_2D);
  18.  
  19.  SwapBuffers(myDC);
  20. end;
  21.  


selektions teil:
Code:
  1.  
  2. function TForm1.KlikObjectID(x,y:Integer):Integer; // sta smo kliknuli
  3.  var objectsFound,
  4.      lowestDepth,
  5.      selectedObject,
  6.      i :Integer;
  7.      viewportCoords: TGLVectori4;//array[0..3]of Integer;
  8.      selectBuffer:array[0..255]of Integer;
  9. begin
  10.  Result := -1; // nichts gefunden
  11.  
  12.  glSelectBuffer(256, @selectBuffer);
  13.  
  14.  glGetIntegerv(GL_VIEWPORT, @viewportCoords);
  15.  
  16.  glMatrixMode(GL_PROJECTION);            
  17.  glPushMatrix();   
  18.  
  19.  glRenderMode(GL_SELECT);  
  20.  
  21.  glInitNames();
  22.  
  23.  glLoadIdentity();     // Reset our projection matrix
  24.  
  25.  gluPickMatrix(x, viewportCoords[3] - y, 1 ,1, viewportCoords);
  26.  gluPerspective(45.0,Width/Height,0.1,1000.0);
  27.  
  28.  gluLookAt( 0, 0, 35, // eye
  29.                  0, 0,  0,  // center
  30.                  0, 1,  0    // up vector
  31.                );
  32.  
  33.  NameRender();        // RENDER
  34.  
  35.  objectsFound := glRenderMode(GL_RENDER);
  36.  
  37.  glMatrixMode(GL_PROJECTION);  
  38.  glPopMatrix();          
  39.  
  40.  glMatrixMode(GL_MODELVIEW);     
  41.  
  42. // sortieren
  43.     if (objectsFound > 0)  then
  44.     begin
  45.      lowestDepth := selectBuffer[1];
  46.      selectedObject := selectBuffer[3];
  47.      for i := 1 to objectsFound-1 do
  48.         if (selectBuffer[(i * 4) + 1] < lowestDepth) then
  49.         begin
  50.             lowestDepth := selectBuffer[(i * 4) + 1];
  51.             selectedObject := selectBuffer[(i * 4) + 3];
  52.         end;
  53.      Result :=  selectedObject;
  54.     end;
  55. end;
  56.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 13, 2005 15:48 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Im RedBook steht auch sehr interresantes zum Thema Selection & Feedback.
Speziell zum Thema Picking werden auch alternative Methoden gezeigt, wie zum Beispiel jedem Objekt eine andere Farbe zu geben und diese Farbe dann auszuwerten.

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


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 8 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 | 14 Queries | GZIP : On ]