Если я заменю объект чайника проекта iOS Vuforia, почему вместо куба будет виден только треугольник? - PullRequest
2 голосов
/ 21 июня 2019

Я скачал пример проекта Vuforia iOS. Вместо чайника я хочу вращать куб с текстурой. Чтобы создать куб с текстурой, я использовал blender и создал файл OBJ с его UV-отображением, как показано ниже:

enter image description here

В blender он отлично отрисовывается, и я отлично вижу объект куба с его текстурой.

Затем я преобразовал файл OBJ в файл .h, используя скрипт perl, и заменил этот файл Teapot.h, а также заменил изображение чайника на PNG, прикрепленный выше.

Пока я запускаю проект, куб виден с его текстурой, но треугольники разрезаны для каждой стороны, как показано ниже:

enter image description here

Я отчаянно нуждаюсь в создании пользовательских квадратов, кубов с текстурами в существующем проекте iOS, но мне не удается проверить выполнимость.

ПРИМЕЧАНИЕ. Мой проект уже разработан с множеством фреймворков и библиотеки и на одном экране мне нужно интегрировать эту функцию.

1 Ответ

3 голосов
/ 26 июня 2019

Я мог бы добиться этого, установив дополнение к Blender, а затем экспортировать файл .h непосредственно из Blender.Перед экспортом нет необходимости выполнять триангуляцию, так как Unity уже выполняет триангуляцию для нас.

  • Загрузите дополнение из здесь .Существует полное руководство о том, как добавить его в Blender.
  • Подготовьте 3D-объект, который вы хотите в Blender.Проверьте этот учебник, который объясняет, как использовать Blender и создать простой 3D-объект с текстурой вокруг него.

  • Как только у вас есть нужная модель, перейдите кFile> Export> Vuforia OpenGL C Include, как показано на рисунке ниже.Сохраните файл .h в каком-то месте

enter image description here

  • В примере проекта Vuforia iOS добавьте это.h файл и UV-mapping изображение (которое мы использовали для визуализации нашего объекта) таким же образом Teapot.h и его UV-mapping изображение.

  • Импорт файла заголовка.

  • Заменить чайник:

Заменить

glVertexAttribPointer(vertexHandle, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)teapotVertices);
glVertexAttribPointer(normalHandle, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)teapotNormals);
glVertexAttribPointer(textureCoordHandle, 2, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)teapotTexCoords);

на

BlenderExportedObject object = rectObject;

glVertexAttribPointer(vertexHandle, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)object.vertices);
glVertexAttribPointer(normalHandle, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)object.normals);
glVertexAttribPointer(textureCoordHandle, 2, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)object.texCoords);

, где rectObject - имя объекта.В моем случае имя моего объекта Blender было rect, поэтому он создал rectObject имя в .h файле.Проверьте файл .h, чтобы найти это имя.

  • Элементы Draw:

Замените

glDrawElements(GL_TRIANGLES, NUM_TEAPOT_OBJECT_INDEX, GL_UNSIGNED_SHORT, (const GLvoid*)teapotIndices);

на

glDrawElements(GL_TRIANGLES, NUM_RECT_OBJECT_INDEX, GL_UNSIGNED_SHORT, (const GLvoid*)object.indices);

Обратитесь к файлу .h, чтобы найти NUM_RECT_OBJECT_INDEX.

  • Вот и все.Теперь он должен безупречно визуализировать любой сложный 3D-объект.
...