Flash与3D编程探秘(七)- 3D物体框架

FlashIDE+AirSDK,Window开发环境搭建 FlashIDE+AirSDK,Window开发环境搭建Windows10+FlashCS6+AirSDK+JavaJDK,步骤如下: 安装JavaJDK,配置系统环境变量 测试Java是否安装正确 安装FlashIDE,建议CS5.5以上版本(自带AirSDK版本) 下载稳定的Air SDK,最新版本可能会有BUG 配置SDK路径,模拟器测试 打包测试 安装JavaJDK 在oracle官网下 阅读详情

从这篇文章开始,我将开始介绍3D物体及其在空间中运动和交互。这里提到的物体是指单个的实体,比如银河系中的一颗恒星,那么空间就是银河系了。不过,所有的一切都是相对的,当一个分子作为例子中的实体的时候,那么一个细胞也可以作为3D的空间来看待(一个细胞是由很多的分子组成),同理你可以知道细胞相对于一个生物(空间)来说也是一个物体。有些说多了,不过我想让你明白,我们用程序模拟一只小狗,或者一个人作为一个整体,但是不可能完全真实的模拟它。因为,人体由数不清的细胞组成,每一个细胞都是一个物体,做着自己的运动,除非使用计算机真实模拟着人体的每一个细胞以及它的运动,否则永远不可能得到一个真实模拟的人。但是使用现代的计算机科技是不可能模拟组成人体的所有细胞,那就更不用说组成每个细胞的分子。

 

还是言归正传来看一个3D物体的例子,这也是第一个绘制一个3D物体的例子。这个程序里,创建一个正方体并且让它围绕着正方体的对角线交点自转,不过这个正方体还是由8个好朋友小P组成,每个顶点站一个,由它们来勾勒这个正方体的框架。



一个小P组成的正方体,鼠标掠过开始旋转

 

动画制作步骤

1. 首先在Flash IDE里绘制一个物体小P。

2. 开始设置还是和以前一样,原点,摄像机,焦距等等,另外不要忘记创建一个旋转角度object,存放物体在x,y和z轴的旋转角度变量。

<!--

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

--> //  constants
var PI  =   3.1415926535897932384626433832795 ;

//  origin is the center of the view point in 3d space
//  everything scale around this point
//  these lines of code will shift 3d space origin to the center
var origin  =   new  Object();
origin.x 
=  stage.stageWidth / 2 ;
origin.y 
=  stage.stageHeight / 2 ;
origin.z 
=   0 ;

//  focal length of viewer's camera
var focal_length  =   300 ;

//  now create a scene object to hold the spinning box
var scene  =   new  Sprite();
scene.x 
=  origin.x;
scene.y 
=  origin.y
this .addChild(scene);

var axis_rotation 
=   new  Object();
axis_rotation.x 
=   0 ;
axis_rotation.y 
=   0 ;
axis_rotation.z 
=   0 ;

var camera 
=   new  Object();
camera.x 
=   0 ;
camera.y 
=   0 ;
camera.z 
=   0 ;

 

 

3. 写一个函数,用它来创建空间中的一个点,scale_point代表这个点在投射到2D平面上后位置缩放的比率。

<!--

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

--> //  this function construct a 3d vertex
function vertex3d(x, y, z, scale  =   1 ):Object
{
    var point3d 
=   new  Object();
    point3d.x 
=  x;
    point3d.y 
=  y;
    point3d.z 
=  z;
    point3d.scale_point 
=  scale;
    
return  point3d;
}

 

4. 下面发挥一下你的空间想象力,使用第3步的函数创建正方体的8个顶点,并且把它们添加到一个数组里。

<!--

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

--> //  we calculate all the vertex
var len  =   50 ;                     //  half of the cube width
//  now create the vertexes for the cube
var points  =  [
                
//         x        y        z
                vertex3d( - len,     - len,      - len),             //  rear upper left
                vertex3d(len,     - len,      - len),             //  rear upper right
                vertex3d(len,     - len,     len),             //  front upper right
                vertex3d( - len,     - len,     len),             //  front upper left
                
                vertex3d(
- len,    len,      - len),             //  rear lower left
                vertex3d(len,    len,      - len),             //  rear lower right
                vertex3d(len,    len,     len),             //  front lower right
                vertex3d( - len,    len,     len),             //  front lower left
            ];

 

