iPhone OpenGL ES 2.0 Strange Pattern Рендеринг текстуры на сфере из файла COLLADA

Я использую Cheetah3D для экспорта файла COLLADA ( .dae ), а затем COLLADAViewer2 Эрика Бака ( https://github.com/erikbuck/COLLADAViewer2/tree/master/COLLADAViewer2) для экспорта формата списка моделей, как описано в его книге.

Мой файл COLLADA представляет собой простую сферу, на которую я пытаюсь нанести текстуру земли.

В программе COLLADAViewer мой экспортированный файл .dae выглядит нормально, вот скриншот:

введите здесь описание изображения

Часть моего кода, используемая для рендеринга текстуры на сфере, находится здесь:

// Setup texture
CGImageRef imageRef =
[[UIImage imageNamed:@"Earth.jpg"] CGImage];

GLKTextureInfo *textureInfoEarth = [GLKTextureLoader
                               textureWithCGImage:imageRef
                               options:[NSDictionary dictionaryWithObjectsAndKeys:
                                        [NSNumber numberWithBool:YES],
                                        GLKTextureLoaderOriginBottomLeft, nil]
                               error:NULL];

self.baseEffect.texture2d0.name = textureInfoEarth.name;
self.baseEffect.texture2d0.target = textureInfoEarth.target;

// Enable fragment blending with Frame Buffer contents
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

К сожалению, в XCode, когда я создаю и запускаю свою сферу, она выглядит на Симуляторе так:

введите здесь описание изображения

Я не знаю, как объяснить странный рисунок на сфере, как будто текстура есть, но повторяется. Может ли кто-нибудь помочь мне понять это? Спасибо -

Я загрузил проект xcode, с которым экспериментирую, на Github. Он использует множество примеров кода из книги г-на Бака по OpenGL.

Вот ссылка: https://github.com/phishstang65/renderer


person PhilBot    schedule 04.01.2013    source источник
comment
не могли бы вы опубликовать код, где загружается сфера и где она отображается?   -  person rraallvv    schedule 06.01.2013
comment
Привет! Вместо того, чтобы публиковать много кода, я загрузил рассматриваемый проект на Github и поместил ссылку в свой пост. Буду очень признателен за помощь - Спасибо!   -  person PhilBot    schedule 07.01.2013


Ответы (1)


Мне кажется, что координаты текстуры для каждого треугольника в модели идентичны.

Глядя на ваш код, я думаю, что ваш буфер вершин имеет формат 40 байтов на вершину, каждое значение представляет собой GLFloat из двух байтов, 3 для позиции, 3 для нормали, 2 для координат текстуры и 2 для второго набора координат текстуры .

Я запустил приложение с точкой останова после того, как оно заполнило данные в объекте UtilityMesh. Глядя на дамп данных в отладчике, есть определенный шаблон, который повторяется каждые 40 байт. Первые 24 байта для положения и нормалей варьируются, как и ожидалось. Последние восемь байтов всегда равны 0, что, я думаю, соответствует неиспользуемому второму набору текстурных координат. Проблема в том, что восемь байтов, соответствующих координатам первичной текстуры, циклически проходят через три значения.

00000000 00000000 
0000003d 0000803d 
00000000 0000803d

Так что я думаю, что ваша программа в порядке, она просто получает неверные данные. Проверьте процесс конвертации.

person Mr. Berna    schedule 08.01.2013