有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将二维平面拉伸到三维立方体

我正在开发一个Java游戏,它既有2D游戏面板,也有“伪”-3D游戏面板

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

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

在二维视图中,它们看起来是这样的:
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) 个答案

  1. # 1 楼答案

    最简单但性能可能最低的解决方案是,对于图像中靠近透明像素和非透明像素的任何像素,仅为该像素渲染一个高矩形立方体