5. 初始化8个小P,并且把它们放在8个顶点(映射到xy轴上的点)所在的x和y位置。

<!--

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

--> //  init balls and put them on the screen
for  (var i  =   0 ; i  <  points.length; i ++ )
{
    var ball 
=   new  Sphere();
    ball.x 
=  points[i].x;
    ball.y 
=  points[i].y;
    ball.z 
=   0 ;
    scene.addChild(ball);
}

 

6. 这个函数你在摄像机空间旋转一篇文章中应该见过,函数的功能是把3D空间的点,映射到2D平面xy上。函数执行的步骤是这样的:

    a) 提前计算出x,y和z旋转角度的正余弦值。
    b) 使用for loop遍历物体所有的顶点。
    c) 使用计算出的正余弦和三角函数对三个轴的旋转分别进行计算,得出旋转后顶点的x,y和z。
    d) 然后计算出物体在2D平面上映射后的x和y值。
    e) 并且把这些2D点添加到一个新的数组里。

    f) 最后返回这个数组。

<!--

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

--> function project_pts(points)
{
    var projected 
=  [];
    
//  declare some variable for saving function call
    var sin_x  =  Math.sin(axis_rotation.x);
    var cos_x 
=  Math.cos(axis_rotation.x);
    var sin_y 
=  Math.sin(axis_rotation.y);
    var cos_y 
=  Math.cos(axis_rotation.y);
    var sin_z 
=  Math.sin(axis_rotation.z);
    var cos_z 
=  Math.cos(axis_rotation.z);
    
    var x, y, z,                
//  3d x, y, z
        xy, xz,             //  rotate about x axis
        yx, yz,             //  rotate about y axis
        zx, zy,             //  rotate about z axis
        scale;             //  2d scale transform
    
    
for  (var i  =   0 ; i  <  points.length; i ++ )
    {
        x 
=  points[i].x;
        y 
=  points[i].y;
        z 
=  points[i].z;
        
        
//  here is the theroy:
        
//  suppose a is the current angle, based on given current_x, current_y on a plane
        
//  (can be x, y plane, or y, z plane or z, x plane), rotate angle b
        
//  then the new x would be radius*cos(a+b) and y would be  radius*sin(a+b)
        
//  radius*cos(a+b) = radius*cos(a)*cos(b) - radius*sin(a)*sin(b)
        
//  radius*sin(a+b) = radius*sin(a)*cos(b) + radius*cos(a)*sin(b)

 

        //  rotate about x axis
        xy  =  cos_x * y  -  sin_x * z;
        xz 
=  sin_x * y  +  cos_x * z;
        
//  rotate about y axis
        yz  =  cos_y * xz  -  sin_y * x;
        yx 
=  sin_y * xz  +  cos_y * x;
        
//  rotate about z axis
        zx  =  cos_z * yx  -  sin_z * xy;
        zy 
=  sin_z * yx  +  cos_z * xy;
        
//  scale it
        scale  =  focal_length / (focal_length + yz - camera.z);
        x 
=  zx * scale  -  camera.x;                 //  get x position in the view of camera
        y  =  zy * scale  -  camera.y;                 //  get x position in the view of camera
        
        projected[i] 
=  vertex3d(x, y, yz, scale);
    }
    
return  projected;
}

 

 

这样就得到一个数组,包含所有需要的2D数据。并不困难,你完全可以把这一段代码叫做这个程序的3D引擎,它负责了所有点的数据在空间里旋转计算和输出。

 

