2012-04-05 13 views
1

私はすでに2日間失ってしまいました。GLSL - 頂点属性のデータが間違っています

私は、アンドロイド用にopengles2.0を使用してコラージュアニメーションレンダラーを作成しました。シェーダをスキニングに使用します。コードはほぼ完成していて、私のHTC DesireSでは正常に動作します。

しかし、PowerVRチップセットを搭載したSetTopBoxで実行しようとすると、私のジオメトリは表示されません。デバッグの一日の後、私はシェーダの骨マトリクスの確証として= -1を得ているので、それが起こっていることを知りました。

私は電話機で== -1と確認しました。 SetTopBoxでは!= -1となります。

何が間違っている可能性がありますか? この大きなトラブルから私を救ってください。

申し訳ありませんがコードを入力してください。 ここに頂点シェーダがあります。私はvec2(boneIndices)が[1]と同様に[0]に-1を持つことを期待しています。 Powervrではそうではありません。私はexpectin午前属性ポインタ

glVertexAttribPointer(position, 3, GL_FLOAT, GL_FALSE, 13*sizeof(GLfloat), 0); 
glVertexAttribPointer(texCoord, 2, GL_FLOAT, GL_FALSE, 13*sizeof(GLfloat), (GLvoid*)(3*sizeof(GLfloat))); 
glVertexAttribPointer(boneIndices, 2, GL_FLOAT, GL_FALSE, 13*sizeof(GLfloat), (GLvoid*)(9*sizeof(GLfloat))); 
glVertexAttribPointer(boneWeights, 2, GL_FLOAT, GL_FALSE, 13*sizeof(GLfloat), (GLvoid*)(11*sizeof(GLfloat))); 
glEnableVertexAttribArray(position); 
glEnableVertexAttribArray(texCoord); 
glEnableVertexAttribArray(boneIndices); 
glEnableVertexAttribArray(boneWeights); 

私の頂点とインデックスバッファ

GLfloat vertices[13*6] = 
{-0.5*size, -0.5*size, 0, 0,1, 1,1,1,1, -1,-1, 0,0,         
-0.5*size, 0.5*size, 0, 0,0, 1,1,1,1, -1,-1, 0,0, 
    0.5*size, 0.5*size, 0, 1,0, 1,1,1,1, -1,-1, 0,0, 

-0.5*size, -0.5*size, 0, 0,1, 1,1,1,1, -1,-1, 0,0, 
    0.5*size, 0.5*size, 0, 1,0, 1,1,1,1, -1,-1, 0,0, 
0.5*size, -0.5*size, 0, 1,1, 1,1,1,1, -1,-1, 0,0 }; 

GLushort indices[]= {0,1,2, 3,4,5}; 

を設定

attribute vec4 vPosition; 
attribute vec2 vTexCoord; 
attribute vec2 boneIndices; 
attribute vec2 boneWeights; 

uniform mat4 boneMatrices[BNCNT]; 

uniform mat4 modelMatrix; 
uniform mat4 viewMatrix; 
uniform mat4 projectionMatrix; 

varying mediump vec2 fTexCoord; 
varying mediump vec3 col; 

void main(){ 
    vec4 tempPosition = vPosition; 
    int index = int(boneIndices.x); 
    col = vec3(1.0, 0.0, 0.0); 
    if(index >= 0){ 
     col.y = 1.0; 
     tempPosition = (boneMatrices[index] * vPosition) * boneWeights.x; 
    } 
    index = int(boneIndices.y); 
    if(index >= 0){ 
     col.z = 1.0; 
     tempPosition = (boneMatrices[index] * vPosition) * boneWeights.y + tempPosition; 
    } 
    gl_Position = projectionMatrix * viewMatrix * modelMatrix * tempPosition; 

    fTexCoord = vTexCoord; 
} 

gシェイダー内のインデックスは-1になります。しかし彼らはそうではありません。

+0

-1を取得していますか?属性インデックス?いくつかのコードを表示できますか? –

+0

コードを記述しないと申し訳ありません。 – CuriousChettai

+0

だから、あなたは私たちにいくつかのコードを見せますか? –

答えて

0

フラストレーションの日の後、私はついに自分で問題を見つけた

"int()"関数呼び出しで、-1を指定しても0が返されました。 観察された行動は、それは私がこれはドライバ/ HWバグであればわからないため-3など...

のために-2
-2に-1
-1
0を返すということですまたは浮動小数点表現のために-1が「-.9999999」のようなものとして表現されている場合

誰かがこれについてもう少し詳しく知ることができますか?

+0

私はこの問題も経験しています。 –

関連する問題