Flash与3D编程探秘(五)- 摄像机旋转和移动

【flash】pv3d制作3d模型查看器 禁止转载 禁止转载 禁止转载 禁止转载 不知道为什么开发flash 的好像特别少,这里用到的是pv3d引擎 1.引擎的导入 首先要下载下来然后放到一个文件夹里。新建一个flash 至于为什么要插入这个地址我也很懵,不过如果把pv3d的文件夹用src文件夹包裹起来,然后写相对路径也是可以的。 把关联加进来之后就可以用pv3d 的数据 阅读详情

上一篇讨论了关于旋转摄像机的一些基础知识,在这篇文章中我将介绍如何在程序中使用这些知识定点旋转摄像机,以及把移动和旋转摄像机结合在一起。当只运用旋转摄像机时,在屏幕上看到物体围绕着摄像机旋转,动画并不是那么的"3D",不过这个是必经之路,等你完全的明白了旋转这个概念后,再添加上摄像机在3D空间移动,那样你就不会觉得乏味了。首先来看一个定点旋转摄像机的例子当作热身。这个例子,还是使用我们的小P,不过是很多的小P,这样使的场景看起来更加的有层次感。运行程序(效果如下),所有的物体都在围绕摄像机旋转,我想你会有摄像机在不停的旋转的错觉(或者没有...)。

 


定点旋转摄像机

动画制作步骤:

1. 一开始还是一些老步骤,设定原点,建立一个舞台,还有定义摄像机,这些都是前几篇所讨论过的,就不再过多解释了。

<!--

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

--> //  same as usual
var origin  =   new  Object();
origin.x 
=  stage.stageWidth / 2 ;
origin.y 
=  stage.stageHeight / 2 ;
origin.z 
=   0 ;

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

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

var focal_length 
=   300 ;


2. 下面定义一些常量,比如物体的总数量,PI和物体z间距。

<!--

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

--> //  constants
var MAX_OBJ  =   100 ;
var PI 
=   3.1415926535897932384626433832795 ;
var DISTANCE_Z 
=   20 ;                 //  the distance to your camera

 

3. 下面是初始化所有的物体,运用随机数产生小P所在的角度(对于摄像机),递增小P所在点到摄像机的距离(3D空间的),使用三角函数就可以得到小P的x和z,同样使用随机数产生它的y,最后把它添加到舞台上。

<!--

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

--> //  now create lots of balls around your camera
for  (var i  =   0 ; i  <  MAX_OBJ; i ++ )
{
    var ball 
=   new  Sphere();
    ball.angle 
=  Math.random() * ( 0 - PI * 2 )  +  PI * 2 ;            //  this is the rotate angle on the xz plane
    ball.dist_center  =   140   +  (MAX_OBJ - i) *  DISTANCE;     //  the distance to your camera
    ball.x_3d  =  Math.cos(ball.angle)  *  ball.dist_center;     //  then we use trig to get x
    ball.z_3d  =  Math.sin(ball.angle)  *  ball.dist_center;     //  and z
    ball.y_3d  =  Math.random() * ( - 240 - 240 )  +   240 ;          //  now put the ball at random y
    scene.addChild(ball);                                            //  add the ball to the collection
}

 

4. 对于每一个物体,在摄像机转动角度时刷新它的大小和位置。于是下一步写一个函数来达到目的,首先要确定小P相对于摄像机的旋转角度。然后根据这个角度和摄像机和小P之间的垂直距离,算出它到摄像机的x,z和y的距离。最后,还是运用之前学过的算法,缩放和移动物体。

<!--

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

--> //  update ball size and position
function update(obj)
{
    
//  get the angle relative to your camera panning angle
    var angle  =  obj.angle  -  camera.panning;
    var x_pos 
=  Math.cos(angle) * obj.dist_center  -  camera.x;         //  use trig calculate the x
    var z_pos  =  Math.sin(angle) * obj.dist_center  -  camera.z;         //  and z
    var y_pos  =  obj.y_3d  -  camera.y;                       //  calculate the relative y
    
    
if  (z_pos  >   0 )                                                  //  if the ball isin front of the camera
    {
        
if  ( ! obj.visible)                                
            obj.visible 
=   true ;                                     //  make the ball visible anyway
            
        var scale 
=  focal_length / (focal_length + z_pos);      //  cal the scale of the ball
        obj.x  =  x_pos * scale;                              //  calcualte the x position in a camera view 
        obj.y  =  y_pos * scale;                             //  and y position
        obj.scaleX  =  obj.scaleY  =  scale;              //  scale the ball to a proper state
    }
    
else
    {
        obj.visible 
=   false ;
    }
}

 

