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

OpenGl C++ / TEKSTURY

Ostatnio zmodyfikowano 2011-01-26 16:03
Autor Wiadomość
sakuwbarakushow
Temat założony przez niniejszego użytkownika
OpenGl C++ / TEKSTURY
» 2011-01-21 17:11:11
Witam pisze grę w OpengCl , C++ i mam z nia nie zmała problem :(
u mnie np wczytuje wszystkie teksturki a na innym kompie już nie .
To samo w szkole na jednych komputerach działają tekstury na drugim już nie u mnie na kompie działa,u kolegi nie, u mnie na laptopie działa na moim drugim PC nie.
I cholera wie dlaczego,skoro w jednym miejscu działa więc to nie problem loadera.Wczytuje pliki BMP 24 BIT .
(Gdyby powyższa informacja okazała się ważna).
Czy ktoś może mi pomóc, i napisać co mam zrobić aby wszystko działało poprawnie ? Nie tylko u mnie ale i u innych ? No bo po co gra która tylko u wybrańców by działa poprawnie.
Dodam że to nie jest nie wiadomo co,prosta gra 3D wiec zależało by mi aby każdy mógł w nią zagrać podobnie jak w Pac-Mana , czy IceTower.
Chodź grafika jest trochę lepsza niż w wyższej wymienionych.
Z góry dziękuję za wszelkie sugestie które mogły by rozwiązać ten problem.
P-26768
Drraven
» 2011-01-21 18:21:04
Może jakiś przykład ? Nie wiem czego ci to nie działa - nie podałeś kodu. Może nie działać bo podałeś źle ścieżki do plików, koledzy (twój drugi pc) nie mają odpowiednich bibliotek. Obrazki nie są ładowane bo nie istnieją lub wg inny powód.

----------
Drraven
P-26775
sakuwbarakushow
Temat założony przez niniejszego użytkownika
» 2011-01-21 18:53:09
Obrazki istnieją (sprawdziłem) gdyby nie istniały zadziałał by błąd braku tekstury.
Jakie biblioteki niby ? Mam koło exe'ka takowe podane : glaux.dll ,glut32.dll ,msvcr90d.dll

tekstury wczytuję następująco :
C/C++
void LoadGLTextures()
{
   
    const int liczba_tekstur = 5; //stała liczba tekstur
   
    AUX_RGBImageRec * TextureImage[ liczba_tekstur ];
   
    memset( TextureImage, 0, sizeof( AUX_RGBImageRec * ) * liczba_tekstur );
   
    TextureImage[ 0 ] = LoadBMP( "obrazki\\trawa.bmp" ); //ładowanie tekstury id 0
    TextureImage[ 1 ] = LoadBMP( "obrazki\\zach.bmp" ); //ładowanie tekstury id 1
    TextureImage[ 2 ] = LoadBMP( "obrazki\\zachu.bmp" ); //ładowanie tekstury id 2
    TextureImage[ 3 ] = LoadBMP( "obrazki\\trawa.bmp" ); //ładowanie tekstury id 3
    TextureImage[ 4 ] = LoadBMP( "obrazki\\niebo.bmp" ); //ładowanie tekstury id 4
   
   
    for( int i = 0; i < liczba_tekstur; i++ )
    {
        if( TextureImage[ i ] == NULL ) //jeżeli tekstura się nie załadowała,wzróć null i kontynuuj program
             continue;
       
        glGenTextures( 1, & texture[ i ] );
       
        glBindTexture( GL_TEXTURE_2D, texture[ i ] ); //włączenie nakładania textur                            
        // Stworzenie tekstury
        glTexImage2D( GL_TEXTURE_2D, 0, 3, TextureImage[ i ]->sizeX, TextureImage[ i ]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[ i ]->data ); //jak nie było tekstury to w tej linii się wywalało
        glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
        glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
       
        free( TextureImage[ i ]->data ); // kasowanie zbędnych danych                    
        free( TextureImage[ i ] ); // i samego wskaźnika         
    }
   
   
}

I dodam co ważne !
Na nie których komputerach działa a na innych już nie !
Więc co mogę zrobić aby przynajmniej na 90% komputerow działało ?
WAŻNE !
Dodałem do instalatora taki bajer : pakiet redystrybucyjny Microsoft Visual C++ 2005 32bit
gdyby nie zadziałało bezpośrednio z instalatora (jako druga instalacja po tamtej) można ręcznie instalować z gry dodałem ten bajerek.
Czy jego użycie może zniwelować problem nie działania tekstur ? Czy tegoż problemem może być jeszcze cos?
P-26777
virtmanx5
» 2011-01-21 19:33:56
podejrzewam, że błąd się nie pojawia ponieważ plik jest wczytywany poprawnie ...
błąd występuje za pewne przy glTexImage2D i możesz go sprawdzić przez glError, który zwróci ew. błąd
może on być powodowany przez to, że na niektórych komputerach mogą być wczytane tylko tekstury o wielkości 2 do potęgi (ale bodajże nie więcej niż 10 ale to może zależeć od karty graficznej
też tak kiedyś miałem, tak więc pozostaje:
- przerobić obrazki na dozwolone rozmiary
albo
- napisać funkcję która zareaguje na błąd zwrócony przez glError i spróbuje dostosować (np. rozciągnąć) teksturę do dozwolonego rozmiaru,
ale jeśli chodzi o większe tekstury to już pomysłu nie mam
P-26780
sakuwbarakushow
Temat założony przez niniejszego użytkownika
» 2011-01-21 19:37:59
No właśnie ja mam tekstury 1024/768px i trochę mniejsze.
A nie można zrobić czegoś aby u kazdego tak wczytywało ?
I jak mam zrobić obsługe tego błędu ?
I czy rozciągnięcie tekstury do ^2 nie spowoduje jej zniszczenia ?

//
i tak tekstury się wczytują do pamięci kolega u którego nie działają teksturki powiedział mi iż po włączeniu program ssie 17,000 pamięci zadeklarowanej, a np zmiana nazwy teksturki spowoduje wywalenie błędu o jego braku ;/
A skoro zadziałał błąd braku tekstury muszą być wczytane do pamięci.
P-26781
Drraven
» 2011-01-21 19:38:45
nie wiem ale po co dajesz dwa // (splash). Tak jak #up mówił zwracanie błędów a tekstura to 2^8 = 256x256 lub 2^10 = 1024.

----------
Drraven
P-26782
sakuwbarakushow
Temat założony przez niniejszego użytkownika
» 2011-01-21 19:43:44
// - jako edit

No więc dalej was nie rozumiem co ja mam zrobić aby te tekstury działały skoro jakos zmodyfikować loadera to proszę dodać mi do niego odpowiednie funkcje do modyfikacji i sprawdziło by się czy będzie działało czy też nie (chodź pozostaje mi nadzieja że będzie działało).
P-26784
virtmanx5
» 2011-01-21 20:42:17
tekstura o wymiarach np. 512 na 512 wczyta się natomiast 512 na 513 już niekoniecznie
w takim razie tj, napisałem albo pozmieniasz pliki bmp na odpowiednie rozmiary (prostsze), albo zrobisz obsługę błędu i dostosowywanie tekstur (trudniejsze)
P-26788
« 1 » 2 3
  Strona 1 z 3 Następna strona