SolidWorks到OBJ导出

时间:2014-05-23 08:05:31

标签: solidworks exporter

目前我正在使用创建SolidWorks插件来导出OBJ格式的3D模型。

OBJ已打开且格式非常简单

我用谷歌搜索并发现了有关现有解决方案的以下信息:有几个付费插件和一个免费,这被称为“免费OBJ导出器”

以此为基础。但它不会导出贴花。

贴图是您在主要纹理上绘制的图像(如果您远离SolidWorks的上下文,在3D编程中它就像是子弹,血滴等标记)。

出口贴花是该项目的重要组成部分。

我将所有VBA代码重写为C#。

现在我来处理出口贴花的问题。文档Solidworks API相当差。

在阅读文档和LinkedIn上的几个问题一周后,我发现了以下内容:

IDecalIRendererMaterial的遗留类。因此,我可以获得所有贴花的清单,并获得以下信息:

  • Yposition
  • x向位置
  • 宽度
  • 高度

我也可以获取IFace2对象列表并获取FaceDecalPropertiesIFaceDecalProperties提供了下一个信息:

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

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

OBJ格式不支持直接贴花。

如何在一个文件中将此参数用于连接纹理和贴花?我想在脸上渲染贴花并解决Z-fighting的问题,因为我没有渲染器的源代码。

1 个答案:

答案 0 :(得分:4)

我不确定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文件中的顶点和纹理坐标定义之前。

我会从一个非常简单的东西开始,就像一个方形纹理,棋盘图案具有相同的宽度和高度。