J'ai du mal à déboguer mon programme. J'essaie d'utiliser un tableau comme une table de recherche pour compenser l'emplacement du vertex dans mon vertex shader, mais je ne peux même pas dire si je relie correctement mon tableau. Le facteur de décalage finit toujours par zéro (aplatir mes vecteurs, plutôt que de leur donner une forme), donc soit j'accède mal aux coordonnées texture1D, soit le tableau ne lie pas directement à la texture. Franchement, je ne sais pas quelles coordonnées je devrais utiliser pour obtenir les valeurs d'une texture 1D ... mais j'ai essayé toutes les combinaisons.GLSL Vertex Shader table de correspondance question
Ici je configurer le tableau et le lier au 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);
Et mon 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;
}
La réponse rapide est: Ce n'est pas comment vous chargez une texture. Lier sélectionne une texture par identifiant sur lequel vous voulez opérer. Vous allouez des identifiants avec glGenTextures, les liez, les chargez (par exemple avec glTexImage1D) et * puis * les utilisez. –
ah, je pensais que les tables de recherche étaient une sorte de hack avec les textures, c'est pourquoi je ne faisais pas ça. Merci. – jakev
Ok, donc ça a changé ... Je ne m'en approche plus. – jakev