Hallo zusammen,
ich wollte mir grundsätzlich ein bisschen Wissen zum Thema 3D aneignen und wollte diesbezüglich eine ganz kleine Engine in Delphi schreiben, mit der ich selbst allerlei kleine Dinge ausprobieren kann.
Ich habe mir gedacht vielleicht kann ich ja einfach die TImage Komponente erweitern und eine Engine draufsetzen. Also habe ich eine neue Komponente entworfen, die TImage als Basis benutzt.
Das wollte ich quasi als Window Output für die Engine benutzen, damit ich die "Grund-Zeichnen-Befehle" von Canvas benutzen kann. Wollte mich halt eher auf das 3D Technische konzentrieren als auf Zeichen Routinen.
Soooo, problem ist jetzt leider nur dass ich eine rekursive Render Funktion geschrieben habe die - natürlich - einen Stack Überlauf produziert. Meine Frage ist jetzt ob mir jemand einen Tip geben könnte wie ich die Render Prozedur so verändern könnte, dass sie halt dieses Problem nicht verursacht sondern einfach nur verdammt viel FPS hat wenn nichts passiert *g*
Meine Render Prozedur sieht im Moment so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| procedure TNovaEngine.Render(); begin Canvas.Brush.Color := clWhite; Canvas.Pen.Color := clWhite; Canvas.Rectangle(0,0,Width,Height); Application.ProcessMessages;
FFrames := FFrames + 1; QueryPerformanceCounter(DEnde); QueryPerformanceFrequency(DFreq); Dauer := (DEnde - DStart) / DFreq; if(Dauer>1) then begin QueryPerformanceCounter(DStart); FLastFps := FFps; FFps := round(FFrames/Dauer); end; if(FShowFps) then begin if(FLastFps <> FFps) then Canvas.TextOut(5,5,'[Fps: '+inttostr(FFps)+']'); end; if(FActive) then Render(); end; |
Ich hoffe mir kann jemand helfen, oder bin ich mit diesem Ansatz völlig auf dem Holzweg?
Bitte beachtet, dass dies nur ein Test für mich selbst sein soll um die 3D Welt besser verstehen zu können. Also wie Ebenen funktionieren, Polygone dreidimensional wirkend gezeichnet und solche grundlegende Sachen mathematisch gelöst werden können. Es geht also nicht darum, dass dieser Weg der optimalste sein soll, wenn er halbwegs ordentlich funktioniert bin ich schon glücklich
