Link

Carregando uma imagem

Neste capítulo vamos renderizar um quadrado com uma textura aplicada em sua superfície. Mas antes de adicionarmos uma imagem a nossa geometria, temos que ter um arquivo contendo a imagem em si. Para isso, criamos um novo diretório chamado textures ao lado do diretório shaders para armazenar nossa imagem de textura. Vamos carregar uma imagem chamada texture.png desse diretório. A imagem escolhida para este exemplo está disponível em https://en.wikipedia.org/wiki/Lenna, mas qualquer outra imagem também vai funcionar.

Por enquanto iremos adicionar essa imagem aos recursos do Qt. Para isso, clicamos com o botão direito no aquivo resources.qrc no Qt Creator, depois, clicamos em Add Existing Files… e selecionamos o arquivo texture.png.

Em seguida, criamos uma nova função chamada addTextureImage onde carregaremos uma imagem e a enviaremos para um objeto VkImage. Essa função recebe como parâmetro um objeto do tipo QString contendo um caminho para o arquivo de imagem:

public:
...
	void addTextureImage(QString texturePath);
...

void Renderer::addTextureImage(QString texturePath) {

}

Inicialmente, iremos chamar essa função com o caminho para nossa imagem de teste no final de initObject:

void Renderer::initObject() {
	QSharedPointer<Model> model =
		QSharedPointer<Model>::create(Model());
	m_object = new Object3D(model);

	createObjectVertexBuffer();

	addTextureImage(":/textures/texture.png");
}

Para carregar a imagem em nosso programa iremos utilizar a classe QImage do Qt. Essa classe suporta os formatos de arquivo de imagem mais comuns, como BMP, GIF, JPEG e PNG. Carregar uma imagem com QImage é muito simples, basta chamar o construtor de QImage com o caminho para a imagem escolhida:

void Renderer::addTextureImage(QString texturePath) {
    QImage image(texturePath);

    if (image.isNull()) {
        qFatal("Failed to load texture image!");
    }

    image = image.convertToFormat(QImage::Format_RGBA8888);
    VkDeviceSize imageSize = image.sizeInBytes();
}

Depois de carregarmos a imagem nesse objeto, convertemos seu formato para o formato desejado utilizando a função convertToFormat. Neste caso o formato desejado é Format_RGBA8888. Por fim, obtemos o tamanho em bytes da imagem através da função sizeInBytes, pois precisaremos dessa informação em breve.


Anterior Próximo