在opengl es 2.0中使用顶点属性值的问题

时间:2016-09-27 13:07:59

标签: opengl-es-2.0 vertex-shader

我挣扎了几天,我仍然无法弄清楚我做错了什么。 我有一个由单个浮点数组成的顶点属性,我想在if语句中将它的值与其他值进行比较但是我总是得到语句为真,即使它不是; 这是我的顶点着色器出现问题:

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; 
  } 

如果我用“true”或“false”替换if语句中的内容,所有的东西都按预期工作......但是如果我试图使用该属性值来比较if语句,则该语句总是如此即使a_Bone值为1.0或2.0(明显小于20.0)

,也为true

1 个答案:

答案 0 :(得分:0)

我们一直在if statemens中使用Attributes,并且代码在大多数OpenGL ES 2.0设备上运行良好。所以使用属性不是问题。这是我们如何完成的工作代码。

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

此代码适用于所有iOS和Android设备。 optionalData1是属性,我们甚至使用此值从骨骼变换矩阵的均匀数组中获取矩阵。