java - 将 2D 平面拉伸(stretch)为 3D 立方体

标签 java 3d jpct

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

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

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

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

在 3D View 中,我试图让它们看起来像这样:
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));
    }

问题是,当直视它时,你会得到这样的效果:
/image/s8hyX.png

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

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

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

有更好的建议来尝试做同样的事情吗?

最佳答案

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

关于java - 将 2D 平面拉伸(stretch)为 3D 立方体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6003828/

相关文章:

java - 为什么我的面板/窗口中没有图片?

java - java中连字符(-)有什么用

c++ - 为什么这个三角形重新排序算法会导致随机连接?

java - 触摸 3D 对象 ArToolKitJpctBaseLib

android - Vuforia jPCT 集成和构建 jni

java - 修改json字符串中的属性值

java - Kivy 应用程序崩溃,没有非静态方法 openAPKExpansionInputStream

algorithm - 3D 平面拟合算法

javascript - 方向感知 3D 立方体动画

android - 将 JPCT-AE 与 Vuforia 集成