gpt4 book ai didi

graphics - BlackBerry - 图像 3D 变换

转载 作者:行者123 更新时间:2023-12-02 19:07:37 25 4
gpt4 key购买 nike

我知道如何使用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);

但我需要的是 3d projection具有 3D 变换的简单图像(例如 this )

您能否建议我如何使用drawTexturedPath 做到这一点(我几乎确定这是可能的)?
还有其他选择吗?

最佳答案

该函数使用的方法(2 个步行向量)与用于著名的“rotozoomer”效果的 oldskool 编码技巧相同。 rotozoomer example video

此方法是旋转、缩放和倾斜图像的一种非常快速的方法。旋转只需旋转行走向量即可完成。缩放只需缩放行走向量即可完成。倾斜是通过相对于彼此旋转行走向量来完成的(例如,它们不再形成 90 度角)。

任天堂在他们的 SNES 中制作了硬件,可以在任何 Sprite 和/或背景上使用相同的效果。这为一些非常酷的效果让路。

该技术的一大缺点是无法透视地扭曲纹理。为此,每一条新的水平线,行走向量都应该稍微改变。 (没有图很难解释)。

在 snes 上,他们通过改变每条扫描线的 walkvectors 克服了这个问题(在那些日子里,人们可以在显示器绘制任何扫描线时设置中断)。该模式后来被称为MODE 7 (因为它的行为就像一种新的虚拟图形模式)。使用此模式最著名的游戏是《马里奥赛车》和《F-zero》

因此,要在黑莓上实现此功能,您必须将图像绘制“displayHeight”次(例如,每次绘制图像的一条扫描线)。这是达到预期效果的唯一方法。 (这无疑会降低性能,因为您现在使用新值多次调用 drawTexturedPath 函数,而不是一次)。

我想通过谷歌搜索你可以找到一些公式(甚至是实现)如何计算不同的步行向量。只要有一点纸(假设你的数学不太差),你也可以自己推导出来。当我为 Gameboy Advance 制作游戏时,我自己也做过这件事,所以我知道这是可以做到的。

一定要预先计算一切!速度就是一切(尤其是在手机等慢速机器上)

编辑:为你做了一些谷歌搜索。这里详细解释如何创建mode7效果。这将帮助您通过黑莓功能实现相同的目标。 Mode 7 implementation

关于graphics - BlackBerry - 图像 3D 变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1212651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com