Посмотрите на вызовы этой функции (заявление об отказе: не проверено - я не использовал LWJGL, но концепция должна быть идентичной):
GL11.glMatrixMode(GL11.GL_TEXTURE);
GL11.glRotate(90, 0, 0, 1); // (1) Here you transform texture space
GL11.glMatrixMode(GL11.GL_MODELVIEW);
// and so on
По сути, вам нужно вращать текстуру на объекте.И вот как вы это делаете - трансформируете матрицу проекции текстуры.Линия (1) поворачивает текстуру на 90 градусов вдоль оси Z (перпендикулярно плоскости текстуры).Это ось Z, потому что последний аргумент равен 1. Последние три аргумента обозначают X, Y и Z соответственно (я оставлю все объяснение позже, если вам интересно).
Лучшее, что вы можете сделать, этоЧтобы понять все основные вещи (проекция, текстурное пространство, нормальные векторы, триангуляция, непрерывность, системы частиц и многое другое), нужно скачать пробную версию трехмерного пакета и поиграть с ним.Я многому научился, просто играя в 3D Studio Max (доступна пробная версия и многое другое бесплатно).Если у вас есть немного свободного времени и желание изучать что-то новое, я настоятельно рекомендую изучить это.В конце концов, если вы действительно заинтересованы в 3D-графике, вы в конечном итоге будете использовать ее в любом случае - будь то 3D-пакет или редактор уровней игрового движка.
РЕДАКТИРОВАТЬ: после прочтения я узнал собственный код... По сути, вы могли поменять местами только некоторые координаты, чтобы они симметрично отражались по диагонали.Вы можете оказаться вверх ногами, но это также можно исправить с помощью дополнительной настройки (или трансформации оси обзора).Вот мое непроверенное предположение:
// tweaked to get pole right
s1 = ((double) j) / longs;
s2 = ((double) j + 1) / longs;
t = ((double) i) / halfLats;
Попробуйте поменять s1 на s2, если это не так.