Flash与3D编程探秘(二)- 静态长方体

基于Google Gemini与three.js实现自然语言生成3D手表模型 3D内容生成技术正通过AI实现革命性突破,其核心原理是将自然语言理解与计算机图形学相结合。通过大语言模型解析文本描述,并驱动参数化建模或网格生成,该技术能显著降低3D内容创作的技术门槛与时间成本。在电商产品预览、游戏资产快速原型、交互式教育演示等场景中,这种“文生3D”能力展现出巨大应用潜力。本文聚焦于一个具体实践案例:利用Google Gemini系列模型解析手表描述文本,并结合three.js前端渲染引擎,构建一个从自然语言输入到可交互3D手表模型生成的完整技术方案。该方案演示了如何通过API调用实现低 阅读详情
 
静态长方体

那么接着上一节所讨论的内容,来制作一个静态的长方体,并且让它在屏幕上来回的运动。这个例子和上一节的例子非常的相似,同样主要关心3D空间。不同的是,上一节我们利用了一个事先画好的小球,这一节改变方式,在程序执行时,计算出长方体的每个顶点的位置然后使用Flash的图形API绘制出一个长方体,这样在一系列的绘制后,所看到的就是长方体移动的动画!



移动的静态长方体

 

动画制作步骤

1. 在这一个例子中,需要发挥一下空间想象力去定位长方体的顶点。至于场景上的网格,我想大家可以先把它放在场景的底部,等动画完成后再把它向上移动到合适的位置。

2. 开始和以前一样,定义原点以及焦距。另外也要初始几个常量。长方体围绕y轴公转,R是长方体公转的半径。

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--> var PI  =   3.1415926535897932384626433832795 ;

var R = 100;

var origin  =   new  Object();
origin.x 
=  stage.stageWidth / 2 ;
origin.y 
=  stage.stageHeight / 2 ;
origin.z 
=   0 ;

var focal_length  =   300 ;
var angular_velocity  =  PI / 180 ;
var _angle_xz  =   0 ;

 

3. 接下来定义一个3D空间的点,长方体就围绕这个点进行公转。

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--> var spin_center  =   new  Object();
spin_center.x 
=   0 ;
spin_center.y 
=   0 ;
spin_center.z 
=   100 ;

 

4. 创建一个场景舞台,用来盛放绘制的长方体。创建一个长方体的空Sprite并且把它添加到舞台上。

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--> var scene  =   new  Sprite();
scene.x 
=  origin.x;
scene.y 
=  origin.y
this .addChild(scene);

var box:Sprite 
=   new  Sprite();
scene.addChild(box);

 

5. 下面需要一个函数来创建3D空间的点,那么下一次需要描述一个3D空间的点时,只需要执行这个函数,并且传入相应的x,y和z值即可。

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--> function vertex(x, y, z):Object
{
    var point3d 
=   new  Object();
    point3d.x 
=  x;
    point3d.y 
=  y;
    point3d.z 
=  z;
    
return  point3d;
}

 

6. 你肯定猜到下一步要做的,那就是把一个3D空间的点转换成Flash能够理解的2D空间的点。转换的原理和第一节是一样的,这里就不解释了。

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--> function convert(point3d, focal_length):Object
{
    var point2d 
=   new  Object();
    var scale_ratio 
=  focal_length / (focal_length + point3d.z);
    point2d.x 
=  point3d.x  *  scale_ratio;
    point2d.y 
=  point3d.y  *  scale_ratio;
    
return  point2d;
}

 

7. 下一步也是主要关心的循环函数。首先我想你明确这个函数要做的工作,那就是计算出长方体每个顶点的3D坐标,然后把它们转化成2D坐标,最后用Flash的绘制API建立图形。每一次函数执行,把长方体围绕y轴旋转的角度增加。然后根据这个角度,便可以计算出长方体中心点(对角线的交点)cente.x,center.y,center.z。很好,下面就可以确定这个长方体的每个点的坐标了。在这里我使用了一个边长为80正方体,你可以更改参数调试出你喜欢的长方体。

 

