0

我遇到了适用于 iPhone 的 OpenGL ES 2.0 的问题。我正在尝试使用以下代码绘制一个简单的圆形纹理:

double qualite = 40.0f;
double rayon = 0.5;
double TWOPI=2*M_PI;
double step = TWOPI/qualite;

// CENTRE DU CERCLE
// X Y Z NMR1
gCircleVertexData[0]=0.0f;
gCircleVertexData[1]=0.0f;
gCircleVertexData[2]=0.0f;

// NORMALES X Y Z
gCircleVertexData[3]=0.0f;
gCircleVertexData[4]=0.0f;
gCircleVertexData[5]=1.0f;

// TEXTURES
gCircleVertexData[6]=0.5f;
gCircleVertexData[7]=0.5f;
int j=8;
int k=0;
for(GLfloat i = 0.0f; i <= TWOPI; i+=step)
{
    // X Y Z NMR2
    gCircleVertexData[j]=rayon*sinf(i);
    gCircleVertexData[j+1]=rayon*cosf(i);
    gCircleVertexData[j+2]=0.0f;

    // NORMALES X Y Z
    gCircleVertexData[j+3]=0.0f;
    gCircleVertexData[j+4]=0.0f;
    gCircleVertexData[j+5]=1.0f;

    // TEXTURES
    gCircleVertexData[j+6]=0.5+0.5*cosf(i);
    gCircleVertexData[j+7]=0.5+0.5*sinf(i);
    j=j+8;
    k++;
}

质量为 30.0 时一切正常,但如果我往上走,圆圈的一部分就不会出现。这就是我绑定对象的方式:

 glGenVertexArraysOES(1, &_vertexArrayCercle);
glBindVertexArrayOES(_vertexArrayCercle);

glGenBuffers(1, &_vertexBuffer4);
glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer4);
glBufferData(GL_ARRAY_BUFFER, sizeof( gCircleVertexData),  gCircleVertexData, GL_STATIC_DRAW);

// LES SOMMETS
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, 32, BUFFER_OFFSET(0));
glEnableVertexAttribArray(GLKVertexAttribPosition);

// LES PERPENDICULAIRES POUR LA LUMIERE
glVertexAttribPointer(GLKVertexAttribNormal, 3, GL_FLOAT, GL_FALSE, 32, BUFFER_OFFSET(12));
glEnableVertexAttribArray(GLKVertexAttribNormal);

// LA COULEUR DE BASE
// glEnableVertexAttribArray(GLKVertexAttribColor);

// LA TEXTURE
glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, 32, BUFFER_OFFSET(24));
glEnableVertexAttribArray(GLKVertexAttribTexCoord0);

glBindBuffer(GL_ARRAY_BUFFER,0);
glBindVertexArrayOES(0);

这就是我将如何绘制它:

  //----------------------------------- Le DISQUE MOBILE -------------------------------//
// Activation de la texture
glEnable(GL_TEXTURE0);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, _disqueMobileTexture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

// Activation du shader
glUseProgram(_program2);

// Verrouillage du VAO pour l'utiliser
glBindVertexArrayOES(_vertexArrayCercle);

//ON CALCUL LES MATRICES
baseModelViewMatrix = GLKMatrix4Rotate(baseModelViewMatrix, 0, 1.0f, 1.0f, 1.0f);
modelViewMatrix = GLKMatrix4MakeTranslation(0.0f, 0.0f, -0.001f);
modelViewMatrix = GLKMatrix4Rotate(modelViewMatrix,_rotation/8, 0, 0, 1.0f);
modelViewMatrix = GLKMatrix4Multiply(baseModelViewMatrix, modelViewMatrix);

_normalMatrix = GLKMatrix3InvertAndTranspose(GLKMatrix4GetMatrix3(modelViewMatrix), NULL);
_modelViewProjectionMatrix = GLKMatrix4Multiply(projectionMatrix, modelViewMatrix);
_rotation += self.timeSinceLastUpdate * 0.5f;

// ON ENVOI LES MATRICE DANS LE SHADER
glUniformMatrix4fv(uniforms[UNIFORM_MODELVIEWPROJECTION_MATRIX], 1, 0, _modelViewProjectionMatrix.m);
glUniformMatrix3fv(uniforms[UNIFORM_NORMAL_MATRIX], 1, 0, _normalMatrix.m);
glUniform1i(uniforms[UNIFORM_TEXTURE], 0);

// DESSIN DU CUBE AVEC LE SHADER
glDrawArrays(GL_TRIANGLE_FAN, 0, 36);

// Désactivation du VAO
glBindVertexArrayOES(0);

// Désactivation du shader
glUseProgram(0);
glDisable(GL_TEXTURE0);
glDisable(GL_TEXTURE_2D);

我的圈子真的很丑,30的质量!我还使用了一个简单的着色器。

4

1 回答 1

0

我找到了!这是一个非常粗心的错误......我只是忘记增加 glDrawArrays 中的值以匹配我想要绘制的对象的数量......

错误经常发生在键盘和椅子之间!

于 2013-05-04T13:08:01.197 回答