免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1167 | 回复: 1
打印 上一主题 下一主题

球形建模 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-01 22:23 |只看该作者 |倒序浏览
球形建模




opengl里的对球形的建模:首先要把球形表式由点组成的模型。现在的问题是:怎么把这个球用点集进行表示。

代码如下:


Java代码  
final int UNIT_SIZE=10000;   
ArrayList<Integer> alVertix=new ArrayList<Integer>();//存放顶点坐标的ArrayList   
final int angleSpan=18;//将球进行单位切分的角度   
   for(int vAngle=-90;vAngle<=90;vAngle=vAngle+angleSpan){//垂直方向angleSpan度一份   
    for(int hAngle=0;hAngle<360;hAngle=hAngle+angleSpan)//水平方向angleSpan度一份   
    {//纵向横向各到一个角度后计算对应的此点在球面上的坐标   
        double xozLength=scale*UNIT_SIZE*Math.cos(Math.toRadians(vAngle));   
        int x=(int)(xozLength*Math.cos(Math.toRadians(hAngle)));   
        int z=(int)(xozLength*Math.sin(Math.toRadians(hAngle)));   
        int y=(int)(scale*UNIT_SIZE*Math.sin(Math.toRadians(vAngle)));   
        //将计算出来的XYZ坐标加入存放顶点坐标的ArrayList   
        alVertix.add(x);alVertix.add(y);alVertix.add(z);   
    }   
   }      

            final int UNIT_SIZE=10000;
            ArrayList<Integer> alVertix=new ArrayList<Integer>();//存放顶点坐标的ArrayList
            final int angleSpan=18;//将球进行单位切分的角度
        for(int vAngle=-90;vAngle<=90;vAngle=vAngle+angleSpan){//垂直方向angleSpan度一份
                for(int hAngle=0;hAngle<360;hAngle=hAngle+angleSpan)//水平方向angleSpan度一份
                {//纵向横向各到一个角度后计算对应的此点在球面上的坐标
                        double xozLength=scale*UNIT_SIZE*Math.cos(Math.toRadians(vAngle));
                        int x=(int)(xozLength*Math.cos(Math.toRadians(hAngle)));
                        int z=(int)(xozLength*Math.sin(Math.toRadians(hAngle)));
                        int y=(int)(scale*UNIT_SIZE*Math.sin(Math.toRadians(vAngle)));
                        //将计算出来的XYZ坐标加入存放顶点坐标的ArrayList
                        alVertix.add(x);alVertix.add(y);alVertix.add(z);
                }
        }         讲解:

1. 首先把球想成由很多的半径不一样的圆所组成的。把球想像成由很多平形于x,z平面的圆所组成的。

2. x,z轴的圆的角度是由0-360,y轴的变动由-90到90。

3. 在java里,三角函数要用弧度计算,而我们平实一般都是角度来计算。其实不管三角函数用的是角度和弧度,其都是度量的是角的大小,所以对于同一个角,其三角函数的值都是一样的(不管是用角度计算,还是用弧度计算)。所以sin(x)就不要注重其x是角度还是弧度,只要关心,其是由对边/斜边(前题是直角三角形)。

4. 如果对于计算球上每个点的坐标,不太理解,可以在笛卡尔级坐标系里,画一个点,再把这个点进行映射到三个坐标轴上去,就可以了。

注:角度和弧度的理解:http://hi.baidu.com/kent_edwin/b ... 06967e3812bb28.html



论坛徽章:
0
2 [报告]
发表于 2012-03-01 22:25 |只看该作者
谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP