SolidWorks导出为OBJ格式

25

目前我正在创作SolidWorks插件,用于导出OBJ格式的3D模型。

OBJ是一种开放且非常简单的格式。

我进行了谷歌搜索,并发现现有解决方案的以下信息:有几个付费插件和1个名为“Free OBJ Exporter”的免费插件。

这个免费插件被用作基础。但它不能导出贴花(Decals)。

贴花是你在主纹理上绘制的图像(如果你从SolidWorks的背景下移开,它就像弹片标记、血液滴落等)。

导出贴花是项目中重要的一部分。

我将所有的VBA代码改写成了C#。

现在我正在处理导出贴花的问题。Solidworks API文档相当贫乏。

经过一周的阅读文档和在LinkedIn上提问,我找到了以下内容:

IDecal是从IRendererMaterial继承而来的类。因此我可以得到所有贴花的列表并获取以下信息:

  • Y位置
  • X位置
  • 宽度
  • 高度

我还可以获取IFace2对象的列表并获取FaceDecalProperties

IFaceDecalProperties提供以下信息:

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

它是什么,代表什么以及如何使用我不知道。

OBJ格式不能直接支持贴花。

我如何使用这些参数将纹理和贴花合并到一个文件中?我希望这样做可以在面上渲染贴花,并解决Z-fighting的问题,因为我没有渲染器的源代码。


1
我认为这本教科书的页面可以让你了解在这个过程中,u、v、x和y通常代表什么。虽然我对此不太熟悉,但我有点想学习。https://encrypted.google.com/books?id=4gBUz_IkkSsC&lpg=PA390&ots=mAxE7Fwop1&dq=uvxy%20texture&pg=PA390#v=onepage&q=uvxy%20texture&f=false - minopret
1
你有没有考虑在GitHub上发布你的代码?我想为开发一个C#宏或插件做出贡献,以完成同样的工作。 - sentenza
1个回答

6
我不确定在这个上下文中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 文件中,顶点和纹理坐标定义之前,我建议从一个非常简单的正方形开始,使用检查板图案进行纹理映射,它的宽度和高度相同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接