利用AS3GeomClassExporter能够方便的得到一个3D物件的顶点和面信息。而且它为我们导出一个完整的类。

首先我们在3DMAX里面输入文本:
 

让它“站起来”:

然后选择修改选项卡,拉下修改器列表,选择如下:

到工具选项卡,打开AS3GeomClassExporter的面板,设置package和class,然后export:

导出后我们得到一个AS文件,打开看看吧,这是里面的代码:

Code
package view.text
{
    import org.papervision3d.core.*;
    import org.papervision3d.core.geom.*;
    import org.papervision3d.core.geom.renderables.Triangle3D;
    import org.papervision3d.core.geom.renderables.Vertex3D;
    import org.papervision3d.core.math.NumberUV;
    import org.papervision3d.core.proto.*;

    public class Text3D extends TriangleMesh3D
    {

        public var verts :Array;
        public var faceAr:Array;
        public var uvs :Array;

        private function v(x:Number,y:Number,z:Number):void
        {
            verts.push(new Vertex3D(x,y,z));
        }

        private function uv(u:Number,v:Number):void
        {
            uvs.push(new NumberUV(u,v));
        }

        private function f(vn0:int, vn1:int, vn2:int, uvn0:int, uvn1:int,uvn2:int):void
        {
            faceAr.push( new Triangle3D( this, [verts[vn0],verts[vn1],verts[vn2] ], null, [uvs[uvn0],uvs[uvn1],uvs[uvn2]] ) );
        }

        public function Text3D( material:MaterialObject3D=null, initObject:Object=null )
        {
            super( material, new Array(), new Array(), null, initObject );
            verts = this.geometry.vertices;
            faceAr= this.geometry.faces;
            uvs   =new Array();
            v(4.29922,0.0,0.0);
            v(29.3289,64.1,-2.8019e-006);
            v(20.6617,64.1,-2.8019e-006);
            v(3.36328,17.5422,-7.66793e-007);
            v(2.81146,16.0431,-7.01267e-007);
            v(2.27922,14.5441,-6.35743e-007);
            v(1.76656,13.0452,-5.70222e-007);
            v(1.27348,11.5463,-5.04703e-007);
            v(0.799983,10.0475,-4.39188e-007);
            v(0.346061,8.54869,-3.73675e-007);
            v(-0.0882816,7.05,-3.08165e-007);
            v(-0.489588,8.46336,-3.69945e-007);
            v(-0.917617,9.90523,-4.32971e-007);
            v(-1.37237,11.3756,-4.97244e-007);
            v(-1.85384,12.8745,-5.62762e-007);
            v(-2.36204,14.4019,-6.29526e-007);
            v(-2.89696,15.9578,-6.97537e-007);
            v(-3.4586,17.5422,-7.66793e-007);
            v(-20.1383,64.1,-2.8019e-006);
            v(-29.3289,64.1,-2.8019e-006);
            v(-4.56172,0.0,0.0);
            uv(8.25781,-17.0422);
            uv(33.2875,47.0578);
            uv(24.6203,47.0578);
            uv(7.32188,0.499999);
            uv(6.77006,-0.999076);
            uv(6.23782,-2.49809);
            uv(5.72516,-3.99704);
            uv(5.23208,-5.49592);
            uv(4.75858,-6.99474);
            uv(4.30465,-8.49349);
            uv(3.87031,-9.99219);
            uv(3.469,-8.57883);
            uv(3.04098,-7.13696);
            uv(2.58623,-5.66658);
            uv(2.10475,-4.1677);
            uv(1.59656,-2.64031);
            uv(1.06164,-1.08441);
            uv(0.5,0.500001);
            uv(-16.1797,47.0578);
            uv(-25.3703,47.0578);
            uv(-0.603129,-17.0422);
            f(0,1,2,0,1,2);
            f(0,2,3,0,2,3);
            f(0,3,4,0,3,4);
            f(0,4,5,0,4,5);
            f(0,5,6,0,5,6);
            f(0,6,7,0,6,7);
            f(0,7,8,0,7,8);
            f(0,8,9,0,8,9);
            f(0,9,10,0,9,10);
            f(20,0,10,20,0,10);
            f(19,20,10,19,20,10);
            f(19,10,11,19,10,11);
            f(19,11,12,19,11,12);
            f(19,12,13,19,12,13);
            f(19,13,14,19,13,14);
            f(19,14,15,19,14,15);
            f(19,15,16,19,15,16);
            f(19,16,17,19,16,17);
            f(19,17,18,19,17,18);

            this.geometry.ready = true;
        }

    }

}

