J'ai essayé d'implémenter une carte de hauteur pour mon shader de terrain, mais le terrain reste plat. La texture est correctement chargé dans le vertex shader, et je tente d'utiliser les valeurs demi-teinte de la texture basée sur les Ubs de mailles pour ajuster la hauteur du sommet:OpenGL: Déformation du terrain en utilisant un heightmap dans le vertex shader
//DIFFUSE VERTEX SHADER
#version 330
uniform mat4 projectionMatrix;
uniform mat4 viewMatrix;
uniform mat4 modelMatrix;
in vec3 vertex;
in vec3 normal;
in vec2 uv;
uniform sampler2D heightmap;
out vec2 texCoord;
void main(void){
vec3 _vertex = vertex;
_vertex.y = texture(heightmap, uv).r * 2.f;
gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(_vertex, 1.f);
texCoord = uv;
}
Fragment: (le splatmap fonctionne ignorer de sorte que)
uniform sampler2D splatmap;
uniform sampler2D diffuse1;
uniform sampler2D diffuse2;
uniform sampler2D diffuse3;
uniform sampler2D diffuse4;
in vec2 texCoord;
out vec4 fragment_color;
void main(void) {
///Loading the splatmap and the diffuse textures
vec4 splatTexture = texture2D(splatmap, texCoord);
vec4 diffuseTexture1 = texture2D(diffuse1, texCoord);
vec4 diffuseTexture2 = texture2D(diffuse2, texCoord);
vec4 diffuseTexture3 = texture2D(diffuse3, texCoord);
vec4 diffuseTexture4 = texture2D(diffuse4, texCoord);
//Interpolate between the different textures using the splatmap's rgb values (works)
diffuseTexture1 *= splatTexture.r;
diffuseTexture2 = mix (diffuseTexture1, diffuseTexture2, splatTexture.g);
diffuseTexture3 = mix (diffuseTexture2,diffuseTexture3, splatTexture.b);
vec4 outcolor = mix (diffuseTexture3, diffuseTexture4, splatTexture.a);
fragment_color = outcolor;
}
Quelques infos supplémentaires: Toutes les textures sont chargées comme ça dans mon matériel de terrain et passé au shader (fonctionne correctement):
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, heightMap->getId());
glUniform1i (_shader->getUniformLocation("heightMap"),0);
...
Les Ubs de maillage plan sont mis en correspondance comme ceci:
(0,1) (1,1)
(0,0) (1,0)
Je suppose que je suis en train de faire quelque chose de terriblement mal , mais je ne peux pas comprendre quoi. Toute aide est appréciée!
Quel est le but de '_textex'? Vous définissez '_vertex.y' mais après cela vous ne l'utiliserez plus jamais. –
Je suis désolé, il est supposé dire _vertex au lieu de vertex à GL_position. J'ai oublié d'éditer – Possimpible
Vous devriez essayer de trouver une fonction de génération de hauteur aléatoire et essayez-la à la place de la texture. De cette façon, vous pouvez voir si c'est la texture ou le 'gl_Position' qui cause le problème. –