5. 写一个循环函数,在每一次执行时,递增摄像机的角度,并且刷新舞台上的所有的物体。

<!--

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

--> function run(e:Event)
{
    camera.panning 
+=   0.01 ;                           //  increase the panning angle
    
    
if  (camera.panning  >   2 * PI)
        camera.panning 
-=   2 * PI;
    
if  (camera.panning  <   - 1 * 2 * PI)
        camera.panning 
+=   2 * PI;
    
    
for  (var i  =   0 ; i  <  scene.numChildren; i ++ )     //  update all the balls on the screen
    {
        update(scene.getChildAt(i));
    }
}

//  add loop event listener

this.addEventListener(Event.ENTER_FRAME, run);

 

注意:

这里提到的旋转,都是在保持y不变的情况下,横向旋转摄像机,换句话说,让摄像机绕着y轴旋转,当然同理也可以写出摄像机围绕着x轴旋转的函数。不过如何同时进行上述两种旋转,我将在后面的文章里进行介绍。


移动和旋转的组合
现在你已经知道如何横向旋转摄像机,同时前几篇文章中也已经介绍了如何移动摄像机,如果把这两个操作结合在一起,那一定很棒。我想你应该觉得不会很 困难,因为前面已经把两个分开操作学会了,下面所要做的只是把这两种操作组合在一起。来看一个动画,其中发灰的摄像机是运动前的位置,另外一个是向后(沿摄像机镜头的反方向)移动后位置(当摄像机镜头垂直向上看得时候移动得到),从动画中可以看到,对于摄像机镜头来说,景物的位置是不一样的。


移动加旋转摄像机


再来看一个图例,在这个图片中,摄像机沿BO方向向后移动,我们可以看出,摄像机的转角是不变的。那么就可以结合摄像机移动的位置和三角函数就可以算出它的x移动量(图中红色实线)和y移动量(图中蓝色实线),进而便可以算出对于移动后摄像机而言,小P的x和y。

 

移动和旋转角度的图解

 

需要注意的是,当你首先旋转摄像机,然后向后或者向前移动摄像机,那么摄像机是沿着摄像机旋转过后的角度运动的,至于移动量和物体到现在摄像机的距离,一样可以使用三角函数得到(三角函数!Nice!)。下面就看一个应用的例子:

 



定点旋转摄像机,WS前后移动摄像机,AD旋转



动画制作步骤:

1. 重复前面的3步。

<!--

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

--> //  constants
var MAX_OBJ  =   100 ;
var PI 
=   3.1415926535897932384626433832795 ;
var DISTANCE_Z 
=   20 ;                                                 //  the z distance to your camera

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

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

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

var movement 
=   0 ;

var focal_length 
=   300 ;

var pan_left;
var pan_right;
var move_forward;
var move_backward;

//  now create lots of balls around your camera
for  (var i  =   0 ; i  <  MAX_OBJ; i ++ )
{
    var ball 
=   new  Sphere();
    ball.angle 
=  Math.random() * ( 0 - PI * 2 )  +  PI * 2 ;                //  this is the rotate angle on the xz plane
    ball.dist_center  =  (MAX_OBJ - i) *  DISTANCE_Z;              //  the z distance to your camera
    ball.x_3d  =  Math.cos(ball.angle)  *  ball.dist_center;         //  then we use trig to get x
    ball.z_3d  =  Math.sin(ball.angle)  *  ball.dist_center;         //  and z
    ball.y_3d  =  Math.random() * ( - 300 - 300 )  +   300 ;              //  now put the ball at random y
    scene.addChild(ball);                                                //  add the ball to the collection
}

 

2. 下面这个函数是和上面例子中不同的主要部分。首先要得到物体和摄像机的x,y和z距离,然后使用反三角函数就可以得出物体所在的角度,同时使用勾股定理得到物体和摄像机的距离(注意y距离为0),同理使用三角函数便可以得到在摄像机移动之后物体的x和z。然后再根据物体的x和z对物体进行2D空间的缩放和移动。

<!--

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