注意

再第一篇到第六篇文章里,物体的运动都是Frame Based的运动,不过长方体的运动你可以尝试改为Time Based的运动。由于文章旨在让读者体会3D的乐趣,因此关于Time Based和Frame Based的运动的区别暂不关系,不过这个课题将会在第七篇讨论。

 


俯瞰长方体的移动

那么紧接着,使用之前写的函数,把长方体的8个3D顶点转换成2D点。然后用Flash的绘制API绘制出来长方体。有一点想说明:假如你的正方体的中心的x是a,正方体的边长是80,那么可以得到它的左前上顶点的x为(a-40),它的右前上的x为(a+40),依此类推;进而可以得出其他顶点的坐标以及它们的y和z。需要注意的是,在这里是对空间中的点进行操作而不是对一个Sprite进行操作。

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--> function move(e:Event): void
{
    var screen_points 
=   new  Array();
    
    _angle_xz 
+=  angular_velocity;
    
if  (_angle_xz  >   360 )
    {
        _angle_xz 
-=   360 ;
    }

    var center 
=   new  Object();
    center.x 
=  R * Math.cos(_angle_xz)  +  spin_center.x;
    center.y 
=   0   +  spin_center.y;
    center.z 
=  R * Math.sin(_angle_xz)  +  spin_center.z;
    
    var points 
=  [
            vertex(center.x
- 40 ,  - 40 , center.z - 40 ),    
            vertex(center.x
+ 40 ,  - 40 , center.z - 40 ),        
            vertex(center.x
+ 40 ,  - 40 , center.z + 40 ),
            vertex(center.x
- 40 ,  - 40 , center.z + 40 ),
                    
            vertex(center.x
- 40 ,  40 , center.z - 40 ),
            vertex(center.x
+ 40 ,  40 , center.z - 40 ),
            vertex(center.x
+ 40 ,  40 , center.z + 40 ),
            vertex(center.x
- 40 ,  40 , center.z + 40 )
             ];

    
for  (var i  =   0 ; i  <  points.length; i ++ )
    {
        screen_points[i] 
=  convert(points[i], focal_length);
    }
    
    with (box.graphics)
    {
        clear();
        lineStyle(.
5 ,  0x000000 ,  1 );
        moveTo(screen_points[
0 ].x, screen_points[ 0 ].y);    
        lineTo(screen_points[
1 ].x, screen_points[ 1 ].y);
        lineTo(screen_points[
2 ].x, screen_points[ 2 ].y);
        lineTo(screen_points[
3 ].x, screen_points[ 3 ].y);
        lineTo(screen_points[
0 ].x, screen_points[ 0 ].y);
        
        moveTo(screen_points[
4 ].x, screen_points[ 4 ].y);    
        lineTo(screen_points[
5 ].x, screen_points[ 5 ].y);
        lineTo(screen_points[
6 ].x, screen_points[ 6 ].y);
        lineTo(screen_points[
7 ].x, screen_points[ 7 ].y);
        lineTo(screen_points[
4 ].x, screen_points[ 4 ].y);
        
        moveTo(screen_points[
0 ].x, screen_points[ 0 ].y);    
        lineTo(screen_points[
4 ].x, screen_points[ 4 ].y);
        moveTo(screen_points[
1 ].x, screen_points[ 1 ].y);
        lineTo(screen_points[
5 ].x, screen_points[ 5 ].y);
        moveTo(screen_points[
2 ].x, screen_points[ 2 ].y);
        lineTo(screen_points[
6 ].x, screen_points[ 6 ].y);
        moveTo(screen_points[
3 ].x, screen_points[ 3 ].y);
        lineTo(screen_points[
7 ].x, screen_points[ 7 ].y);
    }
}

 

8. 最后在场景上添加一个循环执行事件。

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--> this .addEventListener(Event.ENTER_FRAME, move);

 

