The parallax matching issue in GLSL, Opengl

Displaying My Parallax gives incorrect results. I do not know what might be wrong.

alt text

alt text

The "shadow" is in the wrong place.

The light points to the viewer and goes to the cube. Shader program (based on dhpoware.com):

[vert] varying vec3 lightDir; varying vec3 viewDir; attribute vec4 tangent; void main() { gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; gl_TexCoord[0] = gl_MultiTexCoord0; vec3 vertexPos = vec3(gl_ModelViewMatrix * gl_Vertex); vec3 n = normalize(gl_NormalMatrix * gl_Normal); vec3 t = normalize(gl_NormalMatrix * tangent.xyz); vec3 b = cross(n, t) * tangent.w; mat3 tbnMatrix = mat3(tx, bx, nx, ty, by, ny, tz, bz, nz); lightDir = (gl_LightSource[0].position.xyz - vertexPos) / 1000.0; lightDir = tbnMatrix * lightDir; viewDir = -vertexPos; viewDir = tbnMatrix * viewDir; } [frag] varying vec3 lightDir; varying vec3 viewDir; uniform sampler2D diffuseMap; uniform sampler2D normalMap; uniform sampler2D heightMap; uniform float scale; uniform float bias; void main() { vec3 v = normalize(viewDir); vec2 TexCoord = gl_TexCoord[0].st; { float height = texture2D(heightMap, gl_TexCoord[0].st).r; height = height * scale + bias; TexCoord = gl_TexCoord[0].st + (height * v.xy); } vec3 l = lightDir; float atten = max(0.0, 1.0 - dot(l, l)); l = normalize(l); vec3 n = normalize(texture2D(normalMap, TexCoord).rgb * 2.0 - 1.0); vec3 h = normalize(l + v); float nDotL = max(0.0, dot(n, l)); float nDotH = max(0.0, dot(n, h)); float power = (nDotL == 0.0) ? 0.0 : pow(nDotH, gl_FrontMaterial.shininess); vec4 ambient = gl_FrontLightProduct[0].ambient * atten; vec4 diffuse = gl_FrontLightProduct[0].diffuse * nDotL * atten; vec4 specular = gl_FrontLightProduct[0].specular * power * atten; vec4 color = gl_FrontLightModelProduct.sceneColor + ambient + diffuse + specular;color *= texture2D(diffuseMap,TexCoord); gl_FragColor = color ; } 