--> //  update ball size and position
function display(obj)
{
    var x_pos 
=  obj.x_3d  -  camera.x;             //  calculate the x distance from obbject to the camera
    var y_pos  =  obj.y_3d  -  camera.y;             //  and y distance
    var z_pos  =  obj.z_3d  -  camera.z;             //  and z distance
    
    var angle 
=  Math.atan2(z_pos, x_pos);                     //  caculate the relative angle
    
//  now get the actual object radius around camera
    var radius  =  Math.sqrt(z_pos * z_pos  +  x_pos * x_pos);
    
    x_pos 
=  Math.cos(angle + camera.panning) * radius;     //  get the x position after panning
    z_pos  =  Math.sin(angle + camera.panning) * radius;     //  and y position
    
    
if  (z_pos  >   0 )                                                    //  if the ball isin front of the camera
    {
        
if  ( ! obj.visible)                                
            obj.visible 
=   true ;                                      //  make the ball visible anyway
            
        var scale 
=  focal_length / (focal_length + z_pos);  //  cal the scale of the ball
        obj.x  =  x_pos * scale;                                     //  calcualte the x position in a camera view 
        obj.y  =  y_pos * scale;                                     //  and y position
        obj.scaleX  =  obj.scaleY  =  scale;                     //  scale the ball to a proper state
    }
    
else
    {
        obj.visible 
=   false ;
    }
    
    txt_z.text 
=   int (camera.z) + "" ;
    txt_panning.text 
=  Number(camera.panning * ( 180 / Math.PI)).toFixed( 1 )  +   "" ;
}

 

3. 写一个循环函数,在每一次执行时刷新舞台上的所有的物体。

<!--

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

--> function run(e:Event)
{
    
if  (camera.panning  >   2 * PI)
        camera.panning 
-=   2 * PI;
    
if  (camera.panning  <   - 1 * 2 * PI)
        camera.panning 
+=   2 * PI;
    
    
for  (var i  =   0 ; i  <  scene.numChildren; i ++ )                     //  update all the balls on the screen
    {
        display(scene.getChildAt(i));
    }
}

 

4. 下面设置一些键盘相应事件,使用WS可以使摄像机前进和后退,AD旋转摄像机。键盘事件在前面提到过,就不多说了,如果有什么问题的话可以查看一下前面的例子。
<!--

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

--> function run(e:Event)
{
    
if  (camera.panning  >   2 * PI)
        camera.panning 
-=   2 * PI;
    
if  (camera.panning  <   - 1 * 2 * PI)
        camera.panning 
+=   2 * PI;
    
    
for  (var i  =   0 ; i  <  scene.numChildren; i ++ )             //  update all the balls on the screen
    {
        display(scene.getChildAt(i));
    }
}

function key_down(e:KeyboardEvent):
void
{
    
if  (e.keyCode  ==   65 )
        pan_left 
=   true ;
    
if  (e.keyCode  ==   68 )
        pan_right 
=   true ;
    
if  (e.keyCode  ==   87 )
        move_forward 
=   true ;
    
if  (e.keyCode  ==   83 )
        move_backward 
=   true ;
}
function key_up(e:KeyboardEvent):
void
{
    
if  (e.keyCode  ==   65 )
        pan_left 
=   false ;
    
if  (e.keyCode  ==   68 )
        pan_right 
=   false ;
    
if  (e.keyCode  ==   87 )
        move_forward 
=   false ;
    
if  (e.keyCode  ==   83 )
        move_backward 
=   false ;
}
function key_response(e:Event):
void
{
    
if  (pan_left)
        camera.panning 
+=   0.015 ;                     //  increase the panning angle
     if  (pan_right)
        camera.panning 
-=   0.015 ;                     //  decrease the panning angle
     if  (move_forward)
    {
        movement 
=   20 ;
    }
    
if  (move_backward)
    {
        movement 
=   - 20 ;
    }
    
if  (move_forward  ||  move_backward)
    {
        camera.x 
+=  Math.sin(camera.panning) * movement;
        camera.z 
+=  Math.cos(camera.panning) * movement;
    }
}

//  add loop event listener
this .addEventListener(Event.ENTER_FRAME, run);
this .addEventListener(Event.ENTER_FRAME, key_response);
stage.addEventListener(KeyboardEvent.KEY_DOWN, key_down);
stage.addEventListener(KeyboardEvent.KEY_UP, key_up);

 

 