我希望你能够明确制作这个动画的思路:建立场景,创建3D物体,把顶点转换成为2D点,使用Flash绘制。So far so good? Great! 后面的文章将开始介绍摄像机以及相关的要素,希望你能跟上。

建议:

在你的脑海中建立一个长方体应该不是很困难。我的方法是首先勾勒出正面,然后后面,上面,下面,左面和右面。如果你觉得用脑海想象比较困难的话,可以试着用笔和纸画出一个长方体,然后标出坐标。

建议:

在Flash里,2D空间的原点在左上角(0,0)。在这上面的两节的例子中,在程序一开始就把3D空间的原点向右再向下移动,那么在屏幕上的映射面也就到了屏幕的中间。我是刻意这样写的,好处在于如果你是新接触3D空间这个课题的话,想象物体在原点附近对你来说要容易一些。当然你可以尝试不移动原点,取而代之移动物体,看看和原程序有什么不同。

 

 

一个简单的Particle Sytem的例子

这里所说的Particle System,指得是大量的物体的聚集,我就把它叫做Particle Sytem。下面这个例子主要展示了物体的旋转运动,你应该可以看到一个大量分子(400个位置随机产生的星星)组成的旋转球体,可以使用WSAD移动你的摄像机找到一个合适的观位置。Looks Cool!不过由于这个例子涉及到摄像机以及相关的内容,在这篇文章中我就不再详细解释了。不过不要担心,下一篇将介绍摄像机及其相关的内容,等你了解了程序运行原理后再看这个例子,你一定会觉得简单了。


旋转的星星球体,使用WASD键控制观看角度

 作者:Yang Zhou
出处:http://yangzhou1030.cnblogs.com
本文版权归作者和博客园共有,转载未经作者同意必须保留此段声明。请在文章页面明显位置给出原文连接,作者保留追究法律责任的权利。

瑞萨RX65N DAC开发实战:基于FIT模块的嵌入式数模转换应用 数模转换器(DAC)是嵌入式系统中连接数字世界与模拟世界的关键外设,其核心原理是将微控制器内部的数字代码转换为连续的模拟电压或电流信号。这项技术为音频输出、电机控制、传感器校准等应用场景提供了精确的电压基准或驱动信号,是实现系统智能化控制的重要基础。在嵌入式开发实践中,直接操作硬件寄存器往往面临开发效率低和代码可移植性差的挑战。瑞萨电子的Firmware Integration Technology(FIT)技术通过提供标准化的软件模块,如`r_dac_rx`,将复杂的硬件操作封装为清晰的API,显著提升了 阅读详情

相关推荐

【信息科学与工程学】【数据中心】第三十二篇 云数据中心网络拓扑参数全息模型

多维度集成:物理、二维、三维、几何、连接拓扑的有机统一强约束网络:空间、承重、散热、供电、布线等多重物理约束复杂关系网络:互斥、相似、联动、依赖关系交织多目标优化:成本、性能、可靠性、可扩展性的权衡自动化设计:参数化建模,自动化验证,智能化优化实际工程应用中,建议:建立参数化设计模板库实现多约束自动化验证采用分层协同优化策略构建数字化孪生验证环境持续迭代优化设计规则通过系统化的参数管理,可以实现数据中心网络拓扑的科学设计、高效部署和智能运维。多维度参数:地理、物理、拓扑、性能、成本等千余参数。

weixin_49199313的博客 1370

显示一个立方体的斜二测图(用数组存放正方体的各顶点坐标)

显示一个立方体的斜二测图(用数组存放正方体的各顶点坐标) 代码已经过编译,可直接使用。 #include&lt;graphics.h&gt; #include&lt;stdio.h&gt; #include&lt;math.h&gt; float t=0.5,b; //斜二测 void twoxiece(float *p){ int i,q[24],j=0; float x,y,z; f...

一只睡不醒的猪 2066

计算几何斜等测投影