我们分析一下这些代码,其中v开头的,是顶点坐标,uv开头的是面,f是对应的顶点和面的信息,用于添加到一个geometry.faces数组,然后根据这个数组的点面信息绘制图形。这时,如果你需要实例化这个类,直接addChild到场景,物件就会绘制出来了。

如果用到线条绘制这个"V",我们需要怎么做呢?十分简单。我们只需要他的顶点信息,也就是v开头的东西了。我们把这些信息复制出来,提供给Lines3D类使用。利用Lines3D里的addNewLine方法把线条按照顶点座标画出来。

我利用了一个导航球,“带领”着线条的移动,一下是这个导航球的代码,其中的trailList就是顶点座标数组:

Code
        public function SimpleLine(lineSize:int, trailSize:int, color:uint, trailList:Array, speed:Number, name:String=null)
        {
            super(lineSize, trailSize, color, name);
            
            newTrailList = analyzeTrailList(trailList, speed);
            
            trailObj.x = newTrailList[0].x;
            trailObj.y = newTrailList[0].y;
            trailObj.z = newTrailList[0].z;
            
            oldVertex3D = new Vertex3D(newTrailList[0].x, newTrailList[0].y, newTrailList[0].z);
        }
        
        private function analyzeTrailList(trailList:Array, speed:Number):Array
        {
            var newArray:Array = [];
            
            for (var i:int = 0; i < trailList.length - 1; i ++)
            {
                var ii:int = i + 1;
                var dx:Number = trailList[ii].x - trailList[i].x;
                var dy:Number = trailList[ii].y - trailList[i].y;
                var d:Number = Math.sqrt(dx * dx + dy * dy);
                
                var speedX:Number = Math.cos(Math.atan2(dy, dx)) * speed;
                var speedY:Number = Math.sin(Math.atan2(dy, dx)) * speed;
                
                var per:Number = d / speed;
                for (var j:int = 0; j < per - 1; j ++)
                {
                    var x:Number = trailList[i].x + speedX * j;
                    var y:Number = trailList[i].y + speedY * j;
                    newArray.push(new Vertex3D(x, y, 0));
                }
                newArray.push(new Vertex3D(trailList[ii].x, trailList[ii].y, 0));
            }
            
            return newArray;
        }
        
        public function renderLine(i:int = 0):void
        {
            if (i < newTrailList.length - 1)
            {
                var ii:int = i + 1;
                TweenLite.to(trail, .005, {x:newTrailList[ii].x, y:newTrailList[ii].y, z:newTrailList[ii].z, onComplete:renderLine, onCompleteParams:[ii], ease:Linear.easeOut});
            }
            else
            {
                tweenComplete();
            }
        }

Preview:http://niuniuzhu.cn/p/3DText

转载于:https://www.cnblogs.com/niuniuzhu/archive/2008/07/16/1244238.html

