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

Aktuelle Zeit: Mo Jul 14, 2025 21:16

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



Ein neues Thema erstellen Auf das Thema antworten  [ 2 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Langsames Picking
BeitragVerfasst: So Nov 02, 2003 11:52 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jun 25, 2003 12:44
Beiträge: 29
Hi!
Ich mab nen kleinen Mapeditor geproggt und ich verwende zum auswählen picking (was denn auch sonst).
Mein Problem ist, dass bei mehr als 2500 Namen die Framerate von 70 auf 3-10 runterfällt. Bei wengier Namen (z.B. 1250) ist das nicht so.
Mein Pickingcode:
Code:
  1. procedure TForm1.OGLMouseMove(Sender: TObject; Shift: TShiftState; X,
  2.   Y: Integer);
  3. var
  4.  SelectBuffer : array[0..512] of TGLUInt;
  5.  Viewport     : TVector4i;
  6.  Hits,i       : Integer;
  7.  HitZValue    : TGLUInt;
  8.  Hit          : TGLUInt;
  9. begin
  10.   if (x <> OldMousePos.x) or (y <> OldMousePos.y) then
  11.   begin
  12.     OldMousePos := Point(x,y);
  13.   end
  14.   else exit;
  15.   ActivateRenderingContext(OGL.FDeviceContext,OGL.RenderingContext);
  16.   glGetIntegerv(GL_VIEWPORT, @viewport);
  17.   glSelectBuffer(512, @SelectBuffer);
  18.   glRenderMode(GL_SELECT);
  19.   glInitNames;
  20.   glPushName(0);
  21.   glMatrixMode(GL_PROJECTION);
  22.   glPushMatrix;
  23.   glLoadIdentity;
  24.   gluPickMatrix(x, viewport[3]-y, 1.0, 1.0, viewport);
  25.   gluPerspective(45.0, OGL.Width/OGL.Height, 0.1, 1000);
  26.   DrawScene;
  27.   glMatrixMode(GL_PROJECTION);
  28.   glPopMatrix;
  29.   Hits := glRenderMode(GL_RENDER);
  30.   DeactivateRenderingContext;
  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.   BHit := Hit;
  40. end;
  41.  

Was mach ich falsch?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 02, 2003 12:03 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Wenn du deine Selektion bei jeder Mausbewegung machen willst,dann kanns schon vorkommen das die Framerate stark einbricht.Deshalb zeichne ich bei der Selektion von komplexenen Szenen nur eine vereinfachte Darstellung der Szene,also z.B. statt 3D-Objekt nur Boundingbox und ohne Textzuren und andere aufwändige Statechanges.Ausserdem sehe ich,das du deinen Rendercontext am Anfang deiner Prozedur aktivierst.Das aktivieren/deaktivieren des RC ist nämlich auch sehr kostspielig,weshalb man das besser nur einmal beim Start bzw. beim Beenden der Anwendung machen sollte.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 2 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.007s | 14 Queries | GZIP : On ]