1
Graphique / OpenGL3 - problème de texturage
« le: Mai 08, 2016, 03:05:05 pm »
Bonjour à tous,
Mon tout premier post sur SFML
Je suis un tutoriel pour apprendre à manipuler Opengl3 et j'essaie d'aficher une texture sur un triangle.
Malheuresement, je me retrouve avec un triangle blanc sans aucune raison
Je précise qu'aucune erreur ne s'affiche dans la console
Merci d'avance pour votre aide
Mon tout premier post sur SFML
Je suis un tutoriel pour apprendre à manipuler Opengl3 et j'essaie d'aficher une texture sur un triangle.
Malheuresement, je me retrouve avec un triangle blanc sans aucune raison
Je précise qu'aucune erreur ne s'affiche dans la console
Merci d'avance pour votre aide
#include <iostream>
#include <SFML/Graphics.hpp>
#include <GL/glew.h>
#include <glm/glm.hpp>
#include <glm/gtx/transform.hpp>
#include <glm/gtc/type_ptr.hpp>
int main()
{
sf::ContextSettings contextSettings;
contextSettings.majorVersion = 3; // Version OpenGL 3.3
contextSettings.minorVersion = 3;
sf::Window window(sf::VideoMode(800, 600), "OpenGL 3", sf::Style::Default, contextSettings);
if(glewInit() != GLEW_OK){ // Message d'erreur si glew n'a pas été chargé
std::cout << "Erreur initialisation GLEW";
return EXIT_FAILURE;
}
glEnable(GL_TEXTURE_2D); // On active l'utilisation de texture. Si c'est pas déjà activé??
// Définition des matrices
glm::mat4 projection = (glm::mat4)glm::perspective(70.0, (double)800/600, 0.01, 100.0);
glm::mat4 modelview = glm::lookAt(/*position de la camera*/glm::vec3(1),
/*point cible*/glm::vec3(0), /*repere vertical: Z*/glm::vec3(0,0,1));
// Chargement du shader
sf::Shader shader;
if(!shader.loadFromFile("Shaders/texture.vert", "Shaders/texture.frag"))
return EXIT_FAILURE;
sf::Shader::bind(&shader); // On le selectionne
// Chargement de la texture
sf::Texture texture;
if(!texture.loadFromFile("resources/texture.jpg"))
return EXIT_FAILURE;
sf::Texture::bind(&texture); // On la selectionne
// Définition des vertices du triangle et des sommets de la texture
float vertices[] = {-0.5,-0.5,0.0, 0.0,0.5,0.0, 0.5,-0.5,0.0};
float coordTexture[] = {0,0, 1,0, 1,1}; // erreur par ici??
while(window.isOpen())
{
// Gestion evenements
sf::Event event;
while(window.pollEvent(event)){
if(event.type == sf::Event::Closed
||(event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape))
window.close(); // On quitte
}
// Nettoyage de l'écran
glClear(GL_COLOR_BUFFER_BIT);
// On remplie puis on active le tableau Vertex Attrib 0
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, vertices);
glEnableVertexAttribArray(0);
// Même chose avec le tableau Vertex Attrib 1
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, coordTexture);
glEnableVertexAttribArray(1);
// On envoie les matrices au shader
glUniformMatrix4fv(glGetUniformLocation(shader.getNativeHandle(), "modelview"), 1, GL_FALSE, glm::value_ptr(modelview));
glUniformMatrix4fv(glGetUniformLocation(shader.getNativeHandle(), "projection"), 1, GL_FALSE, glm::value_ptr(projection));
// On affiche le triangle
glDrawArrays(GL_TRIANGLES, 0, 3);
// On désactive les tableaux Vertex Attrib
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
// Actualisation de la fenêtre
window.display();
}
return EXIT_SUCCESS;
}
#include <SFML/Graphics.hpp>
#include <GL/glew.h>
#include <glm/glm.hpp>
#include <glm/gtx/transform.hpp>
#include <glm/gtc/type_ptr.hpp>
int main()
{
sf::ContextSettings contextSettings;
contextSettings.majorVersion = 3; // Version OpenGL 3.3
contextSettings.minorVersion = 3;
sf::Window window(sf::VideoMode(800, 600), "OpenGL 3", sf::Style::Default, contextSettings);
if(glewInit() != GLEW_OK){ // Message d'erreur si glew n'a pas été chargé
std::cout << "Erreur initialisation GLEW";
return EXIT_FAILURE;
}
glEnable(GL_TEXTURE_2D); // On active l'utilisation de texture. Si c'est pas déjà activé??
// Définition des matrices
glm::mat4 projection = (glm::mat4)glm::perspective(70.0, (double)800/600, 0.01, 100.0);
glm::mat4 modelview = glm::lookAt(/*position de la camera*/glm::vec3(1),
/*point cible*/glm::vec3(0), /*repere vertical: Z*/glm::vec3(0,0,1));
// Chargement du shader
sf::Shader shader;
if(!shader.loadFromFile("Shaders/texture.vert", "Shaders/texture.frag"))
return EXIT_FAILURE;
sf::Shader::bind(&shader); // On le selectionne
// Chargement de la texture
sf::Texture texture;
if(!texture.loadFromFile("resources/texture.jpg"))
return EXIT_FAILURE;
sf::Texture::bind(&texture); // On la selectionne
// Définition des vertices du triangle et des sommets de la texture
float vertices[] = {-0.5,-0.5,0.0, 0.0,0.5,0.0, 0.5,-0.5,0.0};
float coordTexture[] = {0,0, 1,0, 1,1}; // erreur par ici??
while(window.isOpen())
{
// Gestion evenements
sf::Event event;
while(window.pollEvent(event)){
if(event.type == sf::Event::Closed
||(event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape))
window.close(); // On quitte
}
// Nettoyage de l'écran
glClear(GL_COLOR_BUFFER_BIT);
// On remplie puis on active le tableau Vertex Attrib 0
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, vertices);
glEnableVertexAttribArray(0);
// Même chose avec le tableau Vertex Attrib 1
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, coordTexture);
glEnableVertexAttribArray(1);
// On envoie les matrices au shader
glUniformMatrix4fv(glGetUniformLocation(shader.getNativeHandle(), "modelview"), 1, GL_FALSE, glm::value_ptr(modelview));
glUniformMatrix4fv(glGetUniformLocation(shader.getNativeHandle(), "projection"), 1, GL_FALSE, glm::value_ptr(projection));
// On affiche le triangle
glDrawArrays(GL_TRIANGLES, 0, 3);
// On désactive les tableaux Vertex Attrib
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
// Actualisation de la fenêtre
window.display();
}
return EXIT_SUCCESS;
}