It's hard for me to debug my program. I'm trying to use an array as a lookup table to compensate for the location of a vertex in my vertex shader, but I can't even tell if I am binding my array correctly. The offset coefficient always ends at zero (aligning my vectors, not giving them a shape), so either I refer to the coordinates of the 1D texture, or the array is not attached to the texture.
Honestly, I donβt know which coordinates I should use to get the values ββfrom the 1D structure ... but I tried all the combinations.
Here I tweak the array and bind it to the shader:
//FISH GLfloat fish_coords[100]; for (int i = 0; i < 50; i++){fish_coords[i] = 0;} for (int i = 50; i < 100; i++){fish_coords[i] = 1;} glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glGenTextures(1, &fishtexture); glBindTexture(GL_TEXTURE_1D, fishtexture); glTexImage1D(GL_TEXTURE_1D, 0, 1, 128,0,GL_RGBA, GL_UNSIGNED_BYTE, &fish_coords); switch(shadow_selection){ case 0: vertexShader = "fish.vert"; fragmentShader = "fish.frag"; setShaders(); GLint loc1; loc1 = glGetUniformLocation(shaderProgram,"fish_coords"); glUniform1i(loc1,0);
And my vertex shader:
uniform float spec_factor; uniform sampler1D fish_coords; varying vec3 lightDir,normal; void main() { vec4 v_pos; vec3 ldir; gl_TexCoord[0] = gl_MultiTexCoord0; v_pos = gl_ModelViewMatrix * gl_Vertex; ldir = vec3(gl_LightSource[0].position-v_pos); lightDir = normalize(ldir); normal = normalize(gl_NormalMatrix * gl_Normal); vec4 offset; offset = texture1D(fish_coords, gl_TexCoord[0].r); vec4 fish_shape; fish_shape.xz = gl_Vertex.xz; fish_shape.y = gl_Vertex.y * offset.x; fish_shape.w = 1; gl_Position = gl_ModelViewProjectionMatrix * fish_shape; }
source share