7. 下面是动画执行的循环函数。需要注意的一点,在以后的文章中我都将使用基于时间的运动。在这里你只要知道下面的公式就可以了:旋转角度=角速度X时间。使用上面的公式,递增物体围绕y轴和x轴的旋转角度。然后使用第6步的函数计算所有的3D顶点旋转后的位置并且得到映射后的2D点。剩下你应该能想到,就是把相应的小P定位到这些定点上,并且对小球进行缩放比率scale_point,最后不要忘记对小P进行z排序。

<!--

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

--> function move(e:Event): void
{
    
//  well we use time based movement in this tutorial
    var current_time  =   new  Date().getTime();                 //  sampe the current time
    
//  increment the rotation around y axis
    axis_rotation.y  +=   0.0008 * (current_time - start_time);
    
//  increment the rotation around x axis
    axis_rotation.x  +=   0.0006 * (current_time - start_time);
    start_time 
=  current_time;                                 //  reset the start time
    
    var projected 
=  project_pts(points);         //  3d ponts to 2d transformation         
    
    
//  now we have all the data we need to position the balls
     for  (var i  =   0 ; i  <  scene.numChildren; i ++ )                 //  loop throught the scene
    {
        
//  positioning the ball
        scene.getChildAt(i).x  =  projected[i].x;
        scene.getChildAt(i).y 
=  projected[i].y;
        scene.getChildAt(i).z 
=  projected[i].z;
        scene.getChildAt(i).scaleX 
=  scene.getChildAt(i).scaleY  =  projected[i].scale_point;
    }
    
    swap_depth(scene);                
//  sort out the depth 
}

//  bubble sort algo
function swap_depth(container:Sprite)
{
    
for  (var i  =   0 ; i  <  container.numChildren  -   1 ; i ++ )
    {
        
for  (var j  =  container.numChildren  -   1 ; j  >   0 ; j -- )
        {
            
if  (Object(container.getChildAt(j - 1 )).z  <  Object(container.getChildAt(j)).z)
            {
                container.swapChildren(container.getChildAt(j
- 1 ), container.getChildAt(j));
            }
        }
    }
}

//  now add the event listener and spin the box
this .addEventListener(Event.ENTER_FRAME, move);

注意
例子中物体沿着x和y轴旋转,但是并没有添加z轴旋转,你可以自己添加上,看看有什么不同。
注意

例子中我们使用了两个for loop,第一次遍历所有的顶点把3D点转化为2D点,第二个把相应的小P定位到这些2D点的位置。虽然这样看起来会降低执行速度,但是这样会使程序的流程一目了然。如果你已经非常熟练,你可以试着修改这两个函数提高执行速度。

 

使用Flash绘制API

上面的例子看起来不错,不过只有顶点有小球,我们看起来还不满意,那么接下来做一个动态绘制的正方体。这个例子里,基本的框架并没有什么变化,正方体所有的边都是用Flash的moveTo()和lineTo()来绘制。那么我就把需要更改代码的地方解释一下。



一个正方体的框架,鼠标掠过开始旋转

 

制作步骤

1. 基本上的代码和前面是一样的,同样需要设置场景,创建正方体的顶点,注意不要再在舞台上添加小P。

2. 当把3D点映射到2D平面上后,使用黑线把正方体相邻的两个点连接起来。非常容易理解,不过注意,有很多种办法连接这些点,你可以先连接正方体顶面的点,然后底面的点,最后连接顶面和底面,不要局限于这几种,试着去发现新的方法,找到合适你思维方式的一种。

<!--

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

