Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi OpenGL Beschleunigungs Routinen oder Codeoptimierung (https://www.delphipraxis.net/41353-opengl-beschleunigungs-routinen-oder-codeoptimierung.html)

mwiesbau 2. Mär 2005 11:19


OpenGL Beschleunigungs Routinen oder Codeoptimierung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo habe ein Programm in OpenGL geschrieben das 3D Koordinaten Punkte aus einer Datei ausliest und am Bildschirm wahlweise als Punktliste oder Linestrip usw. anzeigt.

Mein Problem ist nur dass das der Render vorgang beim Bewegen in der Punktwolke relativ lange dauert, d.h. es ist keine richtig Flüssige animation.

Die Punkte werden beim Programmstart aus dem File in eine Stringliste kopiert, somit liegen sie im speicher d.h. das Programm muss auch nicht auf die Festplatte zugreifen.


Es ist sozusagen das Grundgerüst für ein Visualisierungsprogramm.

Danke für eure Bemühungen

PS.: Weiss jemand wie ich *.TIF Dateien als Texturen in OpenGL verwenden kann.

idontwantaname 2. Mär 2005 11:26

Re: OpenGL Beschleunigungs Routinen oder Codeoptimierung
 
wenn du die datei, aus der die punkte gelesen werden, auch noch mitschicken würdest, wäre ich dir sehr dankbar :wink:

Fubar 2. Mär 2005 11:31

Re: OpenGL Beschleunigungs Routinen oder Codeoptimierung
 
Zitat:

Zitat von mwiesbau
PS.: Weiss jemand wie ich *.TIF Dateien als Texturen in OpenGL verwenden kann.

Mit DevIL kannst du ziemlich einfach Bild-Dateien laden und als Textur in OGL benutzen:
http://openil.sourceforge.net/

mwiesbau 2. Mär 2005 11:34

Re: OpenGL Beschleunigungs Routinen oder Codeoptimierung
 
Liste der Anhänge anzeigen (Anzahl: 1)
:oops: Ok sorry

Um die Datei erfolgreich mit OpenGL zu laden musst du bitte in den Ländereinstellungen das Dezimal Trennzeichen von "," auf "."
umstellen.

Danke für deine Hilfe


edit: Habe das falsche file hochgeladen ist nun korrigiert. :oops:

sniper_w 2. Mär 2005 11:38

Re: OpenGL Beschleunigungs Routinen oder Codeoptimierung
 
Zitat:

Die Punkte werden beim Programmstart aus dem File in eine Stringliste kopiert, somit liegen sie im speicher d.h. das Programm muss auch nicht auf die Festplatte zugreifen.
Sorry, aber das ist grauenhaft. Denn um ein Punkt aus einem String zu bekommen, brauchst du die String-Handling Funktionen, die für ein schnelleres Rendervorgang gar nicht geeignet sind. Die Punkte müssen sich in einem "native" Format befinden, z.B. als ein Array of T3dPunkt :
Delphi-Quellcode:
type T3dPunkt = array[0..2]of Single;

var Punkte : array of T3dPunkt;
Sonst, solltest du uns etwas von dem Code schicken, um bessere Hilfe zu bekommen.

mwiesbau 2. Mär 2005 11:42

Re: OpenGL Beschleunigungs Routinen oder Codeoptimierung
 
Ok danke erstmal, das projekt habe ist als anhang im ersten post von mir eingefügt.

Bin für jede weitere optimierung dankbar.

sniper_w 2. Mär 2005 11:50

Re: OpenGL Beschleunigungs Routinen oder Codeoptimierung
 
Zu der PointList Funktion:
Viel schneller wäre es wenn du es so machen würdest:

Delphi-Quellcode:
// in unit 2
uses ....,opengl,.....;

var From2 : TForm2;
    _Mesh_Mode : Cardinal = GL_POINTS;

implementation

uses unit1;

procedure TForm2.ComboBox1Change(Sender: TObject);
begin
 case ComboBox1.ItemIndex of
 0:_Mesh_Mode := GL_POINTS;
 1:_Mesh_Mode := GL_LINES;
 2:_Mesh_Mode := GL_LINE_STRIP;
 3:_Mesh_Mode := GL_LINE_LOOP;
 4:_Mesh_Mode := GL_TRIANGLES;
 5:_Mesh_Mode := GL_TRIANGLE_STRIP;
 6:_Mesh_Mode := GL_TRIANGLE_FAN;
 7:_Mesh_Mode := GL_QUADS;
 8:_Mesh_Mode := GL_QUAD_STRIP;
 9:_Mesh_Mode := GL_POLYGON;
 end;
end;

// in unit1
procedure tform1.pointlist;
var
i: integer;
begin
 glBegin(_Mesh_Mode);
                                    //(stringreplace(templist[1],'.',',',[rfReplaceAll]))
     for i:=0 to numofpoints do
      begin
      templist.DelimitedText:=finalpoint[i];
      glcolor3f(r,g,b);
      glloadname(Punkt);  //neu
      glvertex3f(tpointlist[i,1],tpointlist[i,2],tpointlist[i,0]);
      //glvertex3f(tpointlist[i,2],tpointlist[i,3],tpointlist[i,1]);
      //glvertex3f(strtofloat(templist[2]),strtofloat(templist[3]),strtofloat(templist[1]));
      end;
  glend;
end;

mwiesbau 2. Mär 2005 12:13

Re: OpenGL Beschleunigungs Routinen oder Codeoptimierung
 
wie du warscheinlich gesehen hast wollte ich das auch schon mit einem dynamischen array lösen.

danke für deinen vorschlag sieht echt super aus, bin selbst stundenlang davor gehock und habs einfach nicht geschafft.

nochmal danke.

mwiesbau 2. Mär 2005 13:25

Re: OpenGL Beschleunigungs Routinen oder Codeoptimierung
 
ein problem habe ich allerdings noch

irgendwie gibts da ein problem mit den zuweisungen der cardinal werte GL_POINTS

Delphi-Quellcode:
procedure TForm2.ComboBox1Change(Sender: TObject);
begin
case ComboBox1.ItemIndex of
0:_Mesh_Mode := GL_POINTS;
1:_Mesh_Mode := GL_LINES;
2:_Mesh_Mode := GL_LINE_STRIP;
3:_Mesh_Mode := GL_LINE_LOOP;
4:_Mesh_Mode := GL_TRIANGLES;
5:_Mesh_Mode := GL_TRIANGLE_STRIP;
6:_Mesh_Mode := GL_TRIANGLE_FAN;
7:_Mesh_Mode := GL_QUADS;
8:_Mesh_Mode := GL_QUAD_STRIP;
9:_Mesh_Mode := GL_POLYGON;
end;

hatt jemand eine ahnung warum??

sniper_w 2. Mär 2005 13:31

Re: OpenGL Beschleunigungs Routinen oder Codeoptimierung
 
Welches Problemm ?? :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:01 Uhr.
Seite 1 von 4  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz