Подтвердить что ты не робот

Экспорт SolidWorks в OBJ

В настоящий момент я занимаюсь созданием надстройки SolidWorks для экспорта 3D-моделей в формате OBJ.

OBJ открыт и очень простой формат

Я googled и узнал следующую информацию о существующих решениях: есть несколько платных плагинов и 1 бесплатный, который называется "Free OBJ Exporter"

Это было взято за основу. Но он не экспортирует наклейки.

Наклейки - это изображения, которые вы рисуете поверх основной текстуры (если вы отходите от контекста SolidWorks, в 3D-программировании это как отметки пуль, капли крови и т.д.)

Экспортные надписи являются важной частью проекта.

Я переписал весь код VBA на С#.

И теперь я сталкиваюсь с проблемой экспортных наклеек. Документация Solidworks API довольно плохая.

После недели чтения документации и нескольких вопросов по LinkedIn я обнаружил следующее:

IDecal - это класс, наследуемый от IRendererMaterial. Поэтому я могу получить список всех отличительных знаков и получить следующую информацию:

  • Yposition
  • Xposition
  • Ширина
  • Высота

Я также могу получить список объектов IFace2 и получить FaceDecalProperties. IFaceDecalProperties предоставляет следующую информацию:

  • TextureTranslationU
  • TextureTranslationV
  • TextureTranslationX
  • TextureTranslationY
  • TextureUScale
  • TextureVScale

Что это такое, что он обозначает и как его использовать, я не знаю.

Формат OBJ не поддерживает прямые наклейки.

Как я могу использовать эти параметры для конкатенации текстуры и декалирования в одном файле? Я хочу сделать это для рендеринга наклейки на лицо и решить проблему Z-боя, потому что у меня нет исходного кода средства визуализации.

4b9b3361

Ответ 1

Я не уверен, что TextureTranslationX и TextureTranslationY означают в этом контексте, но TextureTranslationU и TextureTranslationV почти наверняка относятся к текстурным координатам модели.

Обычно координаты текстуры (U, V) задаются между [0,1] и определяют, как изображение отображается на поверхность. (U, V) = (0,0) обычно будет верхним левым пикселем изображения текстуры.

Итак, если у вас есть набор вершин типа:

v 0 0 0
v 1 0 0
v 0 1 0
v 1 1 0

Определяет квадрат в пространстве (X, Y, Z), и эти вершины имеют следующие (U, V) текстурные координаты:

vt 0 0
vt 1 0
vt 0 1
vt 1 1

Тогда на квадрат будет применена "текстура", в которой мы действительно подразумеваем изображение, так что ее верхний левый пиксель будет применен к вершине (0, 0, 0) квадрата.

TectureUScale и TextureVScale, вероятно, относятся к параметрам масштабирования, которые допускают непрямоугольные изображения текстур.

Что касается перевода этого кода на OBJ, обратитесь к http://en.wikipedia.org/wiki/Wavefront_.obj_file. Формат, который я использовал выше, соответствует спецификации формата файла.

Вам также необходимо сохранить изображение текстуры в файле .tga в соответствии с документацией, а затем создать файл .mtl, который выглядит так:

newmtl texture1
Ka 1.000 1.000 1.000  # Only ambient to keep things simple
Kd 0.000 0.000 0.000  # Disable diffuse component
Ks 0.000 0.000 0.000  # Disable specular component
illum 1               # Only color and ambient are enabled
map_Ka texture.tga    # Ambient texture map

Заключительная часть:

usemtl [texture1]

Перед определениями координат вершин и текстур в вашем файле .obj.

Я бы начал с чего-то очень простого, как квадрат, текстурированный с шаблоном шахматной доски, который имеет ту же ширину и высоту.

Ответ 2

Вы нашли решение, чтобы получить УФ?