PV3D绘制3D线条 - 3DMAX插件AS3GeomClassExporter导出顶点到AS类相关推荐

  1. html 延长直线,利用HTML5实现绘制3D线条延伸动画特效

    特效描述:利用HTML5实现 绘制3D 线条延伸 动画特效.利用HTML5实现雷达地区扫描动画特效 代码结构 1. HTML代码 ;(function() { 'use strict'; var c ...

  2. 3dmax材质丢失插件_常见3DMAX插件导出模型丢失贴图问题

    在使用超图3DMAX插件导出模型时,时常出现全部或局部区域出现贴图丢失的情况,本文收集了几种常见的贴图丢失问题,并且提供解决方案. 1. 模型中所有贴图不在一个文件夹下,或贴图文件夹中存在子文件夹(图 ...

  3. 3DMAX中CryEngine导出插件的配置方法

    原文地址:http://tieba.baidu.com/p/2349823822 1 找到 你的cryengine根目录\Tools\CryMaxTools\LoadCryMaxTools.ms 复制 ...

  4. 【游戏建模】3DMAX插件安装与详细说明

    安装3dmax的插件使我初学max的头号难题每每抓耳挠腮不得其门而入其表情就是达尔文进化论的铁证在电脑面前我常常被它逼的出现返祖现象常常觉得自己就像坐在电脑面前的大猩猩当然要是它现在就死机我会毫不犹豫 ...

  5. 【沐风老师】为你推荐18个免费3dMAX插件和脚本

    在所有 3D 软件中,3dMax的历史特别引人注目,有许多有趣的里程碑和突破点.自 1990 年推出以来,3dMax 一直是Autodesk公司的支柱产品之一.作为行业标准,它是高端项目和各种高级用途 ...

  6. 3DMAX插件安装与详细说明

    作动画和建筑就是麻烦什么都要.河流山川星星月亮银河系时间万物都要----再次印证了电脑害死人的CG定律.好在3DMAX的制胜法宝就是我什么插件都有就是要你到网上去找.哎INTER网就是信息的银河系啊. ...

  7. 全球使用率最高的五款3DMax插件,总有一款适合你

    3DMAX作为国内知名较高的3D建模软件,自然很多设计的朋友都在使用.同时也有很多插件应有而生,今天分享几款全球使用率最高的五款3DMax插件! 一.MaxToBlender MaxToBlender ...

  8. 在canvas上绘制3d图形

    项目简介 文章里有相当多的用到中学数学中的知识,推导3d的几何模型是如何绘制到2d平面中去的,最终利用推导出的结论编写代码,实现一个波纹的demo 转载自:https://www.jianshu.co ...

  9. 绘制图形可以使用什么python数据库_用Matplotlib如何绘制3D图形

    Matplotlib是一个Python 2D绘图库,它可以在各种平台上以各种硬拷贝格式和交互式环境生成出具有出版品质的图形. 在上篇中讲述的是如何对图形颜色和线条的填充,而今天给大家带来的是用matp ...

  10. ps原始数据清理脚本_创建地形模型一步到位!PS最新2019全球首款3D地形生成插件送给你...

    建过地形的设计同仁们都清楚,要建出一个精确的地形模型基本要靠CAD,SU,GIS,Rhino这些软件协同操作. 一般来说,有现成的CAD原始数据后,整理导入GIS中制作各种分析图,也要花半天时间.如果 ...

最新文章

  1. JAVASCRIPT函数式编程
  2. 大佬是怎么优雅实现矩阵乘法的?
  3. TheBrain v11.0.84中文版
  4. 分治法:BFPTR算法找第k小
  5. 美图影像节发布六款新品 满足用户生活、工作全方位变美需求
  6. ACM-ICPC 2017 Asia Xi'an A XOR (线性基+线段树思想)
  7. 屏幕颜色拾取器 (VC++)
  8. UG NX 12 坐标系的操作
  9. Attachments in Oracle Form
  10. python双星号什么运算_Python中的*(星号)和**(双星号)完全详解
  11. 算法学习(二)——Alpha-Beta剪枝算法
  12. 语句覆盖、条件覆盖、判定覆盖、条件-判定覆盖、组合覆盖、路径覆盖
  13. Oracle的同义词
  14. BMZCTF-MISC(一) WriteUp
  15. Office 2010安装程序包的语言不受系统支持
  16. 可道云kodexplorer修改小记
  17. 如临现场的视觉感染力,NBA决赛直播还能这样看?
  18. 导入/导出文件\照片(kml\shp\cad(dxf)\txt\excel)
  19. Intouch学习笔记—新建工程
  20. 数字电子技术基础大作业---电子表、流水灯

热门文章

  1. Linux开发_判断程序是否以管理员权限运行(root/sudo)
  2. ubnutu更换合适源(阿里源)
  3. 网站排障的一些小命令
  4. [NOI导刊2010提高]黑匣子
  5. 《设计模式沉思录》—第2章2.4节访问权限
  6. Teradata中的四舍五入问题
  7. 利用Kinect实现用指尖隔空控制鼠标(源码放出)
  8. 利用FrameLayout连接一组view实现流畅的左右滑动
  9. exchange功能在线测试
  10. Xbox360手柄驱动xbcd+