--> function move(e:Event): void
{
    
//  well we use time based movement in this tutorial
    var current_time  =   new  Date().getTime();                 //  sampe the current time
    
//  increment the rotation around y axis
    axis_rotation.y  +=   0.0008 * (current_time - start_time);
    
//  increment the rotation around x axis
    axis_rotation.x  +=   0.0006 * (current_time - start_time);
    start_time 
=  current_time;                             //  reset the start time
    
    var projected 
=  project_pts(points);         //  3d ponts to 2d transformation         
    
    
//  now we start drawing the cube
    with (scene.graphics)
    {
        clear();
        lineStyle(
0.5 ,  0x0F6F9F ,  1 );
        
//  top face
        moveTo(projected[ 0 ].x, projected[ 0 ].y);
        lineTo(projected[
1 ].x, projected[ 1 ].y);
        lineTo(projected[
2 ].x, projected[ 2 ].y);
        lineTo(projected[
3 ].x, projected[ 3 ].y);
        lineTo(projected[
0 ].x, projected[ 0 ].y);
        
//  bottom face
        moveTo(projected[ 4 ].x, projected[ 4 ].y);
        lineTo(projected[
5 ].x, projected[ 5 ].y);
        lineTo(projected[
6 ].x, projected[ 6 ].y);
        lineTo(projected[
7 ].x, projected[ 7 ].y);
        lineTo(projected[
4 ].x, projected[ 4 ].y);
        
//  vertical lines
        moveTo(projected[ 0 ].x, projected[ 0 ].y);
        lineTo(projected[
4 ].x, projected[ 4 ].y);
        moveTo(projected[
1 ].x, projected[ 1 ].y);
        lineTo(projected[
5 ].x, projected[ 5 ].y);
        moveTo(projected[
2 ].x, projected[ 2 ].y);
        lineTo(projected[
6 ].x, projected[ 6 ].y);
        moveTo(projected[
3 ].x, projected[ 3 ].y);
        lineTo(projected[
7 ].x, projected[ 7 ].y);
    }
}

 

 

3. 还有一个地方需要改动,因为不再对顶点的物体进行缩放,所以就必须要传递scale_point这个属性。

<!--

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

--> //  this function construct a 3d vertex
function vertex3d(x, y, z):Object
{
    var point3d 
=   new  Object();
    point3d.x 
=  x;
    point3d.y 
=  y;
    point3d.z 
=  z;
    
return  point3d;
}


建议

试着把上面的两种框架构建方式结合在一起,制作一个旋转的物体被线连着,试一试一条螺旋体的模型,或者如果你想增加难度的话,你还可以做一个DNA链。

 


DNA链

 

那么到目前为止,你已经知道如何使用框架构建一个方体,不过现实中物体总是有纹理和填充色的。你也许会想,使用Flash的beginFill()函数就可以给物体加上填充色了,这不是很简单。Hum,很接近不过如果要给物体上色的话,还有很多工作要做,后面的文章中将重点开始介绍着色筛选和相关内容。

 

关于Time Based和Frame Based运动

文章第一个例子中的制作步骤里,提到关于基于时间的运动公式(只要知道了物体运动的速度,那么根据牛顿第一运动定律就可以得出物体在某个时间点的位移):

<!--

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

--> 位移  =  时间 X 速度


回想一下,前面的几篇文章里使用的都是基于祯的运动,然而基于祯的运动是不稳定的,它的公式是:

<!--

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

--> 位移  =  执行次数 X 速度

 

基于祯的运动不管程序执行流逝了多少时间,只在function执行的时候给物体的x或者y加减一定的值。这种运动是不稳定的,所以我建议大家使用基于时间的运动,下面的两个动画分别用两种运动模式做成,点击一下动画就会在function执行时执行大量的junk运算,这时你就会看到两种运动的差异。而基于时间的运动中,当速度恒定时,物体会处在正确的位置;基于祯的运动,你就会看到物体运动慢下来很多, 并不能达到物体在某个时间点应该到达的位置。由于这个页面里还有另外3个使用大量CPU运算的动画,所以我把下面的动画移到另外一个页面了,点击这里到另外一个文章里查看下面的两个动画,如果感觉动画还是不够连贯的话,那么你可以下载这两个动画到本机察看。

 

上一篇          目录          下一篇


非常抱歉,文中暂时不提供源文件下载,如果你需要源文件,请来信或者留言给我。笔者利用工作之余写这些文章,付出了很多汗水,希望读者和转载者能够尊重作者的劳动。

