Не грузится картинка в OpenGL

ну чо опять началось-то :japanese_goblin: нормально же сидели



Чем отличаются эти две картинки, кроме разрешения?

А что не так? Вторая не зеленой должна быть?

Они одной и той же программой сохранены?

Зелёная это из-за освещения.
Она не должна быть перекошенной и в полосочку. Это же обычный BMP 24 bit. Чё с ним может быть не так?

Только что пересоранил обе картинки в фотошопе (в одинаковые форматы!). Одна нормально отображается, а вторая перекошенная :japanese_goblin:

Из предоставленной информации видимые отличия:
имя файла и разрешение.
А то что фото перекошено, так может ваш код именно к количеству пикселей и привязан…
Мы то этого не знаем.

ни к чему он не привязан.
другие картинки нормально грузятся.

Я б попробовал например сохранить в другой формат и из него в бмп.
Может там что-то странное/экзотическое внутри и при просто пересохранении оно осталось.

Или более простым ПО.

я и в делфи пробовал сохранять

Очень может быть. Стеганография например.

Чего экзотического может быть в битмапе? Он ведь даже не сжатый.
Это обычный скриншот из видео, полученный и обрезанный тем же способом, что и второй.

код выкладывайте. Иначе эти гадания на кофейной гуще могут продолжаться вечно.

Сейчас открыл эту картинку в пэинте и сохранил ее в три формата - PNG, BMP, JPG. PNG отображается нормально, а остальные - нет! Даже если читать битмап виндоовыми функциями и вручную переворачивать красный и синий.
Хотя другие JPG / BMP нормально отображаются.

GLuint LoadTexture(std::string fileName)
{
    int imageWidth;
    int imageHeight;
    int imageChannelsCount;
    stbi_set_flip_vertically_on_load(true);
    unsigned char* imageData = stbi_load(fileName.c_str(), &imageWidth, &imageHeight, &imageChannelsCount, 0);
    if (imageData)
    {
        GLuint hTexture;
        glGenTextures(1, &hTexture);
        if (hTexture)
        {
            glBindTexture(GL_TEXTURE_2D, hTexture);

            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

            int format = imageChannelsCount == 4 ? GL_RGBA : GL_RGB;

            glTexImage2D(GL_TEXTURE_2D, 0, imageChannelsCount,
                         imageWidth, imageHeight, 0,
                         format, GL_UNSIGNED_BYTE, imageData);

            glBindTexture(GL_TEXTURE_2D, 0);
        }
        stbi_image_free(imageData);

        return hTexture;
    }
    return 0;
}

void DestroyTexture(GLuint textureId)
{
    glDeleteTextures(1, &textureId);
}

Ничего необычного.

И чему равен формат когда каждую из картинок загружаете?

Количеству каналов в картинке. Переменные же с нормальными именами. Для BMP / JPG imageChannelsCount равно 3. Для PNG с альфой - 4. От этого format, соответственно, либо GL_RGB, либо GL_RGBA.
Но я и вручную подставлял - разницы не было. При совсем неправильных значениях - просто падает.

Не помогает! То же самое. Только в хексе несколько байт в заголовке меняются при сохранении пэинтом. Фотошоп немного другой заголовок пишет.

А размер текстуры?? Что то я смутно помню что он должен быть кратен 2. Или степенью 2.


Эти картинки в высоту на 2 не делятся, но работают.

так и третью тогда выкладывайте которая кривая

Liza2

а как файл можете приложить а то ее движок переработал под себя. Лучше в архиве все три фотки

Debug.7z (726.1 КБ)
Грузятся все, кроме Liza2.bmp

Ну сделайте ширину кратную 2.

1 лайк