你好我有目标实现,用立体填充每个墙上的鼠标操纵3d立方体。
我发现一些源代码与渐变和3d旋转立方体相对应,但问题出在这里:
当我将这两个东西放在一起时,效果看起来像立方体是一个线框,透明到隐藏在第一个平面纯黑色背景后面的一些渐变背景。渐变始终保持不变。
旋转/显示立方体的方法得到输入三个参数rotx .roty,rotz我想使用它并将其应用于每侧显示的渐变。渐变得到自己的矩阵,但我不知道如何以及何时操纵这个渐变以获得所需的效果 - 我的意思是变换/旋转渐变的方式看起来像是在立方体的一侧绘制并沿着它转换到3d位置。我想每一边应该在每一侧都有单独的梯度矩阵,但是要做什么来改变这个矩阵以适应rotx,roty,i rotz。任何人都可以帮助我吗?
这里是渐变源 http://snipplr.com/view.php?codeview&id=7050
和您可以获取立方体文件的网站 http://www.flashandmath.com/flashcs4/cs4simple3d/index.html
这里是来自上面链接的.fla文件的代码和我的修改
答案 0 :(得分:1)
这实际上是不可能的......透视失真不是affine transformation,这就是为什么没有矩阵是一个合适的参数来创建具有正确透视失真的渐变......
我认为flash 10最简单的方法是实际采用不同的方式...所有DisplayObject都可以在空间中进行转换,因此您只需通过DisplayObject表示任何面,对其执行所有转换,然后完成所有转换剩下要做的就是z-sorting ...
编辑:您正在寻找的近似是非常不可能的......想象一个面向您的立方体,具有从黑到白,从顶部到底部的线性渐变......你开始向右转,渐变线不再保持平行,而是开始形成一个锥形渐变,所有这些都会聚合在一个点上......
第2段中的方法正是您正在寻找的...创建一个DisplayObject(Shape应该这样做,你不需要MovieClip),为它绘制一个渐变,然后在3d中转换它空间使用x
,y
,z
,rotationX
,rotationY
和rotationZ
...并且只要您使用多个对象,你需要手动对它们进行z排序......如果你想要3d渐变,你将不得不放弃那些代码并使用这种方法,这是迄今为止最简单的...
你对AS3的问题与语言没有任何关系...你应该重新考虑你的方法......从一种新语言和一种未知的API开始,尝试在不知道的情况下增强一个3d引擎背后的理论,并不是最好的事情......
你应该开始习惯这种语言......一旦你对它感到满意,我认为最好的方法是使用一个好的AS3 3d引擎,比如沙,papervision,away3d,alternativa或者其他什么...例如用沙子,你创建一个天空盒子(一个三维立方体)并分配你想要的任何材料,你已经完成了......而且,这些引擎可以与3d建模软件互操作,所以不仅仅是手工创建一些多面体并与它们一起玩,你可以导入复杂的模型并做一些很酷的东西......但是按照逻辑顺序做事并且有足够的理论知识......
祝你好运......;)
格尔茨
back2dos