2011-05-14 79 views
2

我正在开发一款既具有2D游戏面板又具有“伪”-3D功能的Java游戏。将2D平面伸展到3D立方体

这不是真正的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像素对于水平墙是透明的),但这并不完美,所以我应该做一些边缘检测并在那里开始切割。

有什么更好的建议可以尝试做同样的事情?

+0

你到底在问什么?很明显,绘制立方体是在这里做的明智之举。如果问题只是关于如何纹理立方体,那么您是否可以尝试澄清所用纹理的问题? – YXD 2011-05-14 18:34:50

+1

我知道如何纹理一个立方体,问题是原始的二维墙壁图像没有完全覆盖像素(见http://i.imgur.com/46Gwz.png,左右9个像素是透明的) 。所以我不能只创建一个立方体并对其进行贴图。我需要确定图像的边缘并基于此创建多边形。然后,我需要切掉边缘的小片,并将它们用作立方体边上的纹理。 – srdoso 2011-05-14 18:42:19

+0

是的,你刚刚描述的可以完成。寻找栅格到矢量或栅格矢量化算法。 – karmakaze 2011-05-15 21:58:48

回答

0

最简单但可能性最差的解决方案是,图像中的任何像素都位于透明像素和非透明像素的旁边,为该像素渲染一个高长方块。