Hallo Lazarus-Freunde,
ich habe ein kleines Programm geschrieben, mit dem dreidimensionale Funktionen der Form z=f(x,y) dargestellt werden können.
Dieses ist eigentlich nicht schwierig.
Das eigentliche Problem ist es, dass die nicht sichtbaren Linien nicht mitgezeichnet werden.
Um dies zu unterdrücken, habe ich zwei verschiedene Versionen der Unterdrückung einprogrammiert.
Viel Spaß beim Ausprobieren des Programmes.
Gruß Heizkoerper
Dreidimensionale Funktionen
-
- Beiträge: 24
- Registriert: Mo 1. Aug 2011, 14:39
- OS, Lazarus, FPC: Windows XP und 7, L 0.9.31, FPC 2.4.4
- CPU-Target: 32 und 64 Bit
- Wohnort: Hannover
- Kontaktdaten:
Dreidimensionale Funktionen
- Dateianhänge
-
- DreiD.zip
- (129.79 KiB) 87-mal heruntergeladen
-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: Dreidimensionale Funktionen
Hallo.
Das ist ein wirklich interessantes Programm, Respekt.
Hier einmal 2 verbesserungsforschläge:
1) Dein Programm zeichnen recht Langsam, das liegt nicht an dem PC, sondern daran, das nach jeder Linie das ganze Bild ausgegeben wird, danach wird noch eine Linie gezeichnet und das Bild wird ausgegeben, u.s.w. . Wenn man das so umschreibt das erst alle Linien gezeichnet und dann ausgegeben wird, so ist das Zeichnen um ein Vielfaches schneller ! Dafür sind nur zwei Zeilen Code in der Zeichenprocedure notwendig:
2) Das ganze Programm könnte man noch mithilfe der Grafikkarte zeichnen lassen, dadurch musst du nur die 3 Dimensionalen Punkte eingeben und um das Zeichen, und alle 3D effekte kümmert sich die Grafikkarte. Das würde das ganze dann nochmal schneller machen, aber man müsste sich nen bisschen mit OpenGL auseinandersetzen... http://wiki.delphigl.com/index.php/Tutorial
Als Folge, da das Programm jetzt schneller zeichnet, könnte man noch ne Checkbox einbauen, mit einem Direktzeichenmodus. Also das nach jeder Änderung am Code direkt die Zeichenprozedur ausgerufen wird, und man nicht immer den ZeichnenButton drücken muss...
Ich hoffe da waren ein Paar hilfreiche Tipps dabei, viel Spaß noch mit deinem Programm.
Das ist ein wirklich interessantes Programm, Respekt.
Hier einmal 2 verbesserungsforschläge:
1) Dein Programm zeichnen recht Langsam, das liegt nicht an dem PC, sondern daran, das nach jeder Linie das ganze Bild ausgegeben wird, danach wird noch eine Linie gezeichnet und das Bild wird ausgegeben, u.s.w. . Wenn man das so umschreibt das erst alle Linien gezeichnet und dann ausgegeben wird, so ist das Zeichnen um ein Vielfaches schneller ! Dafür sind nur zwei Zeilen Code in der Zeichenprocedure notwendig:
Code: Alles auswählen
With Image.Canvas Do
Begin
Image.Picture.Bitmap.BeginUpdate(True); // Die hier am Anfang des Zeichnens
Pen.Color:=clWhite;Brush.Color:=clWhite;Font.Color:=clBlack;
//...
GitterZeichnen3D;
Image.Picture.Bitmap.EndUpdate(); // Und die hier am schluss
End;
2) Das ganze Programm könnte man noch mithilfe der Grafikkarte zeichnen lassen, dadurch musst du nur die 3 Dimensionalen Punkte eingeben und um das Zeichen, und alle 3D effekte kümmert sich die Grafikkarte. Das würde das ganze dann nochmal schneller machen, aber man müsste sich nen bisschen mit OpenGL auseinandersetzen... http://wiki.delphigl.com/index.php/Tutorial
Als Folge, da das Programm jetzt schneller zeichnet, könnte man noch ne Checkbox einbauen, mit einem Direktzeichenmodus. Also das nach jeder Änderung am Code direkt die Zeichenprozedur ausgerufen wird, und man nicht immer den ZeichnenButton drücken muss...
Ich hoffe da waren ein Paar hilfreiche Tipps dabei, viel Spaß noch mit deinem Programm.
Code: Alles auswählen
Signatur := nil;
-
- Beiträge: 24
- Registriert: Mo 1. Aug 2011, 14:39
- OS, Lazarus, FPC: Windows XP und 7, L 0.9.31, FPC 2.4.4
- CPU-Target: 32 und 64 Bit
- Wohnort: Hannover
- Kontaktdaten:
Re: Dreidimensionale Funktionen
Vielen Dank für die Hinweise und Verbesserungsvorschläge,
ich habe das Unterdrücken von nicht sichtbaren Linien schon vor ca. 30 Jahren programmiert.
Damals hat die Ausgabe auf einem C64 oder einem der ersten PC's teilweise Stunden gedauert.
An ein sehr enges Netz war nur zu denken.
Mir sind die Begriffe OpenGL oder DirecktX geläufig.
Ich bin noch nicht dazu gekommen, diese Möglichkeiten auch in meinen Programmen zu nutzen.
Gruß Heizkoerper
ich habe das Unterdrücken von nicht sichtbaren Linien schon vor ca. 30 Jahren programmiert.
Damals hat die Ausgabe auf einem C64 oder einem der ersten PC's teilweise Stunden gedauert.
An ein sehr enges Netz war nur zu denken.
Mir sind die Begriffe OpenGL oder DirecktX geläufig.
Ich bin noch nicht dazu gekommen, diese Möglichkeiten auch in meinen Programmen zu nutzen.
Gruß Heizkoerper
-
- Beiträge: 24
- Registriert: Mo 1. Aug 2011, 14:39
- OS, Lazarus, FPC: Windows XP und 7, L 0.9.31, FPC 2.4.4
- CPU-Target: 32 und 64 Bit
- Wohnort: Hannover
- Kontaktdaten:
Re: Dreidimensionale Funktionen
So, ich habe einige Tips in das Programm eingearbeitet.
Jetzt fehlt nur noch OpenGL...
Gruß Heizkoerper
Jetzt fehlt nur noch OpenGL...
Gruß Heizkoerper
- Dateianhänge
-
- DreiD.zip
- (129.68 KiB) 90-mal heruntergeladen
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: Dreidimensionale Funktionen
Ich habe vor einiger Zeit 'mal einige Tests gemacht, um die Grafik-Hardware dazu zu benutzen, um Zoom und Pan für ein 2-D Bild zu machen. Ich habe nicht direkt auf OpenGL aufgesetzt, sondern habe "SDL" als Layer dazwischen verwendet (Es gibt oder gab z.B "Jedi-SDL" für die Pascal-Anbindung von SDL).
Damit kann das Programm dann sowohl mit OpenGL als auch mit Direct-X laufen, weil SDL "nach unten" beide Grafik-Systeme alternativ ansprechen kann.
Ich vermute, für 3D geht so etwas auch.
Gruß,
-Michael
Damit kann das Programm dann sowohl mit OpenGL als auch mit Direct-X laufen, weil SDL "nach unten" beide Grafik-Systeme alternativ ansprechen kann.
Ich vermute, für 3D geht so etwas auch.
Gruß,
-Michael