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 6875 13.01.2016, 16:06
Ostatni post: Szachista
  Jaka książka do OpenGL? emku 3 8433 22.03.2015, 20:53
Ostatni post: emku
  OpenGL - jak wygenerować animację klatka po klatce. Dreamer1x6xX 3 7819 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
Jak zacząć programować? IKNUPrograming 2 1445 04.06.2020 11:26
Ostatni post: Ajgor
Question Jak programować w bat? IKNUPrograming 0 1062 03.06.2020 17:26
Ostatni post: IKNUPrograming
  Validacja JS kolo48 3 3042 16.04.2020 14:06
Ostatni post: koneton
  Automatyczne wykonywanie czynności na stronie Fresher 0 2345 15.04.2020 20:53
Ostatni post: Fresher
  Visual Studio Code- zmiana folderu rozszerzeń Physicist 4 3924 05.04.2020 15:46
Ostatni post: Physicist
  Prośba o pomoc przy wyborze języka do konkretnego projektu. romands 6 3175 05.04.2020 14:07
Ostatni post: romands
Sad PhpMyAdmin w Mysql 8.0 Lauczi 3 3152 31.03.2020 16:34
Ostatni post: Lauczi
Ściana Klika pytań plz pomóżcie Samek2222 1 2987 22.03.2020 18:59
Ostatni post: Ajgor
  Pytanie - programowanie batch [cmd] Max23 0 2960 20.03.2020 01:03
Ostatni post: Max23
  Oczekiwanie na Akcje przycisku wanhelsing 8 4756 01.03.2020 19:44
Ostatni post: Szachista
Toungue Wybór szkoły średniej przez potencjalnego programistę Zikinan 1 4552 09.02.2020 15:58
Ostatni post: dzikuu86
  Skrypt pod sklep internetowy Talcia 4 7157 14.12.2019 19:48
Ostatni post: hexopex760
  Poszukuję pomysłu na prosty program ;) janciu96 5 13910 13.12.2019 23:32
Ostatni post: Ajgor
  Programowanie Batch (CMD) Informatyk2019 0 5458 11.12.2019 18:30
Ostatni post: Informatyk2019
  [JavaScript] Znajdowanie przedziału czasu rafal12999 0 2464 10.12.2019 17:58
Ostatni post: rafal12999