作者:Yang Zhou
出处:http://yangzhou1030.cnblogs.com
本文版权归作者和博客园共有,转载未经作者同意必须保留此段声明。请在文章页面明显位置给出原文连接,作者保留追究法律责任的权利。
Scratch 之 3D 介绍及教程 简单来说,很多2维平面可以组成一个3维图形,而一个3维图形又可以分成很多2维平面。因此,“伪3D”,就是通过这样“堆叠 ”的方式制作出来的。3D 之所以会使我们觉得困难,是因为 Scratch 软件只有两个坐标轴,既:X轴、Y轴。在这里我讲一下,没有用过克隆的同学也没关系,照着做就行。想要理解“伪3D”,就必须得懂2维和3维。接下来,我们进行最重要的一步——“堆叠”。第二步,使用克隆体实现“堆叠”。掌握了“伪3D”的制作方法!没关系,我还有“真3D”。 阅读详情

相关推荐

从2D到3D:空间物体识别核心原理与工程落地全解析

计算机视觉旨在让机器理解并解释视觉世界,其核心任务之一是从二维图像中提取有意义的信息。传统方法依赖多视图几何和手工特征,而现代深度学习通过数据驱动的方式,让神经网络自动学习从像素到语义的映射。这项技术的核心价值在于赋予机器对三维空间的感知能力,是实现自动驾驶、机器人导航、增强现实等高级应用的基础。其中,空间物体识别作为关键技术,不仅需要识别物体类别,还需精确估计其在三维空间中的位置、尺寸和姿态。工程实践中,YOLO等高效检测框架与TensorRT等推理优化工具的结合,成为平衡速度与精度的关键。通过多传感器融

weixin_30435261的博客 678

【蓝小柠出品】Scratch中究竟如何实现3D

近日看到吧中对于Scratch中实现3D的方式有很多人在做研究,对此我发表一下我在研究3D时的一些成果,以供大家拓展思路。大家也可以点击底部阅读原文前往看我更多文章!基本思路首先必须明确...

IT_Scratch的博客 4734

Papervision3D:使用Flash创建交互式3D图形

本文还有配套的精品资源,点击获取 简介:Papervision3D是一个基于Flash的开源3D引擎,利用ActionScript 3.0和Adobe Flash Player编程接口实现高性能3D渲染。本文深入探讨了Papervision3D的核心概念、主要功能,以及如何利用它进行3D游戏开发。通过学习其场景管理、摄像机、对象、光源和材质等概念,开发者能够构建模块化的3D...

weixin_42610671的博客 916

Flash3D编程探秘- Flash与3D空间

Flash 和 3D空间第一件事情我想你知道的是,在Flash里,并不存在真正的3D,或者我应该说,Flash CS3并不支持3D绘制。我们所做的是运用Flash里的2D绘制方法去模拟3D绘制,Flash并不知道3D是什么也不知道如何去处理3D对象。但是好消息是所有的3D处理和3D计算都是建立在数学计算的基础上的,加上Flash知道如何的处理数学计算。太好了,这些工具足以使我们创造出自己的动画了。这并不是说Flash里的3D编程要简单,与其相反,如果你打算深入去探索的话你会发现你会进行很大一部分的Low l

august5291的博客 540

FLARE3D安装包详细指南:提升你的3D Flash体验

在计算机图形学领域,FLARE3D 是一颗冉冉升起的新星,它以其创新的技术和流畅的用户体验,迅速占据了3D应用市场的有利地位。FLARE3D 的起源可以追溯到2009年,当一群富有激情的开发者决心创造一个既快速又高效的3D内容创作工具。凭借对3D渲染技术的深入理解,他们打造了FLARE3D,旨在提供给设计师和开发者一个强大的平台,用以构建交互式3D内容。

weixin_42298254的博客 1245

FLASH AS3正方体动画

FLASH代码写的正方体图画 纯代码动画(很无聊的东西)

Flash与3D编程探秘(一)- Flash与3D空间

Flash 和 3D空间 第一件事情我想你知道的是,在Flash里,并不存在真正的3D,或者我应该说,Flash CS3并不支持3D绘制。我们所做的是运用Flash里的2D绘制方法去模拟3D绘制,Flash并不知道3D是什么也不知道如何去处理3D对象。但是好消息是所有的3D处理

