接着上面的文章,我们可以先生成一个静止的方体线框,基本的思路是:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:myCanvas3D="myCanvas3D.*" applicationComplete="init();">
<mx:Script>
<![CDATA[
import hjh3dcom.Object3d;
private function init():void{
this.addEventListener(Event.ENTER_FRAME,onenterframe);
}
private function make3dPoint(x3d:Number,y3d:Number,z3d:Number):Object3d{
var point3d=new Object3d();
return point3d;
}
private function make2dPoint(ob3d:Object3d,focalLength:Number):Object{
var point2d=new Object();
return point2d;
}
private function onenterframe(evt:Event):void{
}
]]>
</mx:Script>
<myCanvas3D:Canvas3D id="mycanvas" width="500" height="400" backgroundColor="0x000000"/>
</mx:Application>
初始化参数,增加一个时间的侦听器。
private function init():void{
this.addEventListener(Event.ENTER_FRAME,onenterframe);
}
生成三维的点的方法:
private function make3dPoint(x3d:Number,y3d:Number,z3d:Number):Object3d{
var point3d=new Object3d();
return point3d;
}
由三维的点的方法转换(或生成)二维的点的方法:
private function make2dPoint(ob3d:Object3d,focalLength:Number):Object{
var point2d=new Object();
return point2d;
}
在时间的运行中绘制物体:
private function onenterframe(evt:Event):void{
}
基本的构架是这样了,下面就靠我们把每个方式给实现了就可以了。
我们丰富完代码后:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:myCanvas3D="myCanvas3D.*" applicationComplete="init();">
<mx:Script>
<![CDATA[
import hjh3dcom.Object3d;
private var point2dArray:Array;
private var focalLength:Number=300;
private function init():void{
this.addEventListener(Event.ENTER_FRAME,onenterframe);
//通过方法来建立了三维空间的点阵(点的组合)
var point3dArray:Array=[make3dPoint(-20, -40, -20),
make3dPoint(20, -40, -20),
make3dPoint(20, -40, 20),
make3dPoint(-20, -40, 20),
make3dPoint(-20, 80, -20),
make3dPoint(20, 80, -20),
make3dPoint(20, 80, 20),
make3dPoint(-20, 80, 20)]
point2dArray=new Array();
for (var i=0; i<point3dArray.length; i++){
var point2d=make2dPoint(point3dArray[i],focalLength);
//trace(point2d);
point2dArray.push(point2d);
}
trace(point2dArray);
}
private function make3dPoint(x3d:Number,y3d:Number,z3d:Number):Object3d{
var point3d=new Object3d();
point3d.x3d=x3d;
point3d.y3d=y3d;
point3d.z3d=z3d;
return point3d;
}
private function make2dPoint(point3d:Object3d,focalLength:Number):Object{
var point2d=new Object();
var scaleRatio = focalLength/(focalLength + point3d.z3d);
point2d.x=point3d.x3d*scaleRatio+250;
point2d.y=-point3d.y3d*scaleRatio+200;
return point2d;
}
private function onenterframe(evt:Event):void{
mycanvas.canvas.graphics.clear(); // clear any previously drawn box
mycanvas.canvas.graphics.lineStyle(2,0xFF0000,100); // make the drawn lines to be red
mycanvas.canvas.graphics.moveTo(-100+250, 0+200);
mycanvas.canvas.graphics.lineTo(100+250, 0+200);
// top
mycanvas.canvas.graphics.moveTo(point2dArray[0].x, point2dArray[0].y);
mycanvas.canvas.graphics.lineTo(point2dArray[1].x, point2dArray[1].y);
mycanvas.canvas.graphics.lineTo(point2dArray[2].x, point2dArray[2].y);
mycanvas.canvas.graphics.lineTo(point2dArray[3].x, point2dArray[3].y);
mycanvas.canvas.graphics.lineTo(point2dArray[0].x, point2dArray[0].y);
// bottom
mycanvas.canvas.graphics.moveTo(point2dArray[4].x, point2dArray[4].y);
mycanvas.canvas.graphics.lineTo(point2dArray[5].x, point2dArray[5].y);
mycanvas.canvas.graphics.lineTo(point2dArray[6].x, point2dArray[6].y);
mycanvas.canvas.graphics.lineTo(point2dArray[7].x, point2dArray[7].y);
mycanvas.canvas.graphics.lineTo(point2dArray[4].x, point2dArray[4].y);
// connecting bottom and top
mycanvas.canvas.graphics.moveTo(point2dArray[0].x, point2dArray[0].y);
mycanvas.canvas.graphics.lineTo(point2dArray[4].x, point2dArray[4].y);
mycanvas.canvas.graphics.moveTo(point2dArray[1].x, point2dArray[1].y);
mycanvas.canvas.graphics.lineTo(point2dArray[5].x, point2dArray[5].y);
mycanvas.canvas.graphics.moveTo(point2dArray[2].x, point2dArray[2].y);
mycanvas.canvas.graphics.lineTo(point2dArray[6].x, point2dArray[6].y);
mycanvas.canvas.graphics.moveTo(point2dArray[3].x, point2dArray[3].y);
mycanvas.canvas.graphics.lineTo(point2dArray[7].x, point2dArray[7].y);
}
]]>
</mx:Script>
<myCanvas3D:Canvas3D id="mycanvas" width="500" height="400" backgroundColor="0x000000"/>
</mx:Application>
最后效果如图:
【http://www.newflash3d.com---flash3D先锋队:北京贝武易科技公司】
有疑问请联系我QQ:363596350
- 大小: 5 KB
分享到:
相关推荐
3dmax插件神器-003-线框图.mse
行业资料-电子功用-基于线框电极进行电火花套料加工的方法
Wires - Web线框图套件AdobeXD源码下载设计素材UI设计
Wires - Mobile 线框图套件AdobeXD源码下载设计素材UI设计
数字绘-----在线线框图、流程图、网络图、组织结构图、UML、BPMN绘制网站,绘制完成之后可以导出成图片、SVG、XML,也可以保存在云端并能分享给其他用户。
3ds-max-插件教程3DMAX渲染线框动画
图形学实验-立方体线框模型透视投影图形学实验-立方体线框模型透视投影图形学实验-立方体线框模型透视投影
获取食物() Kris、Koko、Kritika、Rodrigo、Zac '减少食物浪费的人' 数字线框: : 部署了?! (cheeeeeeers Kris!): ://getfoodeda.herokuapp.com/ // ------------------------------------------------ // -...
html-to-wireframe被创建为一种易于使用的工具,可以从本地或远程html文件生成线框,以进行类似于Facebook的操作,以便用户可以在加载整个页面之前查看应用程序的结构。 该工具基于: Wirify书签-> PhantomJS-> ...
如何在Linux上运行Balsamiq线框有关如何使用Wine和Lutris在Linux上运行Balsamiq线框的说明。前提条件一个主流Linux发行版(Ubuntu / Debian / Fedora / Mint),其中包含curl , wine和wine32 。 lutris -Lutris使...
掌厅登陆之周末有礼-转盘抽奖-线框图-20141210.jpg
该项目是使用生成的。 :magnifying_glass_tilted_right: Nx是用于Monorepos的一组可扩展开发工具。 向您的工作区添加功能 Nx支持许多插件,这些插件添加了用于开发不同类型的应用程序和不同工具的功能。 这些功能...
项目成本 ProjectCost 是一种工具,可帮助签约人员根据历史定价信息估算合同的每小时人工... Balsamiq——线框图工具 Adobe Fireworks -- 高保真模型 Flask -- Python 应用服务器 AngularJS -- Javascript 网络框架 Twi
针对座椅识别归类问题提出一种由单幅线框图生成三维座椅模型的方法。首先对大量座椅的形态和结构进行学习和归纳,根据座椅在固定观察视点下的线框图,提取出能抽象表达座椅的基本图元集合,如线段、四边形和椭圆形等...
目的效果: ...(4)使用双缓冲技术在屏幕上绘制三维立方体线框模型的二维正交投影图。 使用键盘方向键旋转立方体线框模型。 (5)使用工具条上的“动画”按钮播放立方体线框模型的旋转动画。
资源名称:3d max中如何渲染模型的线框资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
一个单文件Python库,用于生成SVG格式的3D线框
类目改造-需求及线框图_产品矩阵线框图,介绍类目和发布类目
掌厅登陆之周末有礼-线框图-20141205.jpg
Unity3D 模型的几种线框 shader。 模型的几种线框shader。 模型的几种线框shader,需要线框化模型的时候使用,比如选中模型线框化,只能看到模型线,看不到三角面 Unity3d Shader