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

Aktuelle Zeit: So Jul 06, 2025 23:10

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



Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 06, 2007 21:29 
Offline
DGL Member

Registriert: So Apr 01, 2007 17:51
Beiträge: 42
Wohnort: Hamm/Westf.
z.Z. bin ich leicht genervt.

Das mit den "Abwandlungen glVertex***" habe ich nicht kapiert.

Allerdings mit meinem Besseren Rechner beträgt die CPU Belastung um die 10 %.
Mag wohl Stromsparmaßnahme von Notebook sein, der verminderte Spped .

Nun ein weiteres Problem :cry:

Im Orginal ohne OpenGL:

Bild


Mit OpenGL:

Bild

es blendet nur Langsam um obwohl ich sage fahre mit Color(0,0,0) hin.

Der Code ist wie oben , nur eben anderes Vektorbild.

grüße Gento


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 06, 2007 22:23 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Es gibt keinen Grund genervt zu sein! Es ist ein vollkommen neues Gebiet in was du dich einarbeitest. Und obwohl es in deinem Fall teilweise ähnlichkeit mit der GDI hat ist es nicht die GDI. Von daher solltest du dir bewusst machen, dass es anders ist. Das aber nur mal am Rande.

glVertex/glColor. ALLE Aufrufe von glVertex bewirken das SELBE. Die Zahl gibt an wie viele Komponenten existieren und die Buchstaben danach geben an welchen Type die Parameter habe. Mal ein kleines Beispiel. glColor3f(1, 0, 0.5) und glColor3ub(255, 0, 128) bewirken genau das Selbe. Die eine Methode möchte gerne Floats im Bereich zwischen 0 und 1 die andere Bytewerte im Bereich zwischen 0 und 255.

Komische Linien. OpenGL ist Vertexbasiert. Wenn du eine Farbe setzt, dann gilt diese für das aktuelle Vertex und die nachkommenden. Und du benutzt NACH WIE VOR NUR EINE LINIE. In dem Artikel zu glBegin sieht man sehr schön, dass ein Linestrip eine Linie ist. Oder um in GDI zu sprechen. Das wäre so wie als wenn du nur noch das erst MoveTo hättest. Und warum das so aussieht ist auch sehr einfach. OpenGL ist vertexbasiert. Sprich, wenn du einen Vertex mit der Farbe blau setzt und einen mit der Farbe grün, dann interpoliert OpenGL die Linie. Du bekommst also einen Farbverlauf auf der Linie. So wie in dem nachfolgenden Code.
Code:
  1. glBegin(GL_LINES);
  2.   glColor3f(1, 0, 0);
  3.   glVertex2f(X1, Y1);
  4.  
  5.   glColor3f(0, 1, 0);
  6.   glVertex2f(X2, Y2);
  7. glEnd;


Beide Codes sind Identisch nur, dass ich beim Zweiten einmal absetzen musste, da die Linien nicht automatisch fortgesetzt wird.
Code:
  1. glBegin(GL_LINE_STRIP); // Datt da
  2.   glVertex2f(X1, Y1);
  3.   glVertex2f(X2, Y2);
  4.   glVertex2f(X3, Y3);
  5. glEnd;

Code:
  1. glBegin(GL_LINES);  // Datt da
  2.   glVertex2f(X1, Y1);
  3.   glVertex2f(X2, Y2);
  4.  
  5.   glVertex2f(X2, Y2);
  6.   glVertex2f(X3, Y3);
  7. glEnd;


Ein Vorschlag den du mit Sicherheit gar nicht gerne hören wirst. Wie wäre es, wenn du dich erst einmal in einer kleinen Testanwendung etwas mit den Grundlagen beschäftigst. Denn das Problem ist ja, dass du versuchst etwas vollkommen neues in eine bereits existierenden Project einzubauen. Und dein Project hat auch eine gewisse Komplexibilität. Da ist es nicht so einfach die Grundlagen mitzubekommen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Apr 07, 2007 20:33 
Offline
DGL Member

Registriert: So Apr 01, 2007 17:51
Beiträge: 42
Wohnort: Hamm/Westf.
Problem gelöst ........

Wenn ich erst 1/2 Jahr Delphi schreibe bin ich froh das Delphi so ca. einigermaßen geht.

Über OpenGl hatte ich mir von 8 Tagen 2 Bücher gekauft.

ISBN 3-446-40009-5 Delphi / ISBN 3-446-22837-3 mehr C

Die springen im Buch gleich auf Stufe 8 von von 10 .

Hier beginnt die Erwartungshaltung bei Stufe 4. :oops:

Es war schon Schwer genug von BP (Dos) auf Delphi.

Die Lösung meines Problems will ich mal nicht euch vorenthalten,obwohl einige sagen werden haben wir doch genau so gemeint.


