Aktuelle Zeit: 17.05.2024, 00:52

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 16.01.2008, 12:40 
Offline

Registriert: 16.01.2008, 12:31
Beiträge: 79
Hi,

ich möchte später eine 2D Map rendern mit Spalten * Zeilen und Höhe (Tiefe).
Ich habe also eine Struktur im Speicher die mir genau diese Map, erstmal ohne die Tiefe, darstellt.
Der Plan ist nun später einfach über die Map zu laufen und einzelne Elemente davon zu rendern nämlich genau die, welche gerade auch zu sehen sind.

Nun dachte ich probier erstmal ein bischen, also habe ich mir eine *.bmp Datei erstellt 16x16 Pixel, und in meine OnRender-Methode folgendes eingebaut.

Code:
/************************************************************************/
/*  public OnRender                                                     */
/************************************************************************/
void CApp::OnRender()
{
  driverValue->beginScene(true, true, irr::video::SColor(0,120,102,136));
  for(int x = 0; x < 10; x++) // waagerechte
  {
    for(int y = 0; y < 10; y++) // senkrechte
    {
      driverValue->draw2DImage(this->testTexture,
                               irr::core::position2d<irr::s32>(x*16, y*16),
                               irr::core::rect<irr::s32>(0,0, 10*16, 10*16), 0,
                               irr::video::SColor(255,255,255,255),
                               true);
    }
  }

  driverValue->endScene();
}


Das klappt auch soweit, allerdings betragen meine FPS jetzt nur noch 42 statt 289, wenn ich dieses hier nicht render.

Wenn ich statt der Schleifen folgendes mache:
Code:
/************************************************************************/
/*  public OnRender                                                     */
/************************************************************************/
void CApp::OnRender()
{
  driverValue->beginScene(true, true, irr::video::SColor(0,120,102,136));

  driverValue->draw2DImage(this->testTexture,
    irr::core::position2d<irr::s32>(0, 0),
    irr::core::rect<irr::s32>(0,0, 10*16, 10*16), 0,
    irr::video::SColor(255,255,255,255),
    true);

  driverValue->endScene();
}

Dann wird im Grunde das gleiche gerendert, allerdings viel schneller 228 FPS statt 42. Was mir im Grunde klar ist, da ich nur einen Aufruf habe, statt 10x10 Funktionsaufrufen.
Aber meine Map wird später ja nicht aus den gleichen Elementen bestehen, die ich mal eben so rendern kann.

Wo hab ich also meinen Denkfehler?
Ich hoffe das Problem ist deutlich geworden. :)


Nach oben
 Profil  
 
BeitragVerfasst: 16.01.2008, 13:24 
Offline
Newsposter
Benutzeravatar

Registriert: 12.03.2007, 10:42
Beiträge: 338
Wohnort: Berlin
im grunde genommen hast du keinen denkfehler das problem dabei ist nur das du bei deinem 2tem beispiel wenn ich das richtig sehe einfach nur das bild streckst anstatt es mehrmals zu zeichnen.
eine anderre möglichkeit als diese um höhere fps zu haben wäre das bild als textur zu erstellen und dann diese textur auf eine plane zu rendern die du mal einfach bestimmst.


Nach oben
 Profil  
 
BeitragVerfasst: 16.01.2008, 13:58 
Offline

Registriert: 16.01.2008, 12:31
Beiträge: 79
Das würde dann ja bedeuten, das entweder Irrlicht nicht gerade performant ist was 2D angeht, oder aber das meine Karte wirklich so schlecht ist das es einfach langsam ist. :)

Mh ich werde das zuhause mal auf meiner GF6600GT probieren, die ja auch nicht mehr die neueste ist. Trotzdem komisch, die Matroxkarte ist eigentlich für 2D genau das richtige.


Nach oben
 Profil  
 
BeitragVerfasst: 16.01.2008, 14:49 
Offline
Newsposter
Benutzeravatar

Registriert: 12.03.2007, 10:42
Beiträge: 338
Wohnort: Berlin
das problem liegt ganz sicher nicht an deiner grafikkarte sondern an direct-draw/der GDI die nämlich nicht schneller kann.
und es ist dadurch auch egal mit welcher grafikkarte du es ausprobierst, denn die GPU ist eigtl. ein 3D Beschleuniger und kein 2D Beschleuniger. daher auch der vorschlag das ganze als textur auf eine plane zu rendern, dort wäre es wieder 3d und hätte eine gute beschleunigung und hohe fps.


Nach oben
 Profil  
 
BeitragVerfasst: 16.01.2008, 14:57 
Offline

Registriert: 16.01.2008, 12:31
Beiträge: 79
Naja der Rechner an dem ich sitze hat eben eine Graka die in 2D super schnell ist.
Ich habe aber noch ein Problem gefunden.

Mit, dem nun richtigen Code, der aber ähnlich aussieht. Ist die Framerate nun bei ~200 statt bei 42. :)
Code:
  irr::video::ITexture *tmp = 0;
  isGreen = false;
  for(int x = 0; x < 10; x++) // waagerechte
  {
    for(int y = 0; y < 10; y++) // senkrechte
    {
      if (isGreen)
      {
        isGreen = !isGreen;
        tmp = this->textureGruen;
      }
      else
      {
        isGreen = !isGreen;
        tmp = this->textureOrange;
      }
      driverValue->draw2DImage(tmp,
                               irr::core::position2d<irr::s32>(x*16, y*16),
                               irr::core::rect<irr::s32>(0, 0, 16, 16), 0,
                               irr::video::SColor(255,255,255,255),
                               true);
    }
  }


Beim der Rect-Struktur habt ich nämlich nicht die korrekten Werte übergeben, vermutlich war er deswegen so langsam. :)


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder 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