Экспорт 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 начнем с чего-то очень простого, как квадрат, текстурированный с рисунком шахматной доски, который имеет ту же ширину и высоту.