Экспорт SolidWorks в OBJ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

формат OBJ не поддерживает непосредственно надписи.

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

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. Формат, который я использовал выше, соответствует спецификации формата файла.

вам также нужно будет сохранить изображение текстуры в a .файл 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.

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