计算机图形学斜等测投影算法描述,代码详细。计算机图形学作业,关于立体图形构建,旋转实现以及平行投影和透视投影的实现。仅作为作业参考。

Flash与3D编程探秘 - 文章目录

日期:2008年10月 介绍 对学习Flash CS3和Actionscript 3.0中的3D编程感兴趣?You come to the right place!在文章中,我将陆续的介绍在Flash中使用Actionsript进行3D编程一些理论和实例。这是一篇初级到中级难度的学习资料,如果你具有一些基本的数学和几何知识,那对你来说不会太难。请注意:这并不是针对Flash C...

weixin_30838921的博客 130

显示一个正方体的一点透视投影图

显示一个正方体的一点透视投影图;(用数组存放正方体的各顶点坐标)。

opengl绘制一个单位立方体正平行投影图的程序

本程序实现的是绘制一个单位立方体正平行投影图的程序,可以画出变换后的图形。运行环境为vc++6.0.内附有可执行文件和所有源代码。

显示一个立方体的两点透视投影图(用数组存放正方体的各顶点坐标)

如何显示一个立方体的两点透视投影图(用数组存放正方体的各顶点坐标)? #include&lt;graphics.h&gt; #include&lt;stdio.h&gt; #include&lt;math.h&gt; float l,m,n,d,t,g1,g2,g3; //两点透视 //P为经过两点透视后的立方体坐标,q则是使画图显示出来,而对p进行的倍率扩大,x扩大100,y扩大-100 ...

一只睡不醒的猪 2353

UsageLog电脑使用记录软件

UsageLog电脑使用记录软件

6.5编程实例-立方体透视投影

#include GLint winWidth = 600, winHeight = 600; //设置初始化窗口大小 /* 观察坐标系参数设置*/ GLfloat x0 = 0.0, y0= 0.0, z0 =5.0; // 设置观察坐标系原点 GLfloat xref = 0.0, yref =0.0, zref = 0.0; //设置观察坐标系参考点(视点) GLfloat Vx = 0.

图形学与可视化 4376

最新推荐-2026年固态电池+锂电正极+硅基负极等关键技术实践PPT合集(55份).zip

2026年最新固态电池+锂电正极+硅基负极等关键技术实践PPT合集,共55份。供大家查阅。 一、固态电池 1.全固态电池用硅基负极材料研究进展 2.全固态电池硅基负极的开发思考 3.功能型固态电解质设计及界面调控 4.固态电池及关键材料研发与产业化进展 5.固态电池的产业化应用探索 6.固态锂电池开发现状及未来展望 7.固态锂离子电池正极结构设计与材料选择 8.固态锂金属电池设计与应用 9.硫化物全固态电池石墨和硅负极性能调控技术 10.硫化物固态电解质行业应用 11.聚合物基固态电解质与固态电池的关键技术 12.蜂鸟声共振技术-固态电池产业化的革命性创新 13.长安汽车固态电池应用探索 14.高安全性固态电池技术发展趋势 15.高性能硫化物全固态锂电池解决方案 16.高硅体系的膨胀解决方案 二、硅基负极 1.化学气相沉积碳包覆技术在硅基负极材料中的应用 2.新型粘结剂解决 硅基负极膨胀问题 3.氧化亚硅负极材料化学预锂化与界面设计 4.流化床法生产磷酸铁锂及硅负极材料研究 5.石墨烯包覆硅碳负极 6.硅基材料的发展现状及展望 7.硅基负极与固态电解质 8.硅基负极技术与进展 9.硅基负极材料体积膨胀解决策略 10.硅基负极材料及其结构设计 11.硅基负极材料的冶金法制备 12.硅基负极材料的发展与应用 13.硅基负极材料研究进展 14.硅基负极材料:从基础研究到产业应用 15.硅基负极析锂行为及调制研究 16.硅碳负极低成本制造技术报告 17.硅碳负极制备用多孔碳的开发 18.硅碳负极挑战和进展 19.硅碳负极新路线及关键材料制备 20.硅碳负极锂离子电池应力特性研究 21.锂电石墨负极材料工程化技术进步 22.锂离子电池负极材料 23.高容量石墨烯-硅基复合负极材料的研究进展 三、锂电正极 1.基于AI和图论结构化学的锂电池的材料基因探索 2.废旧磷酸铁锂电池梯次及再生利用进展 3.电动汽车大功率充电标准体系与检测认证实践 4.磷酸铁及磷酸铁锂异物防控管理 5.磷酸铁锂正极材料:液相法合成及产业化应用研究 6.磷酸锰铁锂正极材料的研究现状 7.车用动力电池安全标准化工作进展及未来展望 8.锂电层状氧化物正极材料的原子尺度失效机制 9.锂电正极材料工厂异物防控管理图册 10.锂离子电池高熵正极材料成分设计及储锂机制研究 11.高压实磷酸铁锂正极材料生产工艺配方.docx 12.高安全正极材料添加剂提升三元锂电安全性 13.高比能富锂锰基电池关键技术 14.高能量密度锂离子电池正极材料及应用研究 15.高镍单晶三元正极材料研究 16.三元高电压单晶正极材料

