away3d制作的简易太阳系演示,不要吐槽数据不太符合实际,那些靠边的行星公转周期都是以世纪为单位的,我不加快一点就根本看不出它们是在运动还是罢工了。。。LOL。边上那个哈雷彗星就当没看见吧,实在太丑了,只是为了尝试一下ay3d的flint粒子才用的,不用的话估计帧频还能再高一点: )

直接上swf:(鼠标点击某个行星可以以它为中心、滚轮可以调节摄像机距离,如果滚轮和网页的滚动条冲突了可以把鼠标移到你的任务栏或者网页的标题栏再滚动就OK了)

可能由于安全沙箱问题读不出swf的话,直接走传送门:

一些总结:

1、想给行星画上轨道,在API文档找了半天没找到画圆的类,不过找到了cuver类,好吧,虽然有点麻烦不过用功cuver写了一个3d圆类,椭圆的话就对这个对象进行scaleX、Y就可以了,因为这个自定义类画的圆是处在XY面上的,z轴缩放就用不到了。

下面是这个画圆类:

package base
{
    import away3d.containers.ObjectContainer3D;
    import away3d.core.base.Vertex;
    import away3d.materials.ColorMaterial;
    import away3d.materials.WireframeMaterial;
    import away3d.primitives.CurveLineSegment;
    
    public class Circle3D extends ObjectContainer3D
    {
        private var points:Vector.<Vertex> = new Vector.<Vertex>();
        private var ctrls:Vector.<Vertex> = new Vector.<Vertex>();
        private var curves:Vector.<CurveLineSegment> = new Vector.<CurveLineSegment>();
        
        
        public function Circle3D(xpos:Number,ypos:Number,zpos:Number,r:Number,color:uint=0xCCCCCC,thickness:int = 1)
        {
            super();
            var x:int,y:int,z:int;
            
            var material:WireframeMaterial = new WireframeMaterial();
            material.wireColor = color;
            material.thickness = thickness;
            
            points.push(new Vertex(r+x,y));
            ctrls.push( new Vertex(r+x, Math.tan(Math.PI/8)*r+y));
            points.push( new Vertex(Math.cos(Math.PI/4)*r+x, Math.sin(Math.PI/4)*r+y));
            ctrls.push( new Vertex(Math.tan(Math.PI/8)*r+x, r+y));
            points.push( new Vertex(x, r+y));
            ctrls.push( new Vertex(-Math.tan(Math.PI/8)*r+x, r+y));
            points.push( new Vertex(-Math.cos(Math.PI/4)*r+x, Math.sin(Math.PI/4)*r+y));
            ctrls.push( new Vertex(-r+x, Math.tan(Math.PI/8)*r+y));
            points.push( new Vertex(-r+x, y));
            ctrls.push(new Vertex(-r+x, -Math.tan(Math.PI/8)*r+y));
            points.push( new Vertex(-Math.cos(Math.PI/4)*r+x, -Math.sin(Math.PI/4)*r+y));
            ctrls.push( new Vertex(-Math.tan(Math.PI/8)*r+x, -r+y));
            points.push( new Vertex( x, -r+y));
            ctrls.push( new Vertex(Math.tan(Math.PI/8)*r+x, -r+y));
            points.push( new Vertex(Math.cos(Math.PI/4)*r+x,-Math.sin(Math.PI/4)*r+y));
            ctrls.push( new Vertex(r+x, -Math.tan(Math.PI/8)*r+y));
            
            var i:int = 0;
            var j:int;
            while(i<=7){
                if(i==7){
                    j=0;
                }else{
                    j=i+1;
                }
                curves.push(new CurveLineSegment(points[i],ctrls[i],points[j],material));
                this.addChild(curves[i]);
                i++;
                
            }
            
            this.x = xpos;
            this.y = ypos;
            this.z = zpos
            
    
        }
        
        public function set ZOffset(z:Number):void{
            var i:int = 0;
            for(;i<=7;i++){
                curves[i].screenZOffset = z;
            }
        }

}
}

简单来说就是画8条曲线连成一个圆。

我给这个类加了一个额外的set方法:Zoffset。它是用来设置这个圆的z轴渲染位移的,其实就是给screenZoffset外面套了一层。比如当你设置

Zoffset = 1000;

也就是在渲染的时候把曲线的Z坐标假设增加了1000再渲染,我是用它来保证我的那些轨道线永远不会挡着球体。这个圆类是拓展ObjectContainer3D的,如果你直接设置它本身的screenZoffset是没有用的,这个值只影响自己,不影响他的子对象。

2、away3d导入外部模型的问题。 在3dsMax里面做个土星光环之类的圆环,如果给材质球设置成“面贴图”,那么我使用的位图就会贴在每一个面上而不是拉伸并铺在整个模型上。可是导出3DS之后再由away3d加载到swf里面来,就又变成拉伸的情况了。in为这个原因导致我没加上小行星带。我不知道有没有什么办法可以把材质球里面的那些设置导出成a3d可以识别的格式。。求解啊

3、内存占用高…2M多的swf文件,独立运行就占了200M的内存,而且还在慢慢增加。查了一下,内置的摄像机裁切类Clipping,虽然可以把视口以外的多余图形裁切掉,但是一用就掉帧,而且很容易把那些近处的但是还不应该消失的物体给裁切掉。效率问题也是其他flash3d类库的通病,不知道fp11的stage3d特性会带来怎样的提升,等年底away3d4.0正式版发布。