基本的阴影效果

当舞台上的物体非常多的时候,我们希望能够让物体层次分明。你应该还记得第一篇文章里是怎样给物体加上层次感的,是根据物体在舞台上的z来进行排序,离摄像机最近的物体的层次就最高。当然还有其他的技巧还给物体添加层次感,比如可以利用阴影效果来给舞台上的物体加上层次感,还比如可以利用光源,日出日落等等因素给物体分层次,使场景变得更真实。光源这个课题相对来说比较复杂,需要加进大量的数学运算,将在后面的物体篇介绍。在这篇文章里,我将给你介绍如何在3D空间里使用简单雾的效果。


雾影效果

 

制作步骤

下面把前面的旋转摄像机的例子加工一下来达成雾影效果。添加雾的原理是这样的,离摄像机越远的物体,那么它的亮度就越大(因为场景是白色),大部分步骤都是和这篇文章的第一个例子的相同,只需要在每一次刷新物体缩放和位置的函数里添加如下代码。首先求出物体和摄像机的z距离,然后算出物体RGB的值,并对物体着色。非常的简单,就把这个例子当作是小练习。

<!--

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

--> var tint  =   Math.min(z_pos / 5 ,  255 );
var color_trans:ColorTransform 
=   new  ColorTransform();
color_trans.redOffset 
=  tint;
color_trans.greenOffset 
=  tint;
color_trans.blueOffset 
=  tint;
obj.transform.colorTransform 
=  color_trans;

 

注意:
在这两个些例子里,并没有涉及到物体层次,你在开发的时候,最好加上一个层次排序。这个算法在第一篇文章里就已经实现,你可以试着把那个函数添加到这两个例子里。

建议:

在开发的时候,我建议你使用面向对象的书写方式,这样便于你的管理。我一直没有使用OO的写法,是因为我不想给读者的阅读造成不必要的困惑,你可以试着把例子中的代码写成类,然后从.fla文件调用。例如你可以把例子中的小P写成一个类,它可以具有x_3d,y_3d,z_3d等属性。

 

上一篇          目录          下一篇

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

作者:Yang Zhou
出处:http://yangzhou1030.cnblogs.com
本文版权归作者和博客园共有,转载未经作者同意必须保留此段声明。请在文章页面明显位置给出原文连接,作者保留追究法律责任的权利。
Papervision3D:使用Flash创建交互式3D图形 本文还有配套的精品资源,点击获取 简介:Papervision3D是一个基于Flash的开源3D引擎,利用ActionScript 3.0和Adobe Flash Player编程接口实现高性能3D渲染。本文深入探讨了Papervision3D的核心概念、主要功能,以及如何利用它进行3D游戏开发。通过学习其场景管理、摄像机、对象、光源和材质等概念,开发者能够构建模块化的3D... 阅读详情

相关推荐

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

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

weixin_42298254的博客 1245

Flash游戏制作-场景移动之三

前两篇文章写的是一些关于键盘控制场景移动,有人问我用鼠标怎么控制场景的移动呢?有于前段时间没时间写,所以一直拖到现在。好了,废话就不多说了,关于鼠标控制场景我会分几篇文章来讲述。每篇文章都实现一种不同的控制方式,让大家尽可能地接触所有的方式,现在这篇文章要写的是用鼠标的方式来实现像《场景移动之一》文章中所述的那种方式。     用鼠标来控制场景要解决的问题有以下几个:    1.获取鼠标点击的

vim部落 907

大疆 DJI Mobile SDK实战指南——从零构建Android示例开发环境

本文提供了一份详尽的DJI Mobile SDK Android开发环境搭建实战指南。文章手把手教你从注册开发者账号、获取App Key,到配置Android Studio、下载官方示例代码,最终成功运行DJI官方Android示例程序,帮助开发者快速入门无人机应用开发,避开常见编译与依赖问题。

weixin_29188043的博客 275

as3摄像机旋转和移动

上一篇讨论了关于旋转摄像机的一些基础知识,在这篇文章中我将介绍如何在程序中使用这些知识定点旋转摄像机,以及把移动和旋转摄像机结合在一起。当 只运用旋转摄像机时,在屏幕上看到物体围绕着摄像机旋转,动画并不是那么的”3D”,不过这个是必经之路,等你完全的明白了旋转这个概念后,再添加上摄像 机在3D空间移动,那样你就不会觉得乏味了。首先来看一个定点旋转摄像机的例子当作热身。这个例子,还是使用我们的小P,...