Init:
Code:
  1.  
  2. Procedure Tform1.FormCreate(Sender: TObject);    //Init beim Starten
  3. Var NearClipping, FarClipping:single;
  4. begin
  5. //--------------
  6.   DC:= GetDC(Zeichenflaeche.Handle);                                           // Init OpenGL
  7.   if not InitOpenGL then Application.Terminate;
  8.   RC:= CreateRenderingContext( DC,[opDoubleBuffered],24,0,0,0,0,0);
  9.           //Device Contest,Optionen,ColorBits,ZBits,Accumbits,Auxbuffers,Layer
  10.   ActivateRenderingContext(DC, RC);                                            // Ende Init Open Gl.
  11. //--------------
  12.   Form1.Statusfenster.canvas.brush.Color:=$00C08000;
  13.   Form1.Statusfenster.canvas.Rectangle(-1,-1,281,131);
  14.   Pango_Farben_Setzen;
  15.   Winkel_Tabellen_Bauen;
  16.   form1.speedanzeige.caption:='Speed : Frames je Sek: 25';
  17.  
  18.   Timer1.Enabled:=False;                                                            //Timer ausschalten, vorsichtshalber
  19.   Timer1.Interval:=40;                                                               //Intervall einstellen  25 HZ
  20.   Im_IRQ:=0;
  21.   Aktuelles_Frame:=0;
  22.  
  23. //--------------
  24.   glMatrixMode(GL_PROJECTION);                                                 // Open GL Werte zuweisen
  25.   glLoadIdentity;
  26.   NearClipping := 1;
  27.   FarClipping := 5000;
  28.   gluPerspective(55, 1 , NearClipping, FarClipping);
  29.  
  30.   glMatrixMode(GL_MODELVIEW);
  31.   glLoadIdentity;
  32.  
  33.   glTranslatef(0, 0, -1);
  34.   glScaleF((1/65535),(1/65535),(1/65535));
  35.   glDisable(GL_DEPTH_TEST);
  36.  
  37. // ShowMessage(glGetString(GL_VENDOR));                             // Zum Test ob vorhanden.
  38. //--------------
  39.   end;
  40. {---------------------------------------------------------------------}
  41.  


Das eigentliche Zeichnen:
Code:
  1.  
  2. Procedure Laser_Frame_Zeigen_OpenGL(Frame_Nr,Punkte_Frame:Word);
  3. Var Lauf:Word;
  4.  
  5. Begin
  6.    glClear(GL_COLOR_BUFFER_BIT);                    // or GL_Depth_Buffer_Bit);
  7.    glBegin(GL_Lines);
  8.    For Lauf:=1 to Punkte_Frame-1 do
  9.       Begin
  10.         if Laser_3D_Frame[Frame_Nr][Lauf].Status > 0 then
  11.                                                        Begin                         // Sichtbar
  12.                                                          glColor3ub(Laser_3D_Frame[Frame_Nr][Lauf].Rot,Laser_3D_Frame[Frame_Nr][Lauf].Gruen,Laser_3D_Frame[Frame_Nr][Lauf].blau);
  13.                                                          glVertex2F(Laser_3D_Frame[Frame_Nr][lauf-1].X,Laser_3D_Frame[Frame_Nr][lauf-1].Y);
  14.                                                          glVertex2F(Laser_3D_Frame[Frame_Nr][lauf].X,Laser_3D_Frame[Frame_Nr][lauf].Y);
  15.                                                        End
  16.                                                      Else
  17.                                                        if Zeige_Punkte=1 then
  18.                                                                            Begin   // Unsichtbare Linien Zeigen wen ......
  19.                                                                              glColor3ub($80,$80,$80);
  20.                                                                              glVertex2F(Laser_3D_Frame[Frame_Nr][lauf-1].X,Laser_3D_Frame[Frame_Nr][lauf-1].Y);
  21.                                                                              glVertex2F(Laser_3D_Frame[Frame_Nr][lauf].X,Laser_3D_Frame[Frame_Nr][lauf].Y);
  22.                                                                            end;
  23.       end;
  24.    glEnd;
  25.    SwapBuffers(DC);
  26.    form1.Framescroll.Position:=Frame_Nr;
  27.    form1.Fehlerfenster.caption:='Frame Nr: '+IntToStr(Frame_Nr+1)+' Punkte: '+inttostr(Punkte_Frame);
  28.    form1.fehlerfenster.refresh;
  29. end;
  30. //-----------------------------------------------------------------------------
  31.  


Mein Notebook ist recht langsam und GLClear bremst den gewaltig aus.
Löschen mit Linien war noch langsamer.
Löschen mit Quadrat ist gleich schnell kostet aber mehr Byte.
Also blieb GLClear drin.
Ab 80 Frames je Sekunde hat der 100& CPU.

Mein anderer Rechner macht die Übung 100 Frames / Sek < 10 % CPU.

Hier der Link zur eigendlichen Soft mit Testframes :http://www.Gento.de/Laserfileread.rar 2 MB


Grüße ,Dank für Eure Geduld und viel Ostereier.

Gento


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 3 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 | 15 Queries | GZIP : On ]