Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Kysymyksiä OpenGL:stä

jospa [11.11.2008 22:49:47]

#

Mennäänpäs suoraan asiaan:

Mulla olis tavoitteena tehdä ohjelma (c++), joka simuloi säätilaa ja esittää simuloinnin tulokset graafisesti (trendien piirto jne.). Tulosten ja muuttujien visualisointiin ajattelin käyttää opengl:ää, kun sitä on kovasti mainostettu grafiikan esittämiseen.

Tämän hetkinen tilanne on, että mulla on "windows application", josta saa simuloinnin päälle ja pois nappia painamalla ja yksi muuttujakin esitetään opengl-animaation avulla (tein GL_POLYGON:n avulla pylväskuvan).

Nyt minua vain askarruttaa, että miten pystyn monistamaan esimerkiksi tuota pylväskuvaa. Tai miten voin luoda useita ikkunoita, joissa pyörii oma animaationsa (esim. muuttujien trendien piirto omissa ikkunoissaan)? Ja onko opengl oikea työkalu tähän.

Kääntäjänä käytän dev-cpp:tä.

Metabolix [11.11.2008 23:57:42]

#

Olet ehkä käyttänyt jo funktiota wglMakeCurrent, tai jos et, niin nyt olisi luultavasti sen aika. Sillä voi käsittääkseni asettaa tietyn GL-kontekstin aktiiviseksi.

class hetkellinen_aktivointi {
  HDC old_hdc;
  HGLRC old_hglrc;

  HWND hwnd;
  HDC hdc;
  HGLRC hglrc;
public:
  // Objektin luonti (parametreina ikkuna ja GL-konteksti):
  hetkellinen_aktivointi(HWND _hwnd, HGLRC _hglrc) {
    // Vanhat tiedot talteen
    old_hdc = wglGetCurrentDC();
    old_hglrc = wglGetCurrentContext();

    // Tämän kerran tiedot muistiin
    hwnd = _hwnd;
    hglrc = _hglrc;
    hdc = GetDC(hwnd);

    // Aktivointi
    wglMakeCurrent(hdc, hglrc);
  }
  // Objektin tuhoutuminen:
  ~hetkellinen_aktivointi() {
    // Vanhat takaisin
    wglMakeCurrent(old_hdc, old_hglrc);

    // Vapautetaan omat roskat
    ReleaseDC(hwnd, hdc);
  }
};

void piirra_ikkuna_1() {
  hetkellinen_aktivointi akt(hwnd_1, hglrc_1);
  // Nyt voi piirtää ikkunaan hwnd_1.
  // Funktion lopussa akt-objekti tuhoutuu ja palauttaa vanhan kontekstin.
}

void piirra_ikkuna_2() {
  hetkellinen_aktivointi akt(hwnd_2, hglrc_2);
  // Nyt voi piirtää ikkunaan hwnd_2.
  // Välissä voi vaikka piirtää 1. ikkunankin:
  piirra_ikkuna_1();
}

Tämä tarinointi perustuu täysin teoriaan ja oletuksiin, itse en ole sen paremmin wgl:ään kuin useampaan ikkunaankaan koskenut. Koodin toteutustapakin on ehkä outo, mutta siinä ovat kuitenkin kaikki olennaiset funktiot parametreineen.

jospa [12.11.2008 21:53:58]

#

Hmm, jotenkin tuohon tapaan se täytyy toteuttaa. kiitos vatauksesta.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta