我正在开发一款同时具有 2D 游戏面板和“伪”-3D 面板的 Java 游戏。
它不是真正的 3D,因为它只是放置在 3D 环境中的一些 2D 平面(没有自定义创建的模型)。
我正在使用 jPCT 作为渲染引擎,目前正在研究渲染墙壁。
这是通过将 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));
}
这可以通过增加平面的数量并将它们靠得更近来减少,但我正在寻找一种更有效的方法来获得相同的效果。
我正在考虑使用 2D 图像作为顶部纹理渲染一个立方体,并使用最后一行像素作为侧面的纹理,例如从基础图像中提取 (0,0) 和 (0,39) 处的 40x1 图像并拉伸这些在立方体的侧面(原始图像为 40x40)。
虽然这不会完美地工作,因为这些图像的可见部分小于 40x40(例如,顶部和底部 40x9 像素对于水平墙是透明的),所以我应该做一些边缘检测并开始在那里切割。
有什么更好的建议来尝试做同样的事情吗?