2016-09-27 2 views
0

Je me bats depuis des jours et je n'arrive toujours pas à comprendre ce que je fais de mal. J'ai un attribut vertex composé d'un seul float et je veux comparer sa valeur avec other dans une instruction if mais je reçois toujours l'instruction true même si ce n'est pas le cas; Voici mon vertex shader était le problème se produit:Problèmes d'utilisation de la valeur de l'attribut vertex dans opengl es 2.0

attribute vec4 a_Position; 
attribute vec3 a_Normal; 
attribute vec2 a_TextureCoord; 
attribute highp float a_Bone; 
uniform mat4 bone_1; 
uniform mat4 bone_0; 
varying vec2 v_TextureCoord; 
void main() { 
    v_TextureCoord = a_TextureCoord; 
    vec4 posy; 
    float a = a_Bone; 
    if(20.0<a) 
    posy = bone_0*a_Position; 
    else 
    posy = bone_1*a_Position; 
    gl_Position = posy; 
    } 

si je remplace ce qui est en instruction if avec « true » ou « false » toutes les choses fonctionnent comme prévu ... mais si je suis en train de utiliser cette valeur d'attribut pour comparer l'instruction if agit comme si l'instruction est toujours vraie même si la valeur a_Bone est 1.0 ou 2.0 (nettement plus petit 20.0)

+0

Souhaitez-vous fournir plus d'informations sur la façon dont vous transmettez la variable uniforme et les codes d'attribut vertex? – Tokenyet

+0

oui ... tous les attributs de vertex sont stockés dans un vbo .. – Madalin

+0

GLES20.glEnableVertexAttribArray (a_bone); GLES20.glVertexAttribPointer (a_bone, 1, GLES20.GL_FLOAT, false, pas, (position_count + normal_count + texCoord_count) * bytes_per_float); de cette façon je fais le transfert de données – Madalin

Répondre

0

Nous avons utilisé Attributes dans les états if et le code fonctionne bien sur la plupart des appareils OpenGL ES 2.0. Donc, ce n'est pas un problème dans l'utilisation des attributs. Voici un code de travail de comment nous avons fait.

int jointId = int(optionalData1.x); 
if(jointId > 0) 
    finalMatrix = jointTransforms[jointId - 1] * optionalData2.x; 

Ce code fonctionne correctement sur tous les appareils iOS et Android. optionalData1 est l'attribut et nous utilisons même cette valeur pour obtenir une matrice à partir d'un tableau uniforme pour la matrice de transformation osseuse.

+0

Merci pour la réponse, mais j'ai essayé que sans succès ... J'ai également testé sur plusieurs appareils (Samsung, Htc) et plusieurs versions Android 4.4, 5.1, 6.0 ... sans succès – Madalin