Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

[C++][OpenGL] Sam nie wiem jak to opisać...

#1
[C++][OpenGL] Sam nie wiem jak to opisać...
Jak w temacie używam C++ i OpenGL w tym, że OpenGL w SDL'u.

Chodzi o to, że chciałem rysować pojedyncze pixele aby stworzyć z nich w grze minimapę. No i używam do tego rysowania po prostu kwadratu o wymiarach 1x1

Kod:
glBegin(GL_QUADS);
glColor3f( 0.0, 0.0, 0.0);
glVertex2f(100, 100); glVertex2i(100, 300);
glVertex2f(300, 300); glVertex2i(300, 100);
glEnd();

Nie ważne już czy to jest 1x1 bo tutaj chciałem tylko sprawdzić czy wszystko śmiga. No i rzeczywiście działa. Jest tylko jeden problem a mianowicie to, że funkcja glColor3f koliduje z moim wyświetlaniem mapy:

Kod:
glBindTexture( GL_TEXTURE_2D, texture );

glBegin( GL_QUADS );
        glTexCoord2i( 0, 0 ); glVertex3f( x, y, 0 );
    glTexCoord2i( 1, 0 ); glVertex3f( x+weight, y, 0 );
    glTexCoord2i( 1, 1 ); glVertex3f( x+weight, y+height, 0 );
    glTexCoord2i( 0, 1 ); glVertex3f( x, y+height, 0 );
glEnd();

Koliduje w ten sposób, że zamiast sprite'ów wyświetla mi po prostu czarne prostokąty......

Aby nie było nieścisłości to sama mapa wyświetlała się dobrze przed dodaniem rysowania kwadratu. Sprawdziłem też jak rysuje kwadrat bez funkcji glColor3f i bez niej wszystko działa dobrze a rysowany kwadrat ma kolor czerwony (pewnie dlatego, że ostatni pixel w sprite'ach mapy jest czerwony tak? (nie wiem tak tylko domyslam się ;p)

Ogólnie próbowałem z różnymi kolorami i efekt taki sam.

Dla ułatwienia dodam też jak deklaruję OpenGL i SDL


Kod:
if( SDL_Init( SDL_INIT_EVERYTHING ) < 0 )
     return false;

SDL_Surface* screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_OPENGL );

if( init_GL() == false )
     return false;

Tutaj funkcja init_GL()

Kod:
glEnable( GL_TEXTURE_2D );
glClearColor( 0, 0, 0, 0 );
glViewport( 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT );

glClear( GL_COLOR_BUFFER_BIT );

glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glOrtho( 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, -1, 1 );

glMatrixMode( GL_MODELVIEW );
glLoadIdentity();

Wie ktoś może w czym tkwi problem?
 System operacyjny: windows_xp_2003 Przeglądarka: chrome
#2
RE: [C++][OpenGL] Sam nie wiem jak to opisać...
Niech kolega wrzuci kompletny kod do pliku tekstowego, plik na jakiś serwer i poda linka.
Dołącz również pliki graficzne.
Czy kolega liznął alphablending w projekcie ?
Czy na pewno warto zaprzęgać do tego aż OpenGLa ?Chytry SDL nie wystarcza ?

Cytat:że funkcja glColor3f
Ustawiony kolor obowiązuje dotąd aż nie zostanie ustawiony kolejny.
Nie odpowiadam w tematach z działu 'Bezpieczeństwo', w których brakuje pełnego zestawu logów:
http://forum.pcformat.pl/WAZNE-Jak-zaloz...ec-WAZNE-t
Jeżeli prowadziłem wątek i w nim nie odpowiadam przez 3 dni-proszę o przypomnienie na PW.
Nie pomagam na PW.
Prośba o przetestowanie aplikacji: http://forum.pcformat.pl/Prosba-o-przete...L-OpenGL-t
 System operacyjny: linux Przeglądarka: firefox
#3
RE: [C++][OpenGL] Sam nie wiem jak to opisać...
SDL nie styka bo jest za wolny... ;p No chyba, że ja mam zły pomysł na wyświetlanie mapy, tj. mapa jest zbudowana z kafelków 32x32 okno to 1000x800 (podaje w przyblizeniu) czyli co klatke wyswietla troche mniej niz 1k sprite'ów i w SDL'u za bardzo procka obciąża podczas gdy w OpenGL mam zużycie rzędu 1-2% (w sdl'u było 20~). No właśnie nie ma po co kodu podawać bo to cały kod OpenGl, który w projekcje używam nic więcej... Tylko wyświetlanie tekstur i to jest na tyle a jak już pisałem po wykasowaniu linii glColor3f wszystko działa dobrze. No z tym, że kolor rysowanego prostokąta jest czerwony ;p

Sprawdzę jeszcze czy to samo będzie jeżeli usunę wyświetlanie mapy na ekranie.

EDIT:
Po usunięciu wyświetlania mapy jest to samo. Sprawdzę jeszcze czy bez wczytywania sprite'ów jest to samo.

EDIT2:
No i wszystko się wyjaśnia. Jeżeli nie wczytuje sprite'ów to wszystko jest ok

Z tym, że to cały kod OpenGL to zapomniałem o jednym:

Kod:
COGLTexture::COGLTexture(SDL_Surface* resource)
{
    GLenum texture_format;
    GLint  nOfColors;
    weight = resource->w;
    height = resource->h;
        
    nOfColors = resource->format->BytesPerPixel;
        if (nOfColors == 4)  
        {
                if (resource->format->Rmask == 0x000000ff)
                        texture_format = GL_RGBA;
                else
                        texture_format = GL_BGRA;
        } else if (nOfColors == 3)  
        {
                if (resource->format->Rmask == 0x000000ff)
                        texture_format = GL_RGB;
                else
                        texture_format = GL_BGR;
        } else {
        }

    glGenTextures( 1, &texture );

    glBindTexture( GL_TEXTURE_2D, texture );

    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );

    glTexImage2D( GL_TEXTURE_2D, 0, nOfColors, weight, height, 0,
        texture_format, GL_UNSIGNED_BYTE, resource->pixels );
}

