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

3
我正在开发一个Java游戏,其中包含2D游戏面板和“伪”3D游戏面板。
它不是真正的3D,因为它只是将一些2D平面放置在3D环境中(没有自定义创建的模型)。
我正在使用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像素是透明的),因此我应该进行一些边缘检测并从那里开始剪切。
还有更好的建议来尝试做到相同的效果吗?

你到底在问什么?很明显,在这里绘制立方体是明智的选择。如果问题只是关于如何给立方体贴图,那么你能否尝试澄清一下你使用的纹理存在什么问题? - YXD
1
我知道如何给立方体贴图,问题是原始的2D墙面图像没有完全被像素覆盖(请参见http://i.imgur.com/46Gwz.png,左右各有约9个像素是透明的)。因此,我不能只创建一个立方体并给它贴上纹理。我需要确定图像的边缘并基于该边缘创建多边形。然后,我需要切掉边缘的小块并将其用作立方体侧面的纹理。 - srdoso
是的,您所描述的内容可以实现。请寻找栅格转矢量或栅格矢量化算法。 - karmakaze
1个回答

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接