(2011-12-11 旧博文搬运)away3d太阳系DEMO相关推荐

  1. 2011 - 12 - 12记录2011 - 12 - 11

    1. argc与argv main函数的形参(int argc,char * argv[]). main 函数有两种写法:1s.默认写法:int main() 2.标准写法:main(int argc ...

  2. (2011-12-28 旧博文搬运)闪耀十字军(ティンクル☆くるせいだーす)【3】

    10月11日 甘んじる 表示安于现状的样子,如:薄給に甘んじる. 薄给就是很少的工资 及ばず乍ら[オヨバズナガラ](nagara原来写成"乍"啊..) [副]十分にはいかないが.人 ...

  3. (2011-12-14 旧博文搬运)闪耀十字军(ティンクル☆くるせいだーす)【2】

    午休: 何だろ.噛み合ってるのか不安になる会話の流れだ. 噛み合う应该是咬合的意思,这话的意思大概是"总感觉我们无法完成对话的交接球" 贅沢[ゼイタク] 必要な程度をこえて.物事に ...

  4. 2011年 11月底-12月初 51Aspx源码发布详情

    lhgdialog拓展功能弹窗插件源码 2011-12-02 [VS2010] lhgdialog是一功能强大的简单迷你并且高效的弹出窗口组件,基于网络访问并且兼容IE 6.0+,Firefox 3. ...

  5. 2011年11月13日之存款利息

    第12周报告3: 实验目的:学会使用switch语句解决实际问题 实验内容:计算存款利息. /* 程序头部注释开始(为避免提交博文中遇到的问题,将用于表明注释的斜杠删除了) * 程序的版权和版本声明部 ...

  6. 超人气光棍节!现在时间虽然不是2011年11月11日11点11分11秒11毫秒11微秒11纳秒11皮秒11飞秒11阿秒11渺秒11......

    尽管我们没有机会经历1111年11月11日11点11分11秒11毫秒11微秒11纳秒11皮秒11飞秒11阿秒11渺秒11...,但是我们马上要迎来,2011年11月11日11点11分11秒11毫秒11 ...

  7. 2011年11月校园招聘JAVA面试题整理

    2011年11月校招中,本人参加的均为JAVA应用软件开发的应聘(非测试),有两次中软的笔试面试和一次杭州海康威视的笔试面试,笔试就不多说了,都比较基础,面试时长都在40分钟左右,具体是针对简历中提到 ...

  8. 执一不二 跬步千里-王子密码2011年11月份心得(十)

    执一不二 跬步千里-王子密码2011年11月份心得(十) 2011年12月13日 王子密码3年9个月了, 这个月组织了三次培训... 工作心得- 百荣A店--贾小雅 2011.11.28 哈喽!大家好 ...

  9. Spire.XLS for Java 12.11.8 Crack

    Spire.XLS for Java是一个专业的 Java Excel API,使开发人员无需使用 Microsoft Office 或 Microsoft Excel即可创建.管理.操作.转换和打印 ...

最新文章

  1. SetGet and MACRO
  2. jenkins不能启用端口_基于K8s的Jenkins持续集成实战(上)
  3. MySQL5.7 Replication主从复制配置教程
  4. SpringBoot-04:SpringBoot在idea中的俩种创建方式
  5. HashMap源码分析1:添加元素
  6. 《安全测试指南》——配置管理测试【学习笔记】
  7. Nginx+win10安装配置
  8. python filter函数中写none_Python3基础 filter 第一个参数为NONE时 结果只返回为True的对象...
  9. inputstream的大小为0_刘科排列三第2020306期推荐:独胆参考0,双胆0和7
  10. s3c6410 jpeg编码 linux,S3C6410 裸机硬件JPEG解码
  11. 不使用session,借助redis实现验证码
  12. java游戏暂停弹出字体_小白写了个java的小游戏 想加个暂停的功能 无从下手 求大佬们帮...
  13. CANOpen数据存档文件
  14. IIS SSL证书 指定的登录会话不存在,可能已被终止 HRESULT:0x80070520
  15. 使用requests访问必应在线翻译
  16. 容差分析相关的计算公式
  17. 让 Alfred 支持拼音
  18. 悉尼大学计算机硕士健康科技,悉尼大学健康科学学院
  19. 任正非——《一江春水向东流》
  20. HoloLens开发学习笔记(一):HoloLens简介

热门文章

  1. mysql big tables_mysql常见命令操作
  2. 用html5label写一个简单的按钮功能
  3. ArcGIS 中的标准分类方法(相等、分位、自然断裂、标准差)
  4. element ui table的show-overflow-tooltip属性以及设置其宽度
  5. 参饵光纤光源matlab,模块化掺铒光纤宽带光源驱动电路设计
  6. nodejs express搭建服务器(爬虫知乎精华帖,个人学习用)六 html
  7. 【春晚鬼畜】赵本山:我就是念诗之王!
  8. 计算机木马犯罪类型,计算机木马病毒犯罪研究..doc
  9. 使用OSGeo4W安装配置QGIS
  10. Java构造方法定义、对象实例化的过程、对象的引用和实体