如何在Android上的OpenGL es中绘制圆柱体?

如何在Android上的OpenGL es中绘制圆柱体?,android,opengl-es,draw,Android,Opengl Es,Draw,有人能帮我在OpenGL es android中画一个圆柱体吗。无论我画什么,它看起来都像一个长方形 我将感谢任何提示或链接 以下是我尝试过的代码: int VERTICES=180; // more than needed float coords[] = new float[VERTICES * 3]; float theta = 0; for (int i = 0; i < VERTICES * 3; i += 3) { co

有人能帮我在OpenGL es android中画一个圆柱体吗。无论我画什么,它看起来都像一个长方形

我将感谢任何提示或链接

以下是我尝试过的代码:

  int VERTICES=180; // more than needed
      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;
      }
int顶点=180;//超出需要
浮点坐标[]=新浮点[顶点*3];
浮点θ=0;
对于(int i=0;i<顶点*3;i+=3){
coords[i+0]=(float)Math.cos(theta);
coords[i+1]=(float)Math.sin(θ);
坐标[i+2]=0;
_vertexBuffer.put(坐标[i+0]);
_vertexBuffer.put(coords[i+1]);
_vertexBuffer.put(coords[i+2]);
θ+=数学PI/90;
}

这只会画一个圆。圆柱体更复杂,因为需要在平移的z平面中定义顶点。并用正确的法线定义它们(要么像在圆柱体内部一样向内,即隧道,要么像在看管道一样向外),这是比较棘手的部分

我现在正在做这件事(这就是我来到这里的原因),画了圆柱体,但我很确定我的法线是不正确的,因为我的灯光看起来有点暗。当我弄明白的时候,我会发布一些代码

编辑:代码实际上也没有画圆。以下是如何做到这一点(在2D中):

R=半径
NUM_顶点=要在圆中使用的顶点数
delta=(Math.PI/180)*(360/NUM_顶点)//获取顶点定义之间的弧度增量
对于i=0;i
//注意:根据您使用的GL绘图类型,可能需要重新定义原始顶点以完成圆。如果是这样,只需将arg to sin/cos设为0即可完成循环


上一次编辑*:我刚刚意识到,通过重新使用三角形代码中的一些计算法线,我过度复杂了法线。相反,我意识到如果一个圆柱体的原点0,0是每个圆环的中心,那么对于圆柱的正常计算是多么简单。法线将=顶点位置缩放为长度1。对于圆柱体(即隧道)上面向内的法线,x、y值将反转(这是一个假设,假设您向下看-z轴)。

这不包括绘制对象的GL ES调用。例如,DrawArray或DrawElement。你能把那部分也包括进去吗?
R = Radius
NUM_VERTICES = Number of vertices you want to use in circle

delta = (Math.PI / 180) * (360 / NUM_VERTICES);  //get delta in radians between vertex definition

for i = 0 ; i < NUM_VERTICES ; i ++

    x = R * cos(Delta * i)
    y = R * sin(Delta * i))

    vertices[i] = x; vertices[i+1] = y; vertices[i+2] = 0;  
end for