2011-09-07 99 views
0

任何人都可以帮助我在OpenGL-es android中绘制圆柱体。无论我画什么样的矩形。如何在Android上的OpenGL-es中绘制圆柱体?

我会很感激任何提示或链接。

下面是代码我已经试过:

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; 
     } 
+1

这不包括绘制对象的GL ES调用。例如。 drawArrays或drawElements。你能否包括那部分? – andrewmu

回答

1

OpenGL ES tutorial for Android(part V) 看一看,它给你一个教程一步一步多达画筒。在你的代码

寻找简单看来,你有两个问题:

1)COS生产值在0和1之间,所以你也许应该通过一些半径乘以

2 )线:coords [i + 2] = 0;意味着您可能正在绘制2D圆而不是3D圆柱体

+1

cos和sin的值介于-1和1之间 –

+0

该链接似乎被破坏:http://www.jayway.com/2010/02/15/opengl-es-tutorial-for-android-%E2%80% 93部分-v / –

1

这只会绘制一个圆圈。圆柱更复杂,因为您需要在平移后的z平面中定义顶点。并用正确的法线来定义它们(或者像在筒内一样 - 面向隧道或者在看管道时),这是更棘手的部分。

我现在正在这样做(这是什么把我带到这里),并有圆柱体绘制,但很确定我的法线不正确,因为我的照明看起来有点关闭。当我弄明白的时候,我会发布一些代码。

编辑:意识到代码实际上并没有绘制一个圆圈。这里是如何做到这一点(在2D):

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 

//注意可能需要重新定义原始顶点来完成,这取决于GL画出你正在使用类型的圈子。如果是这样,只需要参数为sin/cos为0来完成循环

最后编辑*:刚刚意识到我通过重新使用一些从我的三角形代码计算正常值来过度复杂化法线。相反,我认识到,如果将原点0,0设置为每个圆形条的中心,则圆柱体的正常计算有多简单。法线将=顶点位置缩放至长度1.对于面向圆柱体(即隧道)的法线,x,y值将被反转(这是假设您正在向下看-Z轴)。