Как загрузить текстуры на разные грани куба в GLGE? (или хотя бы WebGL) - PullRequest
0 голосов
/ 12 сентября 2011

У меня есть 6 текстур, которые я хотел бы загрузить на 6 различных гранях куба. Я пытаюсь сделать новую текстуру, используя GLGE.TextureCube();. А затем я загружаю все шесть изображений в грани, которые якобы должны быть на кубе, вот так:

    mapTex = new GLGE.TextureCube();
    mapTex.setSrcNegX("models/map/negx.jpg"); // they are all 1024x1024
    mapTex.setSrcNegY("models/map/negy.jpg");
    mapTex.setSrcNegZ("models/map/negz.jpg");
    mapTex.setSrcPosX("models/map/posx.jpg");
    mapTex.setSrcPosY("models/map/posy.jpg");
    mapTex.setSrcPosZ("models/map/posz.jpg");

А затем я добавляю текстуру к объекту Wavefront. Тем не менее, кажется, что только одно из 6 текстурных изображений отображается и отображается неправильно.

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

Как правильно объединить 6 текстур в одну карту для использования с GLGE? Или есть способ вручную загрузить текстуру на грани сетки?

Ответы [ 2 ]

3 голосов
/ 12 сентября 2011

Карты кубов несколько особенные, так как обычные координаты текстуры UV (ST) для них не работают.Карта куба, как следует из названия, состоит из 6 квадратичных текстур, расположенных в виде граней куба.Координаты текстуры - это не абсолютные позиции на гранях куба, а направления от центра куба, а позиция, в которой луч из центра в данном направлении попадает на куб, - это позициятекстура на этой конкретной грани.

Если вы примените координаты текстуры с третьей координатой, равной нулю, как в Wavefront, вы будете обращаться только к части лица куба, а именно к той части, которая пересекается с плоскостью XY.Если вы хотите увидеть работающую кубическую карту в действии, используйте smooth нормали объекта в качестве координат текстуры.

0 голосов
/ 13 сентября 2011

Вам нужно будет использовать другую текстурную координату, например: materialLayer.setMapinput (GLGE.MAP_OBJ), в зависимости от того, что вы хотите попробовать GLGE.MAP_OBJ, GLGE.MAP_NORM или GLGE.MAP_ENV

...