J'ai essayé de faire des recherches en ligne mais je ne pouvais pas comprendre comment ajouter une texture pour mon modèle. (Il peut être réglé depuis le début) J'ai des problèmes avec cela et je voudrais de l'aide dans les changements que je devrais faire avec mon code.Mappage de texture multiple avec openGL
Ma fonction de réglage de texture:
void Texture::setTexture(unsigned char* data, unsigned int width, unsigned int height) {
glGenTextures(1, &m_texture[unit]); // Genatate 1 texture in m_texture
glBindTexture(GL_TEXTURE_2D, m_texture[unit]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
Ma fonction bind:
void Texture::Bind(unsigned int unit) {
glActiveTexture(GL_TEXTURE0 + unit);
glBindTexture(GL_TEXTURE_2D, m_texture[unit]);
Et mes vertex shaders ressemble à ceci:
attribute vec3 position; // Position values
attribute vec2 texCoord; // Texture coordinates values
attribute vec3 normal; // Normal
varying vec2 texCoord0;
varying vec3 normal0;
uniform mat4 transform;
void main()
{
gl_Position = transform * vec4(position, 1.0);
texCoord0 = texCoord;
normal0= (transform * vec4(normal, 0.0)).xyz;
}
fragment shader:
varying vec2 texCoord0;
varying vec3 normal0;
uniform sampler2D diffuse;
void main()
{
gl_FragColor = texture2D(diffuse, texCoord0) *
clamp(dot(-vec3(0,0,1), normal0), 1.0, 1.0);
}
Shader cteur:
Shader::Shader(const string& fileName)
{
m_program = glCreateProgram();
m_shaders[0] = CreateShader(LoadShader(fileName + ".vs"), GL_VERTEX_SHADER);
m_shaders[1] = CreateShader(LoadShader(fileName + ".fs"), GL_FRAGMENT_SHADER);
for (unsigned int i = 0; i < NUM_SHADERS; i++)
glAttachShader(m_program, m_shaders[i]);
glBindAttribLocation(m_program, 0, "position");
glBindAttribLocation(m_program, 1, "texCoord");
glBindAttribLocation(m_program, 2, "normal");
glLinkProgram(m_program);
glValidateProgram(m_program);
m_uniforms[TRANSFORM_U] = glGetUniformLocation(m_program, "transform");
}
Je veux choisir choisir des sommets d'utiliser la première texture et une l'autre. Par exemple, un cube dont chaque carré a une texture différente.
Comment puis-je ajouter une autre texture? Et quels changements dois-je faire dans ma classe Mesh?
Désolé pour la question stupide, je suis nouveau dans openGL :) Merci d'avance!
En résumé, vous devez utiliser plus d'une unité de texture avec chaque unité puis la mapper à un sampler2D dans votre fragment shader. Quelques excellentes informations peuvent être trouvées [ici] (http://learnopengl.com/#!Getting-started/Textures). –