Member 13927363 Ответов: 1

Qt5 opengl не может загрузить bmp файл изображения в виде текстуры в куб


Я нашел этот пример проекта, основанный на учебнике NEHE, но не работает на моей версии Qt 5, попробовал отредактировать некоторый код, но этот файл не может быть загружен. И предупреждение тоже существует

<pre lang="c++">
предупреждение: C4005: 'CALLBACK': переопределение макроса

эта строка дает предупреждение макроса, и файл minwindef.h:
#define CALLBACK    __stdcall


Код:

void loadGLTextures()
    {
        QImage t;
        QImage b;

        if ( !b.load( ":/images/nehe.bmp" ) )
        {
            //b = QImage( 16, 16, 32 ); //original
            //b.fill( Qt::green.rgb() ); //original

            QMessageBox::information(this, "Error", "Could not load file");

            QImage b(16, 16, QImage::Format_RGB32); //*******
            b.fill(Qt::green); //*************
        }

        t = QGLWidget::convertToGLFormat( b );

        if(t.isNull())
       {
            QMessageBox::information(this, "Error", "IMAGE IS NULL");
        }

        glGenTextures( 1, texture );// Create The Texture

        glBindTexture( GL_TEXTURE_2D, texture[0] ); //assign a texture name to texture data.

        glTexImage2D( GL_TEXTURE_2D, 0, 3, t.width(), t.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, t.bits() );

        //Linear Filtering
        glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
        glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
    }


После запуска кода QMessage выскакивает со словами "не удалось загрузить файл", я не уверен, что что-то не так.

Что я уже пробовал:

попробовал изменить какой-то исходный код, но все равно ошибка bmp-файл не может быть загружен

Jochen Arndt

Пожалуйста, постарайтесь быть более конкретным в том, что не работает.
Тут B.нагрузки() позвонить не получится?
Если да, то существует ли файл nehe.png (является встроенным ресурсом)?
Если он существует, является ли он допустимым файлом изображения (расширение указывает PNG, а не BMP)?

Что касается макро-переопределения:
Проверьте, где он определен (в обоих местах). Предупреждающее сообщение должно содержать эту информацию. Затем проверьте, почему это произошло. Мы не можем помочь, не зная об определениях и о том, какие файлы их содержат. Это может быть конфликт разных версий или конфликт между несвязанными модулями.

Member 13927363

Привет, я снова обновил свой вопрос. Что касается вашего вопроса, то я действительно не уверен, какая часть выходит из строя, так как она работает. Единственная проблема заключается в том, что текстура не загружается, если файл image .bmp.

Что касается переопределения макроса, то я нажал на ошибку, и из этой части "#define CALLBACK __stdcall " выдает предупреждение с файлом minwindef.h

Надеюсь, вы сможете помочь. СПАСИБО

1 Ответов

Рейтинг:
10

Rick York

Это не похоже на действительное имя файла для меня :

if ( !b.load( ":/images/nehe.bmp" ) )
Вам нужно либо удалить двоеточие, либо вставить букву диска.