weixin_34186931的博客 189

Windows本地化部署Dify完整指南

本文详细介绍了在Windows系统上本地化部署Dify的完整步骤,涵盖了Docker Desktop的安装与配置、Dify源代码的获取、环境变量的设置、服务的启动与管理、以及常见问题的解决方案。文章首先指导用户如何下载和安装Docker Desktop,并配置WSL 2功能。接着,详细说明了如何获取Dify源代码,并通过Docker Compose启动服务。文章还提供了高级配置指南,包括如何配置大语言模型和更新Dify版本。最后,针对Docker镜像拉取失败等常见问题,提供了详细的诊断和解决方案。通过本文,

jacky_zhuyuanlu的博客 1万+

从LLaMA到LLaMA-MoE:轻量级混合专家模型构建与实战指南

混合专家(Mixture-of-Experts, MoE)是一种先进的神经网络架构,其核心原理是通过门控网络动态地为不同输入选择不同的专家子网络进行计算,从而实现模型容量的指数级扩展,同时保持推理时的计算量基本不变。这种稀疏激活的特性赋予了MoE极高的技术价值,使其成为解决大模型训练与推理成本矛盾的关键技术之一,在自然语言处理、多模态学习等场景中展现出巨大潜力。本文聚焦于**LLaMA-MoE**这一具体实践,深入探讨了如何基于成熟的稠密模型(如LLaMA),通过**专家构建**与**持续预训练**两大关键

weixin_28730549的博客 567

flash操作摄像头2

因为很久不做 Flash coding 了,所以也就很少关心 Flash 8 的新的 Class,但听大家说过有这个功能。本想从网上找段教程或 code 来做。可是发现国内还没有类似的。就只能自己动手丰衣足食了。 本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系。   开始做法: 。   第一步:在库中建立一个视频元件,类型选择:视频(受 ActionScript 控制)...

baile8410的博客 280

MacBook用户必看:用Homebrew一键搞定frp内网穿透(含阿里云配置模板)

本文为MacBook用户提供基于Homebrew的frp内网穿透实战指南,详细介绍了从环境准备到阿里云服务器配置的全过程。通过Homebrew一键安装frp客户端,结合阿里云配置模板,实现高效稳定的内网穿透,适用于远程开发、IoT设备调试等多种场景。

weixin_28692817的博客 322

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

@import url(http://www.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); 日期:2008年11月 从这篇文章开始,我将开始介绍3D物体及其在空间中运动和交互。这里提到的物体是指单个的实体,比如银河系中的一颗恒星,那么空间就...

weixin_30338461的博客 164

用ADS复现一篇MTT顶刊的GAN功率放大器:从理论推导到版图仿真的完整避坑指南

本文详细解析了如何利用ADS软件复现MTT顶刊中的E/F3类GaN功率放大器设计,从理论推导到版图仿真的全流程。通过核心设计理念解析、ADS环境配置、输出匹配网络优化等关键步骤,提供了一套完整的工程实践指南,帮助工程师跨越学术理论与实际应用的鸿沟,实现高效率射频功率放大器的设计。

weixin_30654583的博客 315

Silvaco 学习笔记——物理模型:载流子产生复合模型

对载流子的复合机制进行总结

reactortiger的博客 1万+

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

基于虚拟阻抗重塑的构网型VSG变流器SISO序阻抗建模与宽频振荡抑制策略分析(面向高比例新能源并网场景)

本文深入探讨了基于虚拟阻抗控制的构网型VSG变流器SISO序阻抗建模技术及其在高比例新能源并网场景中的宽频振荡抑制策略。通过虚拟阻抗重塑,有效改善了变流器的阻抗特性,解决了次/超同步频段的振荡问题,并提供了参数设计、阻抗扫频验证等实用技巧,为新能源并网系统的稳定性提供了可靠解决方案。

weixin_29268385的博客 253

Flash与3D编程探秘(六)- 全方位旋转摄像机

前面讨论过了如何横向旋转和移动摄像机,希望你已经完全理解,因为本文中的内容紧接着上一篇。回想一下,在前面制做的动画中,摄像机的旋转一直是围绕着y轴(竖直向上的轴)旋转,然而现实中我们可以上下旋转摄像机,甚至可以把摄像机倾斜一定角度,这就提醒了大家还需要更深入的研究旋转这个课题。下

roadProgram的专栏 986

【Zabbix实战之部署篇】Docker部署Zabbix+grafana监控平台

【Zabbix实战之部署篇】docker部署Zabbix+grafana监控平台

jks212454的博客 2581

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

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

weixin_30838921的博客 130

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Flash与3D编程探秘(四)- 摄像机旋转基础知识

关于三角函数 现在已经把最基本的移动摄像机技巧介绍完了,并且我相信上篇的几个例子也应该让读者加深了印象。可是你会发现前面我们只是把摄像机沿着x轴,y轴或者z轴移动摄像机,可是实际中可以把摄像机向左,向右,向上或者向下旋转一定的角度,这样在观看空间时就有更大的自由度。 不过

roadProgram的专栏 907

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

用ActionScript在Flash中实现3D视角的控制

本文来自:9RIAFlash CS4专业版的3D能力允许我们进行变焦和透视角度的改变,而且他的强大3D处理数学函数让它在3D场景的内外导航起来更加简单。现在游戏开发者和动画家们能够轻而易举的导入三维视图和运动效果了。这个教程探讨的两种改变舞台显示效果的方法通过移动和变焦改变观察点在三维空间里移动对象本身移动观测角度是非常简单的,用起来就好像是

lihe111的专栏 2266

Flash 3D引擎(Sandy3D)应用指南 3——使用摄像机。

原文地址:http://www.flashsandy.org/tutorials/3.0/sandy_cs3_tut03 这个指南的目标在这个指南中,我们将学习Camera3D对象的使用,在之前的指南里,我们只是使用摄像机作为整个场景的观察点,但从来没有真正使用过它,就连访问它的属性和方法都没有。 Camera3D 就像是一个静态对象——我们可以对它进行移动、旋转、滚动、倾斜。

民工 1750

【学习笔记】3D图形核心基础精炼版-7:stage3D实战-范例工程1

之前说的都是理论和代码片段,这里实际我们制作一个工程:涉及到顶点、顶点缓冲、顶点颜色、绘制、状态机、Shader等等综合的知识组合成一个3D世界。 这里就简单的绘制一个正方形(也就是只有一个面),用WASD操控镜头移动,上下左右操控物体移动,鼠标拖动操作物体旋转。 链接:http://pan.baidu.com/s/1jHECRau 密码:z73x 代码贴出: package {

kdsrpg的专栏 2916

Flash 3D引擎(Sandy3D)应用指南 4——在3D场景中移动物品。

  原文地址:http://www.flashsandy.org/tutorials/3.0/sandy_cs3_tut04 本指南的目标在这里,我们将学到怎么去移动物品。在之前的指南中,我们看到怎么去移动摄像机实现物品移动的效果。但这些物品实际上依然放在它们原来的位置。我们现在想移动这些物品! 你可以在屏幕上移动一个物品或一组包含一个或多个对象的物品。要移动一个对象,你首

民工 2141

away3d 4.0.9Gold 学习笔记 摄像机与摄像机控制器(7)

View3D在初始化时候就已经创建的Camera3D所以有时候我们没有创建Camera3D但我们依然可以看到3D场景。 Camera3D的默认初始位置在x:0,y:0,z:-1000。 Camera本身属性较多。我列举一些比较常用的。camea.lookAt(new Vector3D).这个是让摄像机指着某点。即便摄像机移动中。也会一直指着此点。camera.roll(angle)摄像机绕绿色...

weixin_34217711的博客 150

Flash 3D 基础

原文:http://www.flashmagazine.com/Tutorials/detail/flash_3d_basics/ 这篇文章是为那些新接触到3 d电脑图形。它将向您介绍术语使用并将解释3 d在Flash里运行。如果你不知道网格,纹理或材质,本教程将向您介绍如何使用Flash 3 d引擎诸如Papervision3D、Away3D和Sandy。本教程不需要编程知识,因为它只涵盖

飞扬小阁 1130
上一篇: Flash与3D编程探秘(四)- 摄像机旋转基础知识
下一篇: Flash与3D编程探秘(六)- 全方位旋转摄像机
coding_most
博客等级 码龄15年 13粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值