快速导航:   教程资源  | 经典范例  | 友情链接  | 联系我们  | 官方微博
登陆 | 注册

 flash 3d 研究所
flash3d 研究所 pv3d 教程 研究所小贴士: 完美的旋转要用到痛苦的四元数










最近更新:
● wan925446570阁下在讨论区里 回复“怎么配置away3d 4.0运行环境啊?...”(15:12:45)
● wan925446570阁下在讨论区里 回复“怎么配置away3d 4.0运行环境啊?...”(10:01:38)
● DDM君阁下在讨论区里 回复“怎么配置away3d 4.0运行环境啊?...”(19:07:43)
浏览主题:Camera的问题?

Camera的问题?
中华 (2009-10-19 11:09:44)

当我旋转Camera或者对Camera进行位移;那么屏幕上的物体显示都会有变换;
但有一点我不明白,本质上是不是在对物体的点进行操作;Camera只是个概念的东西,并不像现实中的Camera那样,移动摄像机就是移动摄像机;移动物体就是移动物体;不知道是不是这样;请高手指点啊1





flash 3d 研究所
(2009-10-19 16:32:39)
Camera就是像现实中的那样啊,移动摄像机它的取景也变了,相应的传递给Renderer的数据也变了,因此渲染出来画面也就变了,当然,物体没变。
DDM的教程里有这个解释的。


flash 3d 研究所
(2009-10-19 16:39:16)
首先是有一个Scene来作为舞台,DisplayObject3D都按三维坐标放在这个舞台上,然后Camera在每帧把它所‘看’到的画面做成数据给Renderer,最后Renderer分析这些数据把图像渲染到Viewport上。


flash 3d 研究所
(2009-10-19 17:33:08)
是的,就像我回在中华君您另一篇贴子一样,camera只是个概念,不是真实的存在,就是对模型数据得变形而已。他模拟着各种不同的‘眼睛’看同一个模型(一组数据)的方法而已。

但如果你没有camera这个概念的话,形变物体就会真的把物体的数据改变掉,这个是不应该出现的,所以才有camera这个概念。

当然,‘物体向左移动10’和‘camera向右移动10’的显示结果是完全一样的,但概念不一样的。






flash 3d 研究所
(2009-10-20 02:28:56)
呵呵,谢谢各位给出指点,我后来在这个博客看了下http://www.cnblogs.com/yangzhou1030/archive/2008/10/30/1322592.html
摄像机的问题已经基本没有什么困扰了;说到底还是在转换底层的数据了;不过这个概念确实解决了不少问题;我以前经常是移动或者旋转物体了;但那样操作有一定的问题;但是摄像机却解决了那个问题;
最近一直很想研究3d引擎的东西,但是自己基础差,对OOP这种思维感觉有点复杂;原来也看了一些网上搜集的基础的东西,就是没有引擎这种的了,直接可以实现个简单图形的那种;在看下引擎的东西,感觉隐隐约约的能理解点,但是总感和自己掌握有点中间地带的空白;
看了一些引擎的类,自己英文也差,对这个引擎的架构不是很了解;在就是我总感觉有时候自己心中的一些难点一直在困扰着自己;身边也有一些引擎之类,其实这些是可以帮助自己解决心中的一些困惑的;就比如说摄像机的作用;不加摄像机与加摄像机的区别;加了到底有什么好处?我总需要一个理由来确认摄像机确实是个实实在在有用的东西后,我想我就自然而然的接受并理解了,但我发现自己对于引擎中大部分类还是不能理解;于此同时对于自己认识flash 3d来说面前有许多的问题点与迷惑却找不到解释;这就好像让我觉得问题与答案都很近;但也很远;
网上找了一些flash 3d方面的资料但是都太散了;更高级一点的就没有了;往往是能看到最基础的部分,也能看到成形的引擎;却不能找到基础与引擎之间的部分,感觉这块就是个断代;也许对高手来说理解力比较好,跳跃思维了,不过感觉像自己这种菜鸟,理解力太差,总觉得对于一些概念需要一点点的理解与渗透。
不知道研究所现在有没有对引擎的架构有个详细分析的中文资料的;比如从引擎大的框架来说;里面的几个类包都是有什么重要的作用;在构成一个在屏幕上显示的三维物体的过程中,各个类又是如何的协同运作的;
也许可以从建一个简单的盒子开始,首先当我们不用引擎时,也可以建一个盒子;在这个过程中,我们也会牵扯到一些基本的三维基础的概念,
比如焦距,
比如坐标系的转换的问题,
把三维的点转换为二维平面上点的公式,
利用绘图API最终将盒子以二维的形式绘制在屏幕上,
  盒子的各个面到底是空白还是半透明,还是不透明,当然不透的时候就会牵扯一个Z轴排序的问题,哪个面在前,哪个面在后,
