Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Не загружается 10-я по счету текстура


Автор: Gongex 15.2.2009, 20:10
Беру пример из урков Нэхэ,загружаю 9 Битмапов,.....
Код

LRESULT    CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);    // Declaration For WndProc

AUX_RGBImageRec *LoadBMP(char *Filename)                // Loads A Bitmap Image
{
    FILE *File=NULL;                                    // File Handle

    if (!Filename)                                        // Make Sure A Filename Was Given
    {
        return NULL;                                    // If Not Return NULL
    }

    File=fopen(Filename,"r");                            // Check To See If The File Exists

    if (File)                                            // Does The File Exist?
    {
        fclose(File);                                    // Close The Handle
        return auxDIBImageLoad(Filename);                // Load The Bitmap And Return A Pointer
    }

    return NULL;                                        // If Load Failed Return NULL
}

Код

int LoadGLTextures()                                    // Load Bitmaps And Convert To Textures
{
    int Status=FALSE;                                    // Status Indicator

    AUX_RGBImageRec *TextureImage[15];                    // Create Storage Space For The Texture

    memset(TextureImage,0,sizeof(void *)*1);   

    if (TextureImage[0]=LoadBMP("1.bmp"))
    {
        Status=TRUE;                                    // Set The Status To TRUE

        glGenTextures(1, &texture[0]);                    // Create The Texture

        // Typical Texture Generation Using Data From The Bitmap
        glBindTexture(GL_TEXTURE_2D, texture[0]);
        glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
    }

    if (TextureImage[0])                                    // If Texture Exists
    {
        if (TextureImage[0]->data)                            // If Texture Image Exists
        {
            free(TextureImage[0]->data);                    // Free The Texture Image Memory
        }

        free(TextureImage[0]);                                // Free The Image Structure
    }

    return Status;    





Все работает а при загрузке 10-го битмапа не идет,
и при включении окно появляется но,ничего не рисуется из функций опенгл и срабатывает эта функция:
Код

if (hDC && !ReleaseDC(hWnd,hDC))                    // Are We Able To Release The DC
    {
        MessageBox(NULL,"Release Device Context Failed.","SHUTDOWN ERROR",MB_OK | MB_ICONINFORMATION);
        hDC=NULL;                                        // Set DC To NULL
    }

Я решил что какие то ограничения на колво загружаемых текстур,либо "память" "проги" перегружена.Кто знает?

Добавлено через 1 минуту и 52 секунды
эта прога-трехмерная квартира,мне туда ещё тексур 20 надо будет грузить.Для балкона,площадки,лифта и лестницы и т.д.

Автор: Solomon 15.2.2009, 20:34
Можешь весь код выложить? по тому что ты предоставил врятли можно проблему определить...

Добавлено через 8 минут и 33 секунды
Странно у тебя как то процесс загрузки происходит... у тебя там с указателями напарено походу...
покажи код...

Автор: Solomon 15.2.2009, 20:51
Gongex, Посмотри процесс загрузки нескольких текстур(например в 21-м уроке..) и сравни с тем что есть у тебя...

Автор: Rpahut 15.2.2009, 20:53
На самом деле, чтот не видно где вы загружаете девять текстур...
Gonqex, вы когда-нибудь слышали про debugger? Я сам не пробовал, но говорят классная штука smile .

Автор: Gongex 15.2.2009, 20:57
код формата .cpp На этой странице::
http://unlater.narod.ru/OpenGl_Slastenka1.html

Там полно такого glBindTexture(GL_TEXTURE_2D, texture[_]);

Автор: Rpahut 15.2.2009, 21:08
Цитата

/*
* This Code Was Created By Jeff Molofee 2000
* A HUGE Thanks To Fredric Echols For Cleaning Up
* And Optimizing This Code, Making It More Flexible!
* If You''ve Found This Code Useful, Please Let Me Know.
* Visit My Site At nehe.gamedev.net
*/ 

 smile 

glGenTextures(9, &texture[8]);   smile 

Автор: Gongex 15.2.2009, 21:19
так я не понял,все по порядку обьявляются,нигде эта текстура не повторяется....
-?!?

Добавлено через 5 минут и 5 секунд
Цитата

вы когда-нибудь слышали про debugger?

Ну Debug знаю,и такая папка есть,представляю как переводится....Типа "сборка"..
И точку останова знаю.На полях ставится.

Добавлено через 8 минут и 30 секунд
в21-м уроке нашел вот такое  memset(TextureImage,0,sizeof(void *)*2);
у меня же на 9 текстур стоит  memset(TextureImage,0-9,sizeof(void *)*1!!!!);

Добавлено через 9 минут и 46 секунд
пронумеровал,-проблема осталась

Автор: Rpahut 15.2.2009, 21:32
Вы запрашиваете девять текстур. opengl раскладывает их в texture[8] ,[9], [10], [11], [12], [13], [14], [15] и [16]... Э-э-э, постойте-ка, у вас в массиве всего 15 элементов!

Автор: Gongex 15.2.2009, 21:44
думаю,экспериментирую.Так и сяк ставлю коэффициэнты

Автор: Gongex 15.2.2009, 22:42
переделал под 21 урок Нэхэ,через цикл,и ваще че та напутал,выдает ошибку Break/Continue ..
и такие значения:
        EBX    00000000    
        ESI    0207AFFF    
        ECX    00000003    
        EBP    00000095    

Вылезает файл Disassembly
Код там же:http://unlater.narod.ru/OpenGl_Slastenka1.html
Кто знает такие вещи?    

Автор: Rickert 16.2.2009, 05:47
Gongex, начните с первого урока NeHe, пожалуйста smile 
Ещё неплохо бы вообще понимать что пишите, а то функции типа:
Код
у меня же на 9 текстур стоит  memset(TextureImage,0-9,sizeof(void *)*1);

Убивают. Вы понимаете вообще что пишите? 0-9, вы передаёте в качестве аргумент цифру минус девять, потом зачем то получаете размер пустого указателя и умножаете на единицу. Объясните как вы этого добилиь? smile 

Автор: Gongex 16.2.2009, 14:42
Мне по делу надо а не риторику,есть код на сайте,там у меня проблемы с glGenTexture,жду подсказок.

Автор: Gongex 16.2.2009, 15:43
с флешки взял сохраненный рабочий код,и там до 6-й текстуры,идет нормально,есть sizeX, sizeY, data, а после 7-й загрузки ни размеры ни название картинки неизветны.Я поставил точку останова на эту строку:if (TextureImage[7]=LoadBMP("8.bmp"))

Че подправить?!?

Добавлено через 8 минут и 29 секунд
http://unlater.narod.ru/OpenGl_Slastenka1.html

Здесь код

Автор: Rpahut 16.2.2009, 19:51
Цитата

думаю,экспериментирую.Так и сяк ставлю коэффициэнты

Конструктивный подход. 

Я уже указал где у вас ошибка. Все что вам нужно это разобраться с одной единственной функцией openGL.
Могу дать еще подсказку - вы передаете неправильные параметры - но это кажется и так понятно, потому что оно у вас не работает.

Автор: Gongex 16.2.2009, 20:22
Rpahut, 
спасибо за подсказку,я ничо не понял,мог бы и вообще не писать

Добавлено через 1 минуту и 8 секунд
Зачем существует этот форум,если ответить некому?!?........

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)