Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[OpenGL] Przezroczysta tekstura zakrywa obiekt

Ostatnio zmodyfikowano 2013-09-15 21:22
Autor Wiadomość
Galfados
Temat założony przez niniejszego użytkownika
[OpenGL] Przezroczysta tekstura zakrywa obiekt
» 2013-09-15 16:22:18
Witajcie mam problem, że tekstura (maski świetlnej) zakrywa mi teksture gracza:

Kod odpowiedzialny za wyświetlanie:
C/C++
void Level::Display() {
    glPushMatrix();
    glTranslatef( - camera.x, - camera.y, 0 );
    map->Display( 0, 0 );
    glPopMatrix();
   
    player->Display();
   
    glPushMatrix();
    glTranslatef( - camera.x, - camera.y, 0 );
    light_mask->Display( 0, 0 );
    glPopMatrix();
   
    /*if (!day) {
            float current_color[4];
            glGetFloatv(GL_CURRENT_COLOR, current_color);
            glColor4f(0.0f, 0.0f, 0.0f, 0.5f);
   
            glBegin(GL_QUADS);
                glVertex2f(0.0f, 0.0f);
                glVertex2f(1280.0f, 0.0f);
                glVertex2f(1280.0f, 720.0f);
                glVertex2f(0.0f, 720.0f);
            glEnd();
   
            glColor4fv(current_color);
        }*/
   
}

Ładowanie OpenGL'a
C/C++
void Game::initOpenGL() {
    glMatrixMode( GL_PROJECTION );
    glOrtho( 0, window_width, window_height, 0, 1, - 1 );
    glMatrixMode( GL_MODELVIEW );
    glDisable( GL_DEPTH_TEST );
   
    glEnable( GL_BLEND );
    glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
    //glAlphaFunc(GL_GREATER,0.1);
    glEnable( GL_ALPHA_TEST );
}

To jest tak: http://s11.postimg.org​/k5y4t539v​/Zrzut_ekranu_z_2013_09_15_16_14_50.png


A gdy zmienię kod na to (gdzie indziej dam player->Display();) to postać wyświetla się normalnie ale mi zależy aby postać była pod maską świetlną bo chcę aby na niej też było światło.

http://s21.postimg.org​/uteofgk4n​/Zrzut_ekranu_z_2013_09_15_16_16_15.png
C/C++
void Level::Display() {
    glPushMatrix();
    glTranslatef( - camera.x, - camera.y, 0 );
    map->Display( 0, 0 );
    glPopMatrix();
   
    glPushMatrix();
    glTranslatef( - camera.x, - camera.y, 0 );
    light_mask->Display( 0, 0 );
    glPopMatrix();
   
    player->Display();
   
    //player->Display();
   
    /*if (!day) {
            float current_color[4];
            glGetFloatv(GL_CURRENT_COLOR, current_color);
            glColor4f(0.0f, 0.0f, 0.0f, 0.5f);
   
            glBegin(GL_QUADS);
                glVertex2f(0.0f, 0.0f);
                glVertex2f(1280.0f, 0.0f);
                glVertex2f(1280.0f, 720.0f);
                glVertex2f(0.0f, 720.0f);
            glEnd();
   
            glColor4fv(current_color);
        }*/
   
}

Jakieś sugestie?
P-92173
kubawal
» 2013-09-15 19:31:41
Słyszałem, że tekstura z przeźroczystością(ta która jest przed obiektem) musi być zdefiniowana po teksturze bez przeźroczystości

/edit: Tak, w mojej książce do OpenGL pisze:

W pierwszej kolejności powinna być wywołana lista rysująca obiekt położony najdalej od obserwatora. (...) Tekstura z przeźroczystością znajdująca się najdalej obserwatora powinna być wywołana jako ostatnia
P-92184
Galfados
Temat założony przez niniejszego użytkownika
» 2013-09-15 20:19:07
Można prosić o jakiś pseudo kod? :D
P-92185
kubawal
» 2013-09-15 20:21:55

nałóż teksturę gracza;
nałóż teksturę maski świetlnej;
???
0_o
P-92186
Galfados
Temat założony przez niniejszego użytkownika
» 2013-09-15 21:22:41
Tak robię ;p Dziwne bo gdy wyświetlam inny obrazek to normalnie działa tak jak chcę.

EDIT: Problem rozwiązany nie chcę pisać jak go rozwiązałem bo wyjdę na bałwana xD
P-92194
« 1 »
  Strona 1 z 1