黑莓 - 图像3D变换

Mak*_*tar 3 3d graphics blackberry java-me

我知道如何使用drawTexturePath在任何角度旋转图像:

int displayWidth = Display.getWidth();
int displayHeight = Display.getHeight();
int[] x = new int[] { 0, displayWidth, displayWidth, 0 };
int[] x = new int[] { 0, 0, displayHeight, displayHeight };
int angle = Fixed32.toFP( 45 );
int dux = Fixed32.cosd(angle );
int dvx = -Fixed32.sind( angle );
int duy = Fixed32.sind( angle );         
int dvy = Fixed32.cosd( angle );       
graphics.drawTexturedPath( x, y, null, null, 0, 0, dvx, dux, dvy, duy, image);
Run Code Online (Sandbox Code Playgroud)

但我需要的是一个带有3d变换的简单图像的三维投影(类似这样)

你能告诉我如何使用drawTexturedPath(我几乎可以肯定这是可能的)吗?
还有其他选择吗?

Toa*_*oad 6

该函数使用的方法(2个步行向量)与用于着名的"rotozoomer"效果的oldskool编码技巧相同.rotozoomer示例视频

此方法是一种非常快速的旋转,缩放和倾斜图像的方法.只需旋转步行矢量即可完成旋转.简单地通过缩放步行向量来完成缩放.通过相对于彼此旋转助行器来完成偏斜(例如,它们不再成90度角).

任天堂已经在他们的SNES中制造硬件,以对任何精灵和/或背景使用相同的效果.这为一些非常酷的效果让路.

这种技术的一个很大的缺点是人们不能透视地扭曲纹理.要做到这一点,每个新的水平线,步行矢量应该稍微改变.(没有图纸很难解释).

在snes上,他们通过改变walkvectors的每个扫描线来克服这个问题(在那些日子里,当监视器绘制任何扫描线时,可以设置中断).此模式后来被称为MODE 7(因为它表现得像一种新的虚拟图形模式).使用这种模式的最着名的游戏是马里奥卡丁车和F-zero

因此,为了使这个工作在黑莓上,你将必须绘制你的图像"displayHeight"次(例如,每次图像的一条扫描线).这是达到预期效果的唯一方法.(这无疑会让你受到性能损失,因为你现在用新值调用drawTexturedPath函数很多次,而不是一次).

我想通过一些谷歌搜索你可以找到一些公式(甚至一个实现)如何计算变化的walkvectors.有了一点纸(考虑到你的数学不太糟糕),你也可以自己推断它.当我为Gameboy Advance制作游戏时,我也是自己做的,所以我知道它可以完成.

一定要预先确定一切!速度就是一切(特别是在手机等慢速机器上)

编辑:为你做了一些谷歌搜索.以下是如何创建mode7效果的详细说明.这将帮助您实现与Blackberry功能相同的功能.模式7的实施