Fernando Couto 0 Posted February 6 Report Share Posted February 6 Olá. Quero colocar uma imagem de fundo num programa que estou a fazer, para isto criei uma textura. No entanto estou a ter os seguintes problemas: a textura está a aparecer com uns tons azulados, já tentei mudar os vértices que correspondem às cores mas só fica pior. E outro problema: não estou a conseguir com que ocupe a janela toda: caso coloque o 3ºvértice (z) a -1 fica a ocupar a janela toda mas fica à frente dos outros objetos, o que não é suposto, aliás a partir de -5 fica à frente dos mesmos, só -6 ou valores inferiores fazem com que não se sobreponha em relação aos objetos (tornando a imagem mais pequena). float vertices[] = { -1.0f, -1.0f, -6.0f, 0.0f, 0.0f, 0.00f, 0.0f, 1.0f, 0.0f, 1.0f, -1.0f, -6.0f, 1.0f, 0.0f, 0.00f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, -6.0f, 1.0f, 1.0f, 0.00f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, -6.0f, 1.0f, 1.0f, 0.00f, 0.0f, 1.0f, 0.0f, -1.0f, 1.0f, -6.0f, 0.0f, 1.0f, 0.00f, 0.0f, 1.0f, 0.0f, -1.0f, -1.0f, -6.0f, 0.0f, 0.0f, 0.00f, 0.0f, 1.0f, 0.0f}; Estive a pesquisar sobre a transparência duma textura, e supostamente teria que usar a função que já está declarada no código: glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); No while do main: glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, texture1); ourShader.use(); glm::mat4 model = glm::mat4(1.0f); glm::mat4 view = glm::mat4(1.0f); glm::mat4 projection = glm::mat4(1.0f); projection = glm::perspective(glm::radians(45.0f), (float) SCR_WIDTH / (float) SCR_HEIGHT, 0.1f, 100.0f); unsigned int modelLoc = glGetUniformLocation(ourShader.ID, "model"); unsigned int viewLoc = glGetUniformLocation(ourShader.ID, "view"); glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model)); glUniformMatrix4fv(viewLoc, 1, GL_FALSE, &view[0][0]); ourShader.setMat4("projection", projection); glBindVertexArray(VAO); glDrawArrays(GL_TRIANGLES, 0, 6); Finalmente para se ter uma ideia do que está a acontecer: imagem que não consigo pôr aqui Link to post Share on other sites
Solution thoga31 576 Posted February 7 Solution Report Share Posted February 7 (edited) Pelo estilo do código, estou a supor que estás a utilizar o Learn OpenGL para te guiares. Confirma-me se isto for verdade, pois ir-me-á facilitar a orientação a fim de eu não me afastar muito do teu source material. Mostra-me como estás a carregar a imagem a fim de gerar a textura. De qualquer das formas, com base no que mostraste, estás a gerar uma perspectiva 3D para a imagem. Dica: o OpenGL suporta várias perspectivas e diferentes shaders para fins específicos. Portanto, em vez de usar um glm::perspective para projecção, recomendaria fortemente usares o glm::ortho. É uma projecção muito mais prática e simples para 2D. Neste caso, a tua projecção seria: glm::ortho(-1.0f, 1.0f, height / width, height / width) // supondo que height < width Ao usar estes valores, estás a adaptar a projecção proporcionalmente com dimensão da tua janela, além de estares a usar um sistema de coordenadas que vai de -1.0 a 1.0 em ambos os eixos horizontal e vertical, o que pode ser prático uma vez que te abstrai das reais dimensões da janela. Cumprimentos. Edited February 7 by thoga31 1 Report Knowledge is free! Link to post Share on other sites
Fernando Couto 0 Posted February 7 Author Report Share Posted February 7 Muito obrigado mesmo pela tua resposta! Fiz essa mudança para glm::ortho, estive a manipular e já consegui tanto redimensionar a imagem para a tela cheia não se sobrepondo a nenhum objeto, assim como tirei a cor azulada . Link to post Share on other sites
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now