Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Android 3d 球形建模

opengl里的对球形的建模:首先要把球形表式由点组成的模型。现在的问题是:怎么把这个球用点集进行表示。代码如下:
  1. final int UNIT_SIZE=10000
  2. ArrayList<Integer> alVertix=new ArrayList<Integer>();//存放顶点坐标的ArrayList 
  3. final int angleSpan=18;//将球进行单位切分的角度 
  4.    forint vAngle=-90;vAngle<=90;vAngle=vAngle+angleSpan){//垂直方向angleSpan度一份 
  5.     forint hAngle=0;hAngle<360;hAngle=hAngle+angleSpan)//水平方向angleSpan度一份 
  6.     {//纵向横向各到一个角度后计算对应的此点在球面上的坐标 
  7.         double xozLength=scale*UNIT_SIZE*Math.cos(Math.toRadians(vAngle)); 
  8.         int x=(int)(xozLength*Math.cos(Math.toRadians(hAngle))); 
  9.         int z=(int)(xozLength*Math.sin(Math.toRadians(hAngle))); 
  10.         int y=(int)(scale*UNIT_SIZE*Math.sin(Math.toRadians(vAngle))); 
  11.         //将计算出来的XYZ坐标加入存放顶点坐标的ArrayList 
  12.         alVertix.add(x);alVertix.add(y);alVertix.add(z); 
  13.     } 
  14.    }   
 
  1. final int UNIT_SIZE=10000;  
  2. ArrayList<Integer> alVertix=new ArrayList<Integer>();//存放顶点坐标的ArrayList   
  3. final int angleSpan=18;//将球进行单位切分的角度   
  4.    forint vAngle=-90;vAngle<=90;vAngle=vAngle+angleSpan){//垂直方向angleSpan度一份   
  5.     forint hAngle=0;hAngle<360;hAngle=hAngle+angleSpan)//水平方向angleSpan度一份   
  6.     {//纵向横向各到一个角度后计算对应的此点在球面上的坐标   
  7.         double xozLength=scale*UNIT_SIZE*Math.cos(Math.toRadians(vAngle));  
  8.         int x=(int)(xozLength*Math.cos(Math.toRadians(hAngle)));  
  9.         int z=(int)(xozLength*Math.sin(Math.toRadians(hAngle)));  
  10.         int y=(int)(scale*UNIT_SIZE*Math.sin(Math.toRadians(vAngle)));  
  11.         //将计算出来的XYZ坐标加入存放顶点坐标的ArrayList   
  12.         alVertix.add(x);alVertix.add(y);alVertix.add(z);  
  13.     }  
  14.    }      
讲解:1. 首先把球想成由很多的半径不一样的圆所组成的。把球想像成由很多平形于x,z平面的圆所组成的。2. x,z轴的圆的角度是由0-360,y轴的变动由-90到90。3. 在java里,三角函数要用弧度计算,而我们平实一般都是角度来计算。其实不管三角函数用的是角度和弧度,其都是度量的是角的大小,所以对于同一个角,其三角函数的值都是一样的(不管是用角度计算,还是用弧度计算)。所以sin(x)就不要注重其x是角度还是弧度,只要关心,其是由对边/斜边(前题是直角三角形)。4. 如果对于计算球上每个点的坐标,不太理解,可以在笛卡尔级坐标系里,画一个点,再把这个点进行映射到三个坐标轴上去,就可以了。注:角度和弧度的理解:http://www.linuxidc.com/Linux/2012-08/68252p2.htm