Android OpenGL ES (二) 绘制三维/空间坐标系
OpenGL ES 绘制三维/空间坐标系
本程序的源代码包在:http://download.csdn.net/detail/zhangjikuan/6992735
普通的三维画图大多数就是画个立方体,颜色花哨一点,但是因为项目需求,要画一个三维坐标系,并在上面显示三维向量,不是要平面的那种坐标系,而是做成像是在纸上画的那种立体长方体并显示出向量。
刚开始还是小郁闷了一会,但是忽略了其实OpenGL ES的面都是三角形组成的,面肯定就是线组成的,既然能够画三维面肯定就可以画三维线,越简单的东西越容易被忽略,原理请看上一帖,直接上程序了,程序中有详细讲解。
最后的效果图
/****************************************************************
下面是jiasudu.java
/*******************************************************************
* 此文件是关于3D坐标轴的绘制,用jiasu.java和jiasu.xml实现了用户界面
* 关于3D处理的所有程序都在此文件中
*zjk 2014/03/04
*/
public class Jiasudu implements Renderer
{
float x=-0.5f,y=-0.5f,z=-0.5f;
private float r=0;
Handler handler,handler2;
private Timer timer = new Timer();
private TimerTask task;
// 定义Open GL ES绘制所需要的Buffer对象
FloatBuffer lineVerticesBuffer;
FloatBuffer xyzVerticesBuffer;
ByteBuffer lineFacetsBuffer;
ByteBuffer xiangliangFacetsBuffer;
ByteBuffer XFacetsBuffer;
ByteBuffer YFacetsBuffer;
ByteBuffer ZFacetsBuffer;
void updateXYZ(){ //2.1创建各种数组
// 定义立方体的8个顶点
float[] lineVertices = new float[] {
// 上顶面正方形的四个顶点
x, y, z,//0
x, 0,z,//1
0,0,z,//2
0,y,z,//3
// 下底面正方形的四个顶点
x,y,0,//4
x,0,0,//5
0,0,0,//6原点
0,y,0,//7
};
//定义XYZ坐标和显示的字
float xyzVertices[]=new float[]{
-1.2f ,0f, 0f,//0 x起点,画坐标轴的
1.2f ,0f, 0f,//1 X轴的终点
1.0f,0.1f,0f,//2 X轴箭头1
1.0f,-0.1f,0f,//3 X轴箭头2
0f ,-1.2f , 0f,//4 Y轴起点
0f ,1.2f , 0f,//5 Y轴终点
0.1f ,1.0f ,0f,//6 Y轴箭头1
-0.1f ,1.0f ,0f,//7 Y轴箭头2
0f ,0f ,-1.2f,//8 Z轴起点
0f ,0f ,1.2f,//9 Z轴终点
0f ,0.1f ,1.0f,//10 Z轴箭头1
0f ,-0.1f ,1.0f,//11 Z轴箭头2
1.3f,0f,0f,//12 绘制字X
1.35f,0.1f,0f,//13
1.25f,0.1f,0f,//14
1.25f,-0.1f,0f,//15