Растянуть 2D плоскость на 3D куб - PullRequest
2 голосов
/ 14 мая 2011

Я работаю над Java-игрой, в которой есть как панель 2D-игр, так и псевдо-3D-модель.

Это не настоящее 3D, поскольку это всего лишь несколько 2D-плоскостей, помещенных в 3D-среду (нет пользовательских моделей).

Я использую jPCT в качестве движка рендеринга, и в настоящее время я изучаю визуализацию стен.

В 2D-виде они выглядят так:
enter image description here

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

Это работает путем наложения 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));
    }

Проблема в том, что при взгляде прямопри этом вы получите этот эффект:
http://i.stack.imgur.com/s8hyX.png

Это можно уменьшить, увеличив количество самолетов и собрав их ближе друг к другу, но я ищу болееэффективный способ получить тот же эффект.

Я думал о рендеринге куба с 2D-изображением в качестве верхней текстуры и использования последней строкипикселей в качестве текстур для сторон, например, извлеките изображение 40x1 в (0,0) и (0,39) из основного изображения и растяните их по сторонам кубов (исходные изображения 40x40).

Это не будет работать идеально, потому что видимая часть этих изображений меньше 40x40 (например, верхние и нижние 40x9 пикселей прозрачны для горизонтальной стены), поэтому я должен сделать некоторое обнаружение края и начать резать там.

Какие-нибудь лучшие предложения, чтобы попытаться сделать то же самое?

1 Ответ

0 голосов
/ 20 мая 2012

Самое простое, но, вероятно, наименее эффективное решение для любого пикселя в изображении, который находится рядом с прозрачным и непрозрачным пикселем, визуализирует высокий прямоугольный куб только для этого пикселя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...