25

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

OBJ 是打开且非常简单的格式

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

以此为依据。但它不会导出贴花。

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

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

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

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

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

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

  • 定位
  • 位置
  • 宽度
  • 高度

我还可以获取 IFace2 对象的列表并获取FaceDecalProperties. IFaceDecalProperties 提供下一个信息:

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

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

OBJ 格式不支持直接贴花。

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

4

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

我会从一个非常简单的东西开始,比如一个带有相同宽度和高度的棋盘格纹理的正方形。

于 2014-10-25T21:08:48.207 回答