Zotero 是学术管理领域非常优秀的软件 它功能成熟、生态稳定,帮助许多科研人员建立了最初的文献归档体系

Zotero 是学术管理领域非常优秀的软件。它功能成熟、生态稳定,帮助许多科研人员建立了最初的文献归档体系。但在当下日常科研与深度使用各类 Agent 时,传统的文献工具链暴露出一些断点:上下文严重分散:论文存储在 Zotero,笔记记在 Obsidian,与模型的推导和分析留在各个网页对话框中。三者数据彼此隔离,当需要 Agent 结合某篇具体论文与历史笔记进行深入推导时,用户必须反复手动复制粘贴。文献格式对模型不友好:人类习惯阅读排版良好的 PDF 文件;但对于模型而言,直接解析双栏排版、跨页表格、复杂数学公式和交叉引用的成本极高,极易产生识别错误与幻觉。结构化 Markdown 与 LaTeX 才是模型容易准确理解的格式。维护成本较高:AI 伴读、全文翻译、笔记同步等高频需求,往往需要安装和调试多个社区插件,配置门槛高且在版本升级时容易出现兼容性问题。批量自动化能力有限:通过 Deep Research 或自动化检索工具发现的大量文献,目前仍需人工在浏览器中逐篇点击保存,难以顺畅衔接批量研究流。Agentero 并非旨在替代 Zotero,而是探索一种人与 Agent 协同处理科研上下文的新方式:人类负责:提出研究问题、进行学术价值判断、深度研读与核心结论推导;Agent 负责:批量检索筛选、元数据抓取、图表与公式提取、引用关系梳理及基础总结。

计算机图形学立方体旋转代码,Flash AS教程:旋转立方体

好,下面开始:stop();//这个stop是让FLASH播放在这一帧停下来,但对代码的运行没有影响~其实不用也没关系angle=-0.03;dot_x=Stage.width/2;dot_y=Stage.height/2;p=70;d=300;//先初始化一下变量~angle是立方体每次转过的角度,dot_x和dot_y定义了空间的原点,p是立方体边长的一半,d是眼//睛距离屏幕的像素sx=ne...

weixin_33647940的博客 686

基于 .net 8、blazor 、furion 开发的后台管理系统,功能全(完善的用户权限管理、定时任务、附件管理、日志审计、物联网、企业门户等)、技术新

基于 .net 7开发的后台管理系统,系统前后台分离,api 是基于Furion 框架开发,前端是基于ant-design-blazor开发,系统使用技术或框架较新

Everything-v.1.4.1.1032 -X64-号称全世界查找文件最快的工具-便携版 .zip

Everything_v.1.4.1.1032 _X64_号称全世界查找文件最快的工具_便携版 .zip

材料科学基于电致塑性效应的多场耦合精密成形:难变形合金超薄带材低缺陷轧制工艺

