CodeSimilar to the circle above, only the drawcylinder. Java code has changed;

What do you think is the topic? Let's talk about it directly. You can think of it as the effect of the circle moving along the vertical direction in a parallel horizontal plane. In this way, we get the two bottom surfaces of the cylinder, you can draw a triangle between the vertices of the upper and lower circles on the side. Of course, there will also be errors, so the more points of the circle, the smaller the error, the circle is like a cylindrical. Let's take a look at the code.

Package WYF. lgz;

Import java. NiO. bytebuffer;

Import java. NiO. byteorder;

Import java. NiO. floatbuffer;

Import java. util. arraylist;

Import javax. microedition. khronos. opengles. gl10;

Public class drawcylinder

{

Private floatbuffer myvertexbuffer; // vertex coordinate Buffer

Int vcount; // Number of vertices

Float length; // The length of the column.

Float circle_radius; // circle radius

Float degreespan; // The degree of each part of the circular truncation Ring

Int Col; // Number of cylindrical Blocks

Public float manglex;

Public float mangley;

Public float manglez;

Public drawcylinder (float length, float circle_radius, float degreespan, int col)

{

This. circle_radius = circle_radius;

This. Length = length;

This. Col = Col;

This. degreespan = degreespan;

Float collength = (float) length/COL; // The length of each column

Arraylist <float> val = new arraylist <float> (); // vertex storage list

For (float circle_degree = 360.0f; circle_degree> 0.0f; circle_degree-= degreespan) // loop rows

{

Int J = 0;

// For (Int J = 0; j <Col; j ++) // loop Column

{

Float X1 = (float) (J * collength-length/2 );

Float Y1 = (float) (circle_radius * Math. Sin (math. toradians (circle_degree )));

Float z1 = (float) (circle_radius * Math. Cos (math. toradians (circle_degree )));

Float X2 = (float) (J * collength-length/2 );

Float y2 = (float) (circle_radius * Math. Sin (math. toradians (circle_degree-degreespan )));

Float Z2 = (float) (circle_radius * Math. Cos (math. toradians (circle_degree-degreespan )));

Float X3 = (float) (J + 1) * collength-length/2 );

Float Y3 = (float) (circle_radius * Math. Sin (math. toradians (circle_degree-degreespan )));

Float Z3 = (float) (circle_radius * Math. Cos (math. toradians (circle_degree-degreespan )));

Float X4 = (float) (J + 1) * collength-length/2 );

Float Y4 = (float) (circle_radius * Math. Sin (math. toradians (circle_degree )));

Float Z4 = (float) (circle_radius * Math. Cos (math. toradians (circle_degree )));

Val. Add (X1); Val. Add (Y1); Val. Add (Z1); // two vertices of each line are determined. There are 6 lines and 12 vertices in total.

Val. Add (X2); Val. Add (Y2); Val. Add (Z2 );

Val. Add (X2); Val. Add (Y2); Val. Add (Z2 );

Val. Add (X4); Val. Add (Y4); Val. Add (Z4 );

Val. Add (X4); Val. Add (Y4); Val. Add (Z4 );

Val. Add (X1); Val. Add (Y1); Val. Add (Z1 );

Val. Add (X2); Val. Add (Y2); Val. Add (Z2 );

Val. Add (X3); Val. Add (Y3); Val. Add (Z3 );

Val. Add (X3); Val. Add (Y3); Val. Add (Z3 );

Val. Add (X4); Val. Add (Y4); Val. Add (Z4 );

Val. Add (X4); Val. Add (Y4); Val. Add (Z4 );

Val. Add (X2); Val. Add (Y2); Val. Add (Z2 );

}

}

Vcount = Val. Size ()/3; // determine the number of vertices

// Vertex

Float [] vertexs = new float [vcount * 3];

For (INT I = 0; I <vcount * 3; I ++)

{

Vertexs [I] = Val. Get (I );

}

Bytebuffer vBB = bytebuffer. allocatedirect (vertexs. length * 4 );

VBB. Order (byteorder. nativeorder ());

Myvertexbuffer = vBB. asfloatbuffer ();

Myvertexbuffer. Put (vertexs );

Myvertexbuffer. Position (0 );

}

Public void drawself (gl10 GL)

{

Gl. glrotatef (manglex, 1, 0, 0); // rotate

Gl. glrotatef (mangley, 0, 1, 0 );

Gl. glrotatef (manglez, 0, 0, 1 );

Gl. glableclientstate (gl10.gl _ vertex_array); // enable the vertex buffer.

Gl. glvertexpointer (3, gl10.gl _ float, 0, myvertexbuffer); // specify the vertex buffer

Gl. glcolor4f (0, 0, 0, 0); // set the draw line to black.

Gl. gldrawarrays (gl10.gl _ line_loop, 0, vcount); // draw an image

Gl. gldisableclientstate (gl10.gl _ vertex_array );

}

}