Ich habe versucht, eine Heightmap zu meinem Terrain Shader zu implementieren, aber das Terrain bleibt flach. Die Textur wird in dem Vertex-Shader richtig geladen, und ich versuche, die Grauwert der Textur auf der UVS der Masche auf Basis zu verwenden, um die Scheitelhöhe einzustellen:OpenGL: Gelände Deformation mit einer Heightmap im 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: (die splatmap Werke, die so ignorieren)
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;
}
Einige zusätzliche Informationen: Alle Texturen wie dies in meinem Terrain Material und an den Shader geladen werden (funktioniert):
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, heightMap->getId());
glUniform1i (_shader->getUniformLocation("heightMap"),0);
...
Die Ebene Mesh uvs werden wie folgt abgebildet:
(0,1) (1,1)
(0,0) (1,0)
Ich glaube, ich etwas schrecklich falsch tue , aber ich kann nicht herausfinden, was. Jede Hilfe wird geschätzt!
Was ist der Zweck von '_vertex'? Sie setzen '_vertex.y', aber danach verwenden Sie es nie wieder. –
Es tut mir leid, es soll _vertex statt Vertex bei GL_position sagen. Ich habe vergessen zu bearbeiten – Possimpible
Sie sollten versuchen, eine zufällige Höhe Generation Funktion und versuchen, dass anstelle der Textur Karte. Auf diese Weise können Sie sehen, ob es die Texturkarte oder die 'gl_Position' ist, die das Problem verursacht. –