内容概要:本文系统阐述了合金在电、热、力多场耦合作用下的电致塑性精密成形工艺(Electrically-Assisted Rolling, EAR),重点介绍其通过瞬时脉冲电流实现材料“成形时软、用时强”的核心技术原理。该工艺利用电子风力、焦耳热微区软化等非热与热效应协同作用,降低难变形合金的流动应力,提升单道次压下率(如SUS304由33.8%提升至41.5%),显著减少中间退火次数,实现数十微米级极薄带材的高效、低残余应力、高平整度轧制。文章详细分析了工艺参数(电流密度、频率、脉宽、温度窗口等)、装备配置(脉冲电源、绝缘辊系、在线检测)及失效模式控制,并强调需以“变形区有效电流密度”和“窄温区闭环控制”为核心进行工艺设计与优化。; 适合人群:从事金属材料加工、精密轧制、先进成形技术研发的科研人员与工程技术人员,具备材料科学与工程、机械制造或相关领域背景的研发工程师及研究生。; 使用场景及目标:①开发高强钛合金、不锈钢、特种合金等难变形金属的超薄精密箔材(如折叠屏基材、光刻机钢带);②优化现有冷轧工艺,降低能耗与退火次数,提升产品尺寸精度与表面质量;③研究电-热-力多场耦合成形机理,指导新型电辅助制造装备开发。; 阅读建议:本文兼具理论深度与工程实践指导意义,建议结合图表与实测数据理解多机制协同效应,重点关注电流回路设计、温度场闭环控制与参数标定方法,避免直接套用文献参数;在应用中应坚持“实验标定+仿真验证”原则,确保工艺安全性与可重复性。

电气工程基于电磁原理的继电器工作机理与应用:工业控制中强弱电隔离开关的设计选型及保护电路分析

内容概要:本文深入浅出地介绍了继电器的工作原理、核心结构、分类、常见应用场景及选型要点。继电器是一种利用小电流控制大电流的“自动开关”,通过线圈通电产生磁场,驱动衔铁吸合或释放,从而控制触点的通断。文章详细解析了其五大组成部分(线圈、铁芯、衔铁、弹簧、触点)和工作三步循环过程,强调了强弱电隔离的优势,并区分了常开、常闭和转换型触点的应用。同时,文章列举了继电器在工业控制、汽车电子、家用电器、新能源和电力系统中的典型应用,重点指出高压直流继电器在新能源汽车中的关键作用。针对选型,强调需根据负载类型(阻性、感性、容性)进行降额使用,并介绍续流二极管、RC吸收电路等保护措施以延长寿命。最后对比了电磁继电器与固态继电器的优缺点,帮助读者合理选择。; 适合人群:具备基础电工知识,从事电子、电气、自动化相关工作的技术人员或爱好者,以及工科类学生。; 使用场景及目标:①理解继电器在电路控制中的隔离与放大作用;②掌握继电器的选型方法与常见故障排查技巧;③应用于实际项目中如电机控制、电源管理、自动化系统设计等; 阅读建议:结合实物或电路图对照学习,重点关注触点保护与负载匹配部分,在实际应用中注意降额设计与环境因素影响。

智算中心AI大模型赋能智能体平台及AI场景应用规划方案(决策评审版).pptx

智算中心AI大模型赋能智能体平台及AI场景应用规划方案(决策评审版).pptx

Orale EBS R12 AP应付模块 发票导入接口(Interface)

ap_interface_groups_s.nextval; ap_invoices_interface_s.nextval; ap_invoice_lines_interface_s.nextval; SELECT * FROM ap_invoices_interface ih; SELECT * FROM ap_invoice_lines_interface il; SELECT * FROM...

qq_41206741的博客 3320
上一篇: Flash与3D编程探秘(一)- Flash与3D空间
下一篇: Flash与3D编程探秘(三)- 摄像机(Camera)
coding_most
博客等级 码龄15年 13粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值