Ich habe bereits 2 Tage verloren, um herauszufinden, in diesem Problem, aber ohne Nutzen.GLSL - Falsche Daten in Vertex-Attribut
Ich habe einen Collada Animation Renderer mit OpenGLES2.0 für Android geschrieben; Verwenden von Shader zum Enthäuten. Der Code ist fast vollständig und es läuft gut auf meinem HTC DesireS.
Aber, wenn ich versuche, das gleiche auf einer trindernt SetTopBox mit PowerVR-Chipsatz zu laufen, wird meine Geometrie nicht angezeigt. Nach einem Tag des Debugging habe ich herausgefunden, dass es passiert, weil ich! = -1 als Knochenmatrix im Shader bekomme.
Ich verifiziert, dass es == -1 in meinem Telefon ist; aber ist! = -1 in der SetTopBox.
Was könnte möglicherweise falsch sein? Bitte rette mich vor diesem großen Problem.
Entschuldigung, dass Sie den Code nicht installiert haben. Hier ist der Vertex-Shader. Ich erwarte, dass vec2 (boneIndices) -1 in [0] sowie [1] hat; ist aber nicht so auf Powervr.
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;
}
die Attributzeiger
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);
meine Vertex- und Indexpuffer
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};
Einrichtung Ich bin expectin g Die Indizes müssen -1 im Shader sein; aber sie sind nicht.
Was wird -1? Ein Attributindex? Könnten Sie uns etwas Code zeigen? –
Es tut uns leid, dass Sie den Code nicht aufgesetzt haben. – CuriousChettai
Also ... werden Sie uns Code zeigen? –