|
|
最近更新:
●
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
 |
(2009-10-19 16:32:39) |
Camera就是像现实中的那样啊,移动摄像机它的取景也变了,相应的传递给Renderer的数据也变了,因此渲染出来画面也就变了,当然,物体没变。 DDM的教程里有这个解释的。
|
 |
(2009-10-19 16:39:16) |
首先是有一个Scene来作为舞台,DisplayObject3D都按三维坐标放在这个舞台上,然后Camera在每帧把它所‘看’到的画面做成数据给Renderer,最后Renderer分析这些数据把图像渲染到Viewport上。
|
 |
(2009-10-19 17:33:08) |
是的,就像我回在中华君您另一篇贴子一样,camera只是个概念,不是真实的存在,就是对模型数据得变形而已。他模拟着各种不同的‘眼睛’看同一个模型(一组数据)的方法而已。
但如果你没有camera这个概念的话,形变物体就会真的把物体的数据改变掉,这个是不应该出现的,所以才有camera这个概念。
当然,‘物体向左移动10’和‘camera向右移动10’的显示结果是完全一样的,但概念不一样的。
|
 |
(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点多了,发的牢骚太多,总之感觉基础原理方面的东西了解太少了。希望各位高手多给指点。
|
 |
(2009-10-20 09:56:35) |
呵呵,中华君真是非常努力的青年啊,好样儿的! 这个世界上能写三维引擎的人本来就不多. flash3d只是五花八门的三维引擎其中一种,他仍然遵循着最初C语言下的引擎的规范,所以真正要研究引擎核心,看代码之前,需要去阅读基本OPENGL的引擎或者基础三维数学著作,在概念上的理解比较好. 要显示一个三维物体非常简单, 但是要'正确且可便于操作'的显示三维确是要经过很长的数据处理流程线. 一个三维引擎高手的道路肯定是很长的, 所以中华君也不用太着急, 如果喜欢这个领域,坚持慢慢的研究下去, 一定会成为大师.
加油!
|
|
|