roadProgram的专栏 982

3d引擎源代码

3d引擎源代码,简单易懂,源代码,功能强大,很好入门

StreamPETR:革命性3D物体检测框架快速入门指南

StreamPETR是ICCV 2023收录的创新3D物体检测框架,专注于探索以物体为中心的时间建模技术,为多视图3D物体检测提供高效解决方案。该框架在保持高精度的同时显著提升处理速度,是自动驾驶和机器人感知领域的突破性工具。 ## 🚀 什么是StreamPETR? StreamPETR(Streaming Perception Transformer)是一种基于Transformer架构的

gitblog_00654的博客 1094

Scratch 3D游戏大作:FPS 引擎2.0

共386个素材,20个角色,53段音频,6980行编程积木代码。 【WASD】移动,【鼠标】控制方向,【左键】射击,【滑轮】切换武器。【C】打开/关闭小地图。【N】放置敌人,【M】放置友军。 武器: 1-AK47 2-小刀 3-火箭筒 4-榴弹发射器 5-狙击枪(按F开/关镜,开镜后滑轮切换倍率) g-手榴弹 此后仍有作品或有趣游戏、爆笑作品,请关注原作者,且点赞加收藏,记得推荐好友。下载即可游玩,快来下载吧!五星好评可以私信我,免费送资源!快来评论吧!

深度学习分类任务中,正负样本比例失衡的5种实战解决方案(附代码)

本文深入探讨了深度学习分类任务中正负样本比例失衡的5种实战解决方案,包括智能采样技术、动态数据增强、损失函数工程、模型架构创新和训练策略优化。针对信用卡欺诈检测、医疗诊断等场景,提供了详细的代码实现和评估方法,帮助开发者有效解决样本不平衡问题,提升模型在真实场景中的表现。

h9j8k7l6m5n的博客 426

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

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

weixin_30838921的博客 130

stata:stata软件教程(人大十八讲)(1) 第一章 stata入门

第一章 stata入门1.1 安装1.2 启用和退出1.3 打开和查看数据1.4 寻求帮助与网络资源1.5 命令示例1.6 几个环境设置1.7 复习与练习1.8 附录 注:教材为:Stata 统计分析教程 stata软件教程(人大十八讲) 中国人民大学出版社 陈传波 1.1 安装 1.2 启用和退出 1.3 打开和查看数据 1.4 寻求帮助与网络资源 1.5 命令示例 1.6 几个环境设置 1.7 复习与练习 1.8 附录 ...

qq_47805483的博客 1万+

Flash与3D编程探秘(八)- 3D物体着色基础知识

