繁体   English   中英

在Android中使用opengl-es画一个圆会产生一个正方形

[英]Drawing a circle in android with opengl-es results in a square

我正在尝试使用以下代码在opengl-es中绘制一个圆。 它围绕一个圆创建多个点。 如果我在顶点数组中打印出这些值,则可以看出它们在圆周围形成点。

// Create verticies for a circle

points=40;
vertices = new float[(points+1)*3];

//CENTER OF CIRCLE
vertices[0]=0.0f;
vertices[1]=0.0f;
vertices[2]=0.0f;

for (int i = 3; i<(points+1)*3; i+=3){
    double rad = deg2rad(i*360/points);
    vertices[i] = (float) (Math.cos(rad));
    vertices[i+1] = (float) (Math.sin(rad));
    vertices[i+2] = 0;
}

// vertexBuffer is filled with verticies

以及在我的绘图功能中对opengl的调用:

// IN MY DRAWING FUNCTION:
gl.glPushMatrix();
gl.glTranslatef(x, y, 0);
gl.glScalef(size, size, 1.0f);
gl.glColor4f(1.0f,1.0f,1.0f, 1.0f); 
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, points/2);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glPopMatrix();

但是,我永远不会在屏幕上画出一个圆圈,只有正方形。 我很困惑,任何帮助表示赞赏:)

看起来不对的一件事是rad的计算。 尝试将其修改为:

double rad = deg2rad(i*360/(points*3));

您需要将其除以points*3因为i计数器在每次迭代中都会增加3。 您应该在每次迭代中打印出rad的值,并验证您获得的值在0到2之间递增* PI

编辑:您可能还需要更改圆的方向 (我不确定在我的头顶)。 但是,如果以上内容无法渲染任何内容,请尝试将其反转:

double rad = deg2rad(360.0 - i*360/(points*3));

同样,看起来您只渲染了glDrawArrays调用中的一半点。


//...vertex and index buffers...

int VERTICES=180; // more than needed  // changed variable name 
float coords[] = new float[VERTICES * 3];
float theta = 0;

for (int i = 0; i < VERTICES * 3; i += 3) {
  coords[i + 0] = (float) Math.cos(theta);
  coords[i + 1] = (float) Math.sin(theta);
  coords[i + 2] = 0;
  vertexBuffer.put(coords[i + 0]);
  vertexBuffer.put(coords[i + 1]);
  vertexBuffer.put(coords[i + 2]);
  theta += Math.PI / 90;
}

// ....set buffer positions to zero...

protected void draw(GL10 gl) {
  gl.glColor4f(0, 0, 1, 0.5f);
  gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
  gl.glDrawElements(GL10.GL_TRIANGLE_FAN, VERTICES,
    GL10.GL_UNSIGNED_SHORT, indexBuffer);
    }
}

轻松活泼的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM