我正在开发一个Java游戏,其中包含2D游戏面板和“伪”3D游戏面板。
它不是真正的3D,因为它只是将一些2D平面放置在3D环境中(没有自定义创建的模型)。
我正在使用jPCT作为渲染引擎,目前正在研究如何渲染墙壁。
在2D视图中,它们看起来像这样:
在3D视图中,我试图让它们看起来像这样:
这通过在彼此之上堆叠10个平面来实现,从而给人以3D墙的错觉。
获取此效果的代码如下:
问题在于当您直视它时,会出现这种效果:
增加平面数量并将它们放得更近可能会减少这个问题,但我正在寻求一种更有效的方式获得相同的效果。
我考虑用2D图像渲染一个立方体,使用最后一行像素作为侧面的纹理,例如从基础图像中提取(0,0)和(0,39)处的40x1图像,并将其拉伸到立方体的侧面上(原始图像为40x40)。
但是这种方法不完美,因为这些图像的可见部分小于40x40(例如水平墙的顶部和底部40x9像素是透明的),因此我应该进行一些边缘检测并从那里开始剪切。
还有更好的建议来尝试做到相同的效果吗?
它不是真正的3D,因为它只是将一些2D平面放置在3D环境中(没有自定义创建的模型)。
我正在使用jPCT作为渲染引擎,目前正在研究如何渲染墙壁。
在2D视图中,它们看起来像这样:
在3D视图中,我试图让它们看起来像这样:
这通过在彼此之上堆叠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像素是透明的),因此我应该进行一些边缘检测并从那里开始剪切。
还有更好的建议来尝试做到相同的效果吗?