效果图:
编写huanCH.java
*设置圆锥曲面的控制属性,包括纹理、环半径、截面半径、环角度切分单位和截面角度切分单位
*通过上述属性可以控制圆环曲面的大小,并获取网格顶点坐标;最后设置顶点、纹理、法向量缓冲,并定义绘制方 法drawSelf()
package com.scout.eeeeeee; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; import java.util.ArrayList; import javax.microedition.khronos.opengles.GL10; public class huanCH { private FloatBuffer ding;//顶点缓冲 private FloatBuffer wen;//纹理缓冲 private FloatBuffer myNormalBuffer;//法向量缓冲 int vcount; int textureid; float rSpan; float cSpan; float ring_Radius; float circle_Radius; public float mAngleX; public float mAngleY; public float mAngleZ; public huanCH(float rSpan,float cSpan,float ring_Radius,float circle_Radius,int textureid) { //rSpan表示环每一份多少度;cSpan表示圆截环每一份多少度;ring_Radius表示环半径;circle_Radius圆截面半径。 this.rSpan=rSpan; this.cSpan=cSpan; this.circle_Radius=circle_Radius; this.ring_Radius=ring_Radius; this.textureid=textureid; ArrayList<Float> val=new ArrayList<Float>(); ArrayList<Float> ial=new ArrayList<Float>();//法向量存放列表 for(float circle_Degree=50f;circle_Degree<130f;circle_Degree+=cSpan) { for(float ring_Degree=-90f;ring_Degree<0f;ring_Degree+=rSpan) { float x1=(float) ((ring_Radius+circle_Radius*Math.cos(Math.toRadians(circle_Degree)))*Math.cos(Math.toRadians(ring_Degree))); float y1=(float) (circle_Radius*Math.sin(Math.toRadians(circle_Degree))); float z1=(float) ((ring_Radius+circle_Radius*Math.cos(Math.toRadians(circle_Degree)))*Math.sin(Math.toRadians(ring_Degree))); float x2=(float) ((ring_Radius+circle_Radius*Math.cos(Math.toRadians(circle_Degree)))*Math.cos(Math.toRadians(ring_Degree+rSpan))); float y2=(float) (circle_Radius*Math.sin(Math.toRadians(circle_Degree))); float z2=(float) ((ring_Radius+circle_Radius*Math.cos(Math.toRadians(circle_Degree)))*Math.sin(Math.toRadians(ring_Degree+rSpan))); float x3=(float) ((ring_Radius+circle_Radius*Math.cos(Math.toRadians(circle_Degree+cSpan)))*Math.cos(Math.toRadians(ring_Degree+rSpan))); float y3=(float) (circle_Radius*Math.sin(Math.toRadians(circle_Degree+cSpan))); float z3=(float) ((ring_Radius+circle_Radius*Math.cos(Math.toRadians(circle_Degree+cSpan)))*Math.sin(Math.toRadians(ring_Degree+rSpan))); float x4=(float) ((ring_Radius+circle_Radius*Math.cos(Math.toRadians(circle_Degree+cSpan)))*Math.cos(Math.toRadians(ring_Degree))); float y4=(float) (circle_Radius*Math.sin(Math.toRadians(circle_Degree+cSpan))); float z4=(float) ((ring_Radius+circle_Radius*Math.cos(Math.toRadians(circle_Degree+cSpan)))*Math.sin(Math.toRadians(ring_Degree))); val.add(x1);val.add(y1);val.add(z1); val.add(x4);val.add(y4);val.add(z4); 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);