从float转换为int(奇怪的行为)

时间:2014-05-23 07:47:59

标签: android glsl opengl-es-2.0

我有这个着色器来实现角色动画

uniform mat4 u_mVxP;
uniform mat4 u_mBlendMatrices[54];
uniform vec4 u_vDLDiffuseColor;
uniform vec4 u_vDLAmbientColor;
uniform vec3 u_vLightDir;
attribute vec4 a_Position;
attribute vec3 a_BWeights;
attribute vec3 a_BIndices;
attribute vec3 a_Normal;
attribute vec2 a_TextureCoordinates;
varying vec2 v_TextureCoordinates;
varying vec4 v_Color;
void main()                    
{
    vec4 vPos;
    vec3 vNormal;
    int i=int(a_BIndices.x);
    int j=int(a_BIndices.y);
    int k=int(a_BIndices.z);
    vPos=a_BWeights.x * a_Position * u_mBlendMatrices[i];
    vPos+=a_BWeights.y * a_Position * u_mBlendMatrices[j];
    vPos+=a_BWeights.z * a_Position * u_mBlendMatrices[k];
    vNormal=a_BWeights.x * vec3(vec4(a_Normal,0.0) * u_mBlendMatrices[i]);
    vNormal+=a_BWeights.y * vec3(vec4(a_Normal,0.0) * u_mBlendMatrices[j]);
    vNormal+=a_BWeights.z * vec3(vec4(a_Normal,0.0) * u_mBlendMatrices[k]);
    vNormal = normalize(vNormal);
    v_Color = u_vDLDiffuseColor * max(dot(-u_vLightDir,vNormal),0.0) + u_vDLAmbientColor;
    gl_Position = vPos * u_mVxP;
    v_TextureCoordinates = a_TextureCoordinates;
}

代码在galaxy s3和s4上运行完美,我的角色正确地运行了它们。 但是在sony xperia Z和galaxy note3中,它们仅在没有动画的绑定pos中呈现! 经过大量测试后我发现当float在xperia z和galaxy note3中转换为int时它只返回0

int i=int(a_BIndices.x); // i is always 0
int j=int(a_BIndices.y); // j is always 0
int k=int(a_BIndices.z); // k is always 0

我甚至使用了这段代码

int i=1;

但我仍然是0.任何人都可以帮助我发生什么事情

1 个答案:

答案 0 :(得分:0)

我终于发现我应该使用vec4数组而不是矩阵数组! 它奇怪但解决了我的情况