log from the contents of the cube (including tangents, the fourth component is manualness):

 ------------------------------------------------------------------------------------------------------------------ VecContainer<Vertex> vertices = size: 36 space: 36 { -4.000000, -4.000000, -4.000000, -4.000000, 4.000000, -4.000000, 4.000000, 4.000000, -4.000000, 4.000000, 4.000000, -4.000000, 4.000000, -4.000000, -4.000000, -4.000000, -4.000000, -4.000000, -4.000000, -4.000000, -4.000000, 4.000000, -4.000000, -4.000000, 4.000000, -4.000000, 4.000000, 4.000000, -4.000000, 4.000000, -4.000000, -4.000000, 4.000000, -4.000000, -4.000000, -4.000000, -4.000000, -4.000000, -4.000000, -4.000000, -4.000000, 4.000000, -4.000000, 4.000000, 4.000000, -4.000000, 4.000000, 4.000000, -4.000000, 4.000000, -4.000000, -4.000000, -4.000000, -4.000000, 4.000000, -4.000000, -4.000000, 4.000000, 4.000000, -4.000000, 4.000000, 4.000000, 4.000000, 4.000000, 4.000000, 4.000000, 4.000000, -4.000000, 4.000000, 4.000000, -4.000000, -4.000000, -4.000000, 4.000000, -4.000000, -4.000000, 4.000000, 4.000000, 4.000000, 4.000000, 4.000000, 4.000000, 4.000000, 4.000000, 4.000000, 4.000000, -4.000000, -4.000000, 4.000000, -4.000000, -4.000000, -4.000000, 4.000000, 4.000000, -4.000000, 4.000000, 4.000000, 4.000000, 4.000000, 4.000000, 4.000000, 4.000000, -4.000000, 4.000000, 4.000000, -4.000000, -4.000000, 4.000000, } ------------------------------------------------------------------------------------------------------------------ VecContainer<Vertex> texcoords = size: 36 space: 36 { 0.000000, 0.000000, 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000, 1.000000, 0.000000, 1.000000, 1.000000, 1.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.000000, } ------------------------------------------------------------------------------------------------------------------ VecContainer<Vertex> normals = size: 36 space: 36 { 0.000000, 0.000000, -1.000000, 0.000000, 0.000000, -1.000000, 0.000000, 0.000000, -1.000000, 0.000000, 0.000000, -1.000000, 0.000000, 0.000000, -1.000000, 0.000000, 0.000000, -1.000000, 0.000000, -1.000000, 0.000000, 0.000000, -1.000000, 0.000000, 0.000000, -1.000000, 0.000000, 0.000000, -1.000000, 0.000000, 0.000000, -1.000000, 0.000000, 0.000000, -1.000000, 0.000000, -1.000000, 0.000000, 0.000000, -1.000000, 0.000000, 0.000000, -1.000000, 0.000000, 0.000000, -1.000000, 0.000000, 0.000000, -1.000000, 0.000000, 0.000000, -1.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 1.000000, } ------------------------------------------------------------------------------------------------------------------ VecContainer<tangent>* tangents = size: 36 space: 36 { 1.000000, -0.000000, 0.000000, 1.000000, 1.000000, -0.000000, 0.000000, 1.000000, 1.000000, -0.000000, 0.000000, 1.000000, 1.000000, -0.000000, 0.000000, 1.000000, 1.000000, -0.000000, 0.000000, 1.000000, 1.000000, -0.000000, 0.000000, 1.000000, 1.000000, 0.000000, 0.000000, -1.000000, 1.000000, 0.000000, 0.000000, -1.000000, 1.000000, 0.000000, 0.000000, -1.000000, 1.000000, 0.000000, 0.000000, -1.000000, 1.000000, 0.000000, 0.000000, -1.000000, 1.000000, 0.000000, 0.000000, -1.000000, 0.000000, 0.000000, 1.000000, -1.000000, 0.000000, 0.000000, 1.000000, -1.000000, 0.000000, 0.000000, 1.000000, -1.000000, 0.000000, 0.000000, 1.000000, -1.000000, 0.000000, 0.000000, 1.000000, -1.000000, 0.000000, 0.000000, 1.000000, -1.000000, 0.000000, 0.000000, -1.000000, -1.000000, 0.000000, 0.000000, -1.000000, -1.000000, 0.000000, 0.000000, -1.000000, -1.000000, 0.000000, 0.000000, -1.000000, -1.000000, 0.000000, 0.000000, -1.000000, -1.000000, 0.000000, 0.000000, -1.000000, -1.000000, 1.000000, 0.000000, 0.000000, -1.000000, 1.000000, 0.000000, 0.000000, -1.000000, 1.000000, 0.000000, 0.000000, -1.000000, 1.000000, 0.000000, 0.000000, -1.000000, 1.000000, 0.000000, 0.000000, -1.000000, 1.000000, 0.000000, 0.000000, -1.000000, 1.000000, 0.000000, 0.000000, -1.000000, 1.000000, 0.000000, 0.000000, -1.000000, 1.000000, 0.000000, 0.000000, -1.000000, 1.000000, 0.000000, -0.000000, -1.000000, 1.000000, 0.000000, -0.000000, -1.000000, 1.000000, 0.000000, -0.000000, -1.000000 } ------------------------------------------------------------------------------------------------------------------ VecContainer<GLuint> indices = size: 12 space: 12 { 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 0, 1, 2 } 

What can cause this problem?

+3
source share
1 answer

As in the previous question, I think that you still have the same problem. Did you forget the minus somewhere, or perhaps cross-cross in the wrong order.

+3
source

Source: https://habr.com/ru/post/1336355/


All Articles