还有就是盒子虽然有6个面,但我们最多只能看到3个面,那么多余的一些面就可以不绘制了,所以就需要有个判断;
以上是我在以前的一些基础的例子中能涉及到的一些东西了;
假设上面的盒子只是静止的;
那么当用引擎来实现同样的现实时又是怎样的?我看的是sandy引擎的as2.0的版本,主要是现在对2.0比较熟悉,这样便于自己的理解,等对基础的原理掌握的差不多后再转as3.0了。例子里面原来有运动我给封掉了,主要是便于研究吧。
import sandy.core.data.*;
import sandy.core.group.*;
import sandy.primitive.*;
import sandy.view.*;
import sandy.core.*;
import sandy.skin.*;
import sandy.util.*;
import sandy.events.*;
// We define some useful global variables
//
var screen:ClipScreen;// Presentation surface
//
var world:World3D = World3D.getInstance();// Our 3D world
// In the init() function we initialize and render the world
function init(Void) {
      //首先新建了一个屏幕;
     screen = new ClipScreen(this.createEmptyMovieClip("screen", 1), 550, 400);
      //新建一个摄像机,焦距为800;
     var cam = new Camera3D(800, screen);
      //设置摄像机在三维环境中的位置;
     cam.setPosition(-100,100,-500);
     cam.lookAt(0,0,0);
     world.addCamera(cam);
     var bg:Group = new Group();
     world.setRootGroup(bg);
     createScene(bg);
     world.render();
}
function createScene(bg) {
      //新建一个没有填充的盒子;
     var box = new sandy.primitive.Box(50, 50, 50, "quad");
      //给面一种材质;
     var skin = new sandy.skin.MixedSkin(15896373, 70, 0, 0, 0);
      //启用灯光效果;
     skin.setLightingEnable(true);
      //给盒子加上材质
     box.setSkin(skin);
      //把盒子加入到bg中;
     bg.addChild(box);
}
init();
  思路好像很明确,绘制一个盒子,加上材质,加上灯光,设置一台摄像机将看到的放映到屏幕;当我打了个断点后,然后看时如何实现的,结果代码如此之多,看的眼花缭乱,貌似关系巨复杂。与基础的那个相比;引擎中加了那么多的设计,到底有什么作用呢?我想好处肯定有,但都是那些呢?目前自己正在啃这些东西,总感觉在引擎的构造方面能多了解,在用引擎的时候就更知道引擎可以实现那些效果,引擎的各个细节的设计我想都是为解决一些列特定问题而产生的。
晕已经2点多了,发的牢骚太多,总之感觉基础原理方面的东西了解太少了。希望各位高手多给指点。


flash 3d 研究所
(2009-10-20 09:56:35)
呵呵,中华君真是非常努力的青年啊,好样儿的!
这个世界上能写三维引擎的人本来就不多.
flash3d只是五花八门的三维引擎其中一种,他仍然遵循着最初C语言下的引擎的规范,所以真正要研究引擎核心,看代码之前,需要去阅读基本OPENGL的引擎或者基础三维数学著作,在概念上的理解比较好.
要显示一个三维物体非常简单, 但是要'正确且可便于操作'的显示三维确是要经过很长的数据处理流程线.
一个三维引擎高手的道路肯定是很长的, 所以中华君也不用太着急, 如果喜欢这个领域,坚持慢慢的研究下去, 一定会成为大师.

加油!






评论人:
邮   箱: (填入邮箱,博客地址均可)

内   容: (广告和垃圾内容可能会被删除,望理解)
链接地址

验证码:(为防止机器人骚扰,请麻烦输入验证码^_^)
  

(目前需登陆方可发表)


不想添加了