将2D平面拉伸到3D立方体

时间:2011-05-14 18:05:58

标签: java 3d jpct

我正在开发一款兼具2D游戏面板和“伪”-3D游戏的Java游戏。

它不是真正的3D,因为它只是放置在3D环境中的一些2D平面(没有自定义创建的模型)。

我正在使用jPCT作为渲染引擎,我目前正在研究如何渲染墙。

在2D视图中,它们看起来像这样:
enter image description here

在3D视图中,我试图让它们看起来像这样:
enter image description here

这可以通过将10个平面堆叠在一起来实现,从而产生3D墙的幻觉。

获得此代码的代码是:

    Object3D obj = new Object3D(20);

    for (int y=0; y < 10; y++) {
        float fY = y / -10f;
        obj.addTriangle(new SimpleVector(-1, fY, 1), 0, 0,
                        new SimpleVector(-1, fY, -1), 0, 1,
                        new SimpleVector(1, fY, -1), 1, 1,
                        textureManager.getTextureID(topTexture));
        obj.addTriangle(new SimpleVector(1, fY, -1), 1, 1,
                        new SimpleVector(1, fY, 1), 1, 0,
                        new SimpleVector(-1, fY, 1), 0, 0,
                        textureManager.getTextureID(topTexture));
    }

问题是,当直视它时,你会得到这样的效果:
http://i.stack.imgur.com/s8hyX.png

这可以通过增加飞机数量并将它们放在一起来减少,但我正在寻找一种更有效的方法来获得相同的效果。

我正在考虑使用2D图像作为顶部纹理渲染立方体,并使用最后一行像素作为边的纹理,例如从基本图像中提取(0,0)和(0,39)处的40x1图像,并将其拉伸到立方体的两侧(原始图像为40x40)。

这不会完美,但因为这些图像的可见部分小于40x40(例如,顶部和底部40x9像素对于水平墙是透明的),所以我应该做一些边缘检测并开始切割那里。

尝试做同样的更好的建议吗?

1 个答案:

答案 0 :(得分:0)

最简单但可能性能最差的解决方案是图像中与透明像素和非透明像素相邻的任何像素,为该像素渲染一个高大的矩形立方体。