Как отобразить изображение hdr-файла на карту куба с помощью Vulkan? - PullRequest
0 голосов
/ 16 апреля 2020

На данный момент основано на Sascha Willems примерах, которые я написал для samplerCube текстуры для фрагментного шейдера. Он имеет одно и то же изображение JPG, скопированное на все 6 слоев (граней).

Я использую библиотеку изображений stbi для загрузки изображений, она работает нормально, если я использую ее для обычной 2D-текстуры, но если она отображается на кубе me sh создает искаженное изображение:

        int width = 0, height = 0, channel = 0;
        float* pixels = stbi_loadf("textures/test.hdr", &width, &height, &channel, STBI_rgb_alpha);
        if(!pixels) throw std::runtime_error("failed to load texture image!");

        this->texture_image.create_image(width, height, VK_FORMAT_R32G32B32A32_SFLOAT, VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT);
        this->texture_image.fill_memory(width, height, 4*sizeof(float), pixels);
        this->texture_image.create_image_view(VK_FORMAT_R32G32B32A32_SFLOAT, VK_IMAGE_ASPECT_COLOR_BIT);

        stbi_image_free(pixels);

1 Ответ

0 голосов
/ 16 апреля 2020

Нашел, как это сделать здесь: https://learnopengl.com/PBR/IBL/Diffuse-irradiance Даже если он в OpenGL, концепция такая же.

...