Я работаю над Java-игрой, в которой есть как панель 2D-игр, так и псевдо-3D-модель.
Это не настоящее 3D, поскольку это всего лишь несколько 2D-плоскостей, помещенных в 3D-среду (нет пользовательских моделей).
Я использую jPCT в качестве движка рендеринга, и в настоящее время я изучаю визуализацию стен.
В 2D-виде они выглядят так:

На трехмерном изображении я пытаюсь заставить их выглядеть так:

Это работает путем наложения 10 плоскостей друг на друга, и это создает иллюзию трехмерной стены.
Код для получения этого:
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-изображением в качестве верхней текстуры и использования последней строкипикселей в качестве текстур для сторон, например, извлеките изображение 40x1 в (0,0) и (0,39) из основного изображения и растяните их по сторонам кубов (исходные изображения 40x40).
Это не будет работать идеально, потому что видимая часть этих изображений меньше 40x40 (например, верхние и нижние 40x9 пикселей прозрачны для горизонтальной стены), поэтому я должен сделать некоторое обнаружение края и начать резать там.
Какие-нибудь лучшие предложения, чтобы попытаться сделать то же самое?