Jest to konstruktor kopiujący obraz wczytany w SDL'u na OpenGL'a. Tak więc tutaj tkwi problem a, że jestem nowy w OpenGL'u to zbytnio nie widzę co tu może to powodać.
 System operacyjny: windows_xp_2003 Przeglądarka: chrome
#4
RE: [C++][OpenGL] Sam nie wiem jak to opisać...
Albo pokażesz wreszcie cały kompletny kod w pliku plus grafiki albo radź sobie sam...

Cytat:SDL nie styka bo jest za wolny
A skąd mam to wiedzieć, skoro kodu nie zaprezentowałeś ? Jeśli trzaskacz jakąś funkcję SDL_UpdateRect lub podobną dla całego ekranu co klatkę niezależnie czy jego zawartość się zmieniła (a nie tylko i wyłącznie kiedy jest to potrzebne) czy nie - to nic dziwnego, że masz takie zużycie procka..
Nie odpowiadam w tematach z działu 'Bezpieczeństwo', w których brakuje pełnego zestawu logów:
http://forum.pcformat.pl/WAZNE-Jak-zaloz...ec-WAZNE-t
Jeżeli prowadziłem wątek i w nim nie odpowiadam przez 3 dni-proszę o przypomnienie na PW.
Nie pomagam na PW.
Prośba o przetestowanie aplikacji: http://forum.pcformat.pl/Prosba-o-przete...L-OpenGL-t
 System operacyjny: windows_xp_2003 Przeglądarka: seamonkey
#5
RE: [C++][OpenGL] Sam nie wiem jak to opisać...
Ale i tak SDL nie ma wsparcia sprzętowego a dodatkowo w OGL ma więcej możliwości, przed wyświetlaniem mapy zrób
Kod:
glColor3f(1.0f,1.0f,1.0f);
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
Programy: Polecane / Nowe / Inne



Użytkownicy forum szukali:
mapa kafelkowa c++ opengl

Podobne wątki ([C++][OpenGL] Sam nie wiem jak to opisać...)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
Question Obrót wokół własnej osi -OpenGL kamillo94 1 6864 13.01.2016, 16:06
Ostatni post: Szachista
  Jaka książka do OpenGL? emku 3 8418 22.03.2015, 20:53
Ostatni post: emku
  OpenGL - jak wygenerować animację klatka po klatce. Dreamer1x6xX 3 7804 19.03.2015, 08:55
Ostatni post: Szachista

Skocz do:


Wybrane wątki ([C++][OpenGL] Sam nie wiem jak to opisać...)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Python z wiersza poleceń Physicist 15 21433 21.08.2019 20:14
Ostatni post: Physicist
  Transfer plików via FTP Visual Basic FireBytes 3 7034 15.08.2019 07:41
Ostatni post: Szachista
  Menu wysuwane z boku patryk67 1 7720 07.08.2019 12:43
Ostatni post: aht
  Visual Basic Excel l.całkowitą przedstawić w postaci szesnastkowej fugaz 4 9625 18.06.2019 21:36
Ostatni post: fugaz
  Nauka do Olimpiady Informatycznej? piotr0905 1 9099 08.06.2019 16:50
Ostatni post: wlisik
Ściana Prosta gra w Builder C++ Kiranek1 1 9085 31.05.2019 15:20
Ostatni post: Szachista
  Menu (Nie widoczne długie opisy) wanhelsing 5 11132 28.04.2019 19:31
Ostatni post: koneton
  Skrypt usuwający pliki sylwiaa1 2 4464 28.04.2019 15:20
Ostatni post: sylwiaa1
  Środowisko do assemblera Physicist 4 10358 21.04.2019 14:04
Ostatni post: Ajgor
  VBA excel dmjs 6 10617 17.04.2019 10:20
Ostatni post: ptrick
  C++ - sens pogłębiania nauki gbr 5 10320 25.03.2019 12:53
Ostatni post: koneton
  Klasa wewnętrzna w C++ Physicist 4 9968 23.03.2019 18:28
Ostatni post: Physicist
  Ruby on Rails - tutoriale luciussulla 0 9070 23.03.2019 16:49
Ostatni post: luciussulla
Big Grin Czy dostane sie technikum informatycznego klaudiusz20046 6 12713 21.03.2019 01:28
Ostatni post: UnableToSee
  [C#] Program do moderacji czatów gier wiktrom12 0 9573 07.03.2019 15:33
Ostatni post: wiktrom12