0

你好,我有目标要实现,用鼠标操作 3d 立方体,每面墙上都有渐变填充。

我发现了一些对应于渐变和 3d 旋转立方体的源代码,但问题是:

当我把这两个东西放在一起时,效果看起来就像立方体是一个线框,对隐藏在第一个平面纯黑色背景后面的一些渐变背景具有透明度。渐变始终保持静止。

旋转/显示立方体的方法在输入三个参数 rotx .roty, rotz 我想利用它并将其应用于显示在每一侧的渐变。渐变有自己的矩阵,但我不知道如何以及何时操纵此渐变以获得所需的效果 - 我的意思是变换/旋转渐变的方式看起来像是画在立方体的侧面并沿着它变换到 3d 位置。我猜每一边都应该有单独的梯度矩阵,但要如何转换这个矩阵以适应 rotx,roty,i rotz。谁能帮我?

这是渐变的来源 http://snipplr.com/view.php?codeview&id=7050

以及可以获取立方体 fla 文件的站点 http://www.flashandmath.com/flashcs4/cs4simple3d/index.html

这是来自上面链接的.fla文件的代码以及我的修改

http://pastebin.com/fdc431a4

4

1 回答 1

1

这实际上是不可能的......透视失真不是仿射变换,这就是为什么没有矩阵可以作为合适的参数来创建具有正确透视失真的渐变......

我认为 Flash 10 最简单的方法实际上是采用不同的方式......所有 DisplayObjects 都可以在空间中转换,因此您只需用 DisplayObject 表示任何面,对其执行所有转换,然后剩下的就是做的是z排序...


编辑:您正在寻找的近似值是不可能的...想象一个面向您的立方体,具有从黑色到白色,从顶部到底部的线性渐变...当您开始向右转动时,梯度不再保持平行,相反,它们开始形成一个锥形梯度,全部汇聚在一个点...

第 2 段中的方法正是您正在寻找的...创建一个 DisplayObject(Shape 应该这样做,您不需要 MovieClips),为其绘制渐变,然后在 3d 空间中使用x, y, z, rotationX, rotationYand rotationZ... 一旦您使用多个对象,您将需要手动对它们进行 z 排序...如果您想要 3d 渐变,您将不得不删除该代码并使用这种方法,是迄今为止最简单的...

您的 AS3 问题实际上与语言无关……您应该重新考虑您的方法……从新语言和未知 API 开始,在不了解背后理论的情况下尝试增强 3d 引擎, 真的不是最好的办法...

你应该先开始习惯这门语言……一旦你对它感到满意,我认为最好的方法是使用一个好的 AS3 3d 引擎,例如 sandy、papervision、away3d、alternativa 或其他任何东西……例如,使用沙地,您创建一个天空盒(一个 3d 立方体)并将您想要的任何材料分配给它的面,然后您就完成了……而且,这些引擎与 3d 建模软件互操作,因此不仅仅是创建一些多面体用手和玩弄它们,你可以导入复杂的模型并做一些很酷的事情......但是按照逻辑顺序和足够的理论知识做事情......

那么祝你好运吧 ... ;)


问候

back2dos

于 2009-08-23T10:55:27.553 回答