Registriert: Sa Mai 04, 2002 19:48 Beiträge: 3830 Wohnort: Tespe (nahe Hamburg)
Ich frage mal danach, was der eigentliche Sinn dahinter ist. Soll es nur der Darstellung oder auch der interaktion dienen? wen ja, dann wirst Du schnell erleben, dass man dann wiederum auf andere Probleme stößt.
Das man ein Anfänger ist, befreit einen nicht davon lesen zu können Die Tutorials bis zum Texturen-Tutorials sind dein Ding, und sollten ein herleiten für dein Problem ermöglichen. Laden einer Textur und zeichnen per unterschiedlicher UV-Maps.
_________________ "Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."
Also ich wage mal zu behaupten, dass für "normale" 2D-Fenstergrafik (Linien, Bars, (Fill)Ellipse, TrueTypeFonts, Bitmaps, ...)die Standard (X-) Windows API schneller ist als OpenGL. Die ist nämlich schon seit ewigen Zeiten (so ab den ersten SVGA Karten a'la S3 und Konsorten) ebenfalls hardwarebeschleunigt. Wenn du evtl. direkt DIBs auf den Bildschirm haust (oder noch schlimmer - Pixel in den Canvas malst), ist natürlich klar, dass es langsamer wird - bildschirmkompatible MemDCs sollten aber meist schnell genug sein.
Ansonsten gäbs ja noch DirectDraw, das 2D-Orientiert ist, während OpenGL strikt auf 3D-ausgelegt ist, und nur mit Kunstgriffen davon überzeugt werden kann, sich wie ein normaler Rastergrafikschirm zu verhalten.
Registriert: Sa Mai 04, 2002 19:48 Beiträge: 3830 Wohnort: Tespe (nahe Hamburg)
Kann mir auch nur schwer vorstellen, dass das GDI das nicht packt. Unbedingt Form1.DoubleBuffered aktivieren, evtl. auch beim DrawGrid. Wie man statt 3D 2D zeichnen kann, ist im FAQ zu finden.
_________________ "Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."
Also nachdem ich dein Codegewurschtel angesehen habe, Folgendes:
Du kreierst bei jedem Renderdurchlauf die darzustellenden Bilder als TBitmap und lädst sie neu aus den Ressourcen. Keine gute Idee. Besser viele Bitmaps (etwa in Array) erstellen, diese am START des Programm laden (und nicht in der Renderschleife!) und bei Bedarf darstellen. Drauf achten, dass das Farbformat der Bitmaps dem Format des aktuell eingestellten Videomodus entspricht. Viel schneller.
Noch besser wäre: in einen mittels CreateCompatibleDC einen erstellten Bereich sämtliche Bitmaps (z.B. nebeneinander) hineinladen, Bei bedarf den richtigen Bildbereich auf den Devicekontext des Canvas kopieren. Noch schneller.
Also OpenGL sollte das können, es gibt aber User die haben ne schlechtere Grafikkarte und können Maximal 1024x1024 wenn net sogar 512x512... pixel grosse texturen anzeigen.
Was nimmst du eigentlich zum zeichnen, direkt aufs Handle oder machste es über ne Kompos TImage, TPaintbox??
Es zwingt dich doch niemand so ein riesengroßes Bitmap zu erstellen - und vor allem nicht so ein riesiges Grid zu generieren. Also inzwischen nehme ich an, dass du so eine Art Tilebasierte Grafikengine schreiben willst. Dafür lässt du das DrawGrid mal ganz schnell weg (Delphi Grids sind super Komponenten, können aber viel zu viel für deine Zwecke - was sich negativ auf das Laufzeitverhalten auswirkt).
Dazu hast zu z.B. ein zweidimensionales Array aus Integern oder Zeigern, über das du herausfindest, an welcher Stelle in deiner Rechteckigen Welt, welches Tile dargestellt wird. Nun findest du heraus, welcher Teil der Welt (z.B. in einer TPanel Komponente) dargestellt werden muss, dann zeichnest du diesen Teil in den Canvas eines Bitmaps, das du bereits am Start des Programms generiert hast - und bei dem du darauf achtest, dass die Zeichenfläche gleich groß oder größer als die ds Panels ist). Wenn du fertig bist, kopierst du das ganze Bitmap in den Canvas des Panels - dann flimmert nichts und alles ist schnell genug.
Das Ganze ginge auch unter OpenGL - wenn du aber nicht gerade Zoom- und Beleuchtungseffekte haben willst, kannst du dir das sparen.
Registriert: Sa Mai 04, 2002 19:48 Beiträge: 3830 Wohnort: Tespe (nahe Hamburg)
Bitte solch langen Codes, zumindest formatieren und hochladen! Das Forum wird dadurch sonst gekillt, da jeder Variable, jede Function, jedes Kommentar ein neues Suchwort wird und die übersichtlichkeit für die helfenden Arg strapaziert wird. Da ich keine andere möglichkeit habe dich zu kontaktieren sehe ich von einer Löschung ab...
_________________ "Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."
Mitglieder in diesem Forum: 0 Mitglieder und 8 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.