@import url(http://www.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); @import url(http://www.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.cs...

weixin_30950607的博客 109

【迁移学习综述】

迁移学习的目标是将某个领域或任务上学习到的知识应用到不同的但相关的领域或问题中。迁移学习的研究来源于一个观测:人类可以将以前的学到的知识应用于解决新的问题,更快的解决问题或取得更好的效果。迁移学习被赋予这样一个任务:从以前的任务当中去学习知识(knowledge)或经验,并应用于新的任务当中。换句话说,迁移学习目的是从一个或多个源任务(source tasks)中抽取知识、经验,然后应用于一个目标领域(target domain)当中去。

afadgas的博客 4321

tanner2019安装教程

tanner2019安装教程 tanner安装包 软件由老师提供,但由于老师给的方法不知怎么回事无法使用就自己找了一些方法,本教程仅提供参考 链接:https://pan.baidu.com/s/1A2O6JuEF8YFbe8bPnD3J6w 提取码:ysif 复制这段内容后打开百度网盘手机App,操作更方便哦 安装过程 1.选择TannerTools_v2019.2-Win64.exe,进行安装。 2.选择安装产品 3.选择目标路径 4.确认安装 5.安装成功,退出。 获取许可过程 1.打开key压缩

weixin_47730560的博客 1万+

4 如何显示PV3D中的3D物体

如何显示PV3D中的3D物体 在PV3D中有四大核心类,分别是: Ø        Scene3D场景类。所有3D物体的容器,要想在Flash中显示,就必须将3D物体添加到场景中。 Ø        Viewport3D窗口类。它规定了摄像机能拍摄的范围,超出这个范围的3D物体将不会显示。同时摄像机将拍摄的物体映射到窗口中。 Ø        Camera3D摄像机类。拍摄场景中的3D物体

河职院杨浪 2486

WPS专业版自带字体

WPS专业版其中一个好处就是自带了部分有版权的字体,就算你安装了没买授权,他也会给你在系统里面安装上这些字体,至于没授权继续用合不合规我不知道。但是带来的实实在在的好处就是有些子他支持的全啊。 /usr/share/fonts/wps-office/FZWBK.TTF: 方正魏碑_GBK,FZWeiBei\-S03:style=Regular /usr/share/fonts/wps-office/FZFSK.TTF: 方正仿宋_GBK,FZFangSong\-Z02:style=Regular /us

chenqioulin的博客 5711

Flash 3D引擎Away3D完全指南:从零搭建你的第一个3D世界(入门必读)

Away3D 是一款免费开源的 Flash 3D 引擎,专为 Flash Player 11 的 Stage3D 硬件加速接口打造,让你在浏览器中就能构建真实的三维场景。本指南面向零基础新手,带你认识 Away3D Flash 3D 引擎的核心概念,并用不到 20 行代码搭建出你的第一个 3D 世界,最后附上功能地图与常见坑位提示,是入门必读的完整教程。 ## 一、认识 Away3D:免费开源的

gitblog_00003的博客 701

开心消消乐

1)当点击一个1时,该1变被反转为0,同时相邻的上、下、左、右,以及左上、左下、右上、右下8个方向的1(如果存在1)均会自动反转为0;2)进一步地,一个位置上的1被反转为0时,与其相邻的8个方向的1(如果存在1)均会自动反转为0;上述样例中,四个角上的1均在中间的1的相邻8个方向上,因此只需要点击一次即可。给定一个N行M列的二维矩阵,矩阵中每个位置的数字取值为0或1。在上述4 * 4的矩阵中,只需要点击2次,即可将所有的1进行消除。接下来N行表示矩阵的初始值,每行均为M个数,取值范围[0,1]

面试高手的博客 2732

无线充电Qi协议正向通信FSK的解调设计

常见的FSK解调方法是使用频率锁相环(PLL)来跟踪输入信号中的频率变化。PLL根据输入信号的频率变化来生成数字信号,从而实现FSK信号的解调。本文将详细介绍无线充电Qi协议正向通信FSK的解调设计,并提供相应的源代码。在上述示例代码中,我们首先定义了FSK解调的参数,包括采样率、载波频率、每个比特的持续时间和比特判定阈值。最后,通过比较滤波后的信号与比特判定阈值,我们将解调后的数字数据转换为0和1的序列。请注意,上述代码仅为示例,实际的解调设计可能需要根据具体的应用场景和系统要求进行调整和优化。

IunScala的博客 2445

Flash Stage3D 学习笔记(一)

本文参考来源: http://www.adobe.com/devnet/flashplayer/articles/how-stage3d-works.html http://www.ashan.org/post-267.html http://www.pixelbender.cn/?p=381   1.Stage3D简介 Stage3D是Adobe为了提高的Flash 3D应用程序渲染

myquark的专栏 2689

深入解析Linux驱动开发中的I2C时序及I2C高频面试题

在 I2C 通信中,主设备和从设备的角色有着明确的定义。主设备是发起通信的设备,它负责控制整个通信过程。主设备可以是微控制器、处理器等具有控制能力的设备。

大模型大数据攻城狮的专栏 2769
上一篇: Flash与3D编程探秘(六)- 全方位旋转摄像机
下一篇: Flash与3D编程探秘(八)- 3D物体着色基础知识
coding_most